📖 Nội dung bài học
Gia đình phông chữ
Tóm tắt
Khi xây dựng các pipeline RAG, bạn sẽ nhanh chóng nhận ra rằng chỉ riêng tìm kiếm ngữ nghĩa không phải lúc nào cũng trả về kết quả tốt nhất. Đôi khi bạn cần các kết quả khớp chính xác thuật ngữ mà tìm kiếm ngữ nghĩa có thể bỏ lỡ. Giải pháp là kết hợp tìm kiếm ngữ nghĩa với tìm kiếm từ vựng bằng kỹ thuật gọi là BM25.
Vấn đề với chỉ riêng tìm kiếm ngữ nghĩa
Giả sử bạn đang tìm kiếm một ID sự cố cụ thể như "INC-2023-Q4-011" trong một tài liệu. Mặc dù tìm kiếm ngữ nghĩa vượt trội trong việc hiểu ngữ cảnh và ý nghĩa, nó có thể trả về các phần có liên quan về mặt ngữ nghĩa nhưng thực tế không chứa thuật ngữ chính xác mà bạn đang tìm kiếm.

Trong ví dụ trên, tìm kiếm ngữ nghĩa đã trả về phần an ninh mạng (thực sự có chứa ID sự cố) nhưng cũng trả về phần phân tích tài chính không đề cập đến sự cố đó. Điều này xảy ra vì tìm kiếm ngữ nghĩa tập trung vào sự tương đồng về mặt khái niệm hơn là khớp chính xác thuật ngữ.
Chiến lược tìm kiếm kết hợp
Giải pháp là chạy cả tìm kiếm ngữ nghĩa và từ vựng song song, sau đó hợp nhất các kết quả. Điều này mang lại cho bạn những điều tốt nhất của cả hai thế giới:

- Tìm kiếm ngữ nghĩa tìm thấy nội dung liên quan về mặt khái niệm bằng cách dùng embeddings
- Tìm kiếm từ vựng tìm thấy các kết quả khớp chính xác thuật ngữ bằng cách dùng tìm kiếm văn bản cổ điển
- Kết quả hợp nhất kết hợp cả hai phương pháp để có độ chính xác tốt hơn
Cách BM25 hoạt động
BM25 (Best Match 25) là một thuật toán phổ biến để tìm kiếm từ vựng trong các hệ thống RAG. Đây là cách nó xử lý một truy vấn tìm kiếm:

Bước 1: Tokenize truy vấn
Chia câu hỏi của người dùng thành các thuật ngữ riêng lẻ. Ví dụ: "a INC-2023-Q4-011" trở thành ["a", "INC-2023-Q4-011"].
Bước 2: Đếm tần suất thuật ngữ
Xem mỗi thuật ngữ xuất hiện bao nhiêu lần trong tất cả các tài liệu của bạn. Các từ phổ biến như "a" có thể xuất hiện 5 lần, trong khi các thuật ngữ cụ thể như "INC-2023-Q4-011" có thể chỉ xuất hiện một lần.
Bước 3: Đánh trọng số các thuật ngữ theo mức độ quan trọng
Các thuật ngữ xuất hiện ít thường xuyên hơn sẽ nhận được điểm quan trọng cao hơn. Từ "a" nhận được mức độ quan trọng thấp vì nó phổ biến, trong khi "INC-2023-Q4-011" nhận được mức độ quan trọng cao vì nó hiếm.
Bước 4: Tìm kết quả khớp tốt nhất
Trả về các tài liệu có chứa nhiều trường hợp hơn của các thuật ngữ được đánh trọng số cao hơn.
Triển khai tìm kiếm BM25
Đây là cách thiết lập một hệ thống tìm kiếm BM25 cơ bản:
chunks = chunk_by_section(text)
store = BM25Index()
for chunk in chunks:
store.add_document({"content": chunk})
results = store.search("What happened with INC-2023-Q4-011?", 3)
for doc, distance in results:
print(distance, "\n", doc["content"][:200], "\n----\n")
Khi bạn chạy tìm kiếm này, bạn sẽ nhận được kết quả tốt hơn nhiều so với chỉ tìm kiếm ngữ nghĩa. Thuật toán BM25 ưu tiên các phần thực sự chứa các thuật ngữ tìm kiếm cụ thể của bạn, đặc biệt là các thuật ngữ hiếm như ID sự cố.

Lưu ý cách các kết quả hiện ưu tiên đúng phần Kỹ thuật phần mềm và phần An ninh mạng - cả hai đều thực sự chứa ID sự cố mà bạn đang tìm kiếm.
Tại sao điều này hoạt động tốt hơn
BM25 vượt trội trong việc tìm các kết quả khớp chính xác vì nó:
- Gán trọng số cao hơn cho các thuật ngữ cụ thể, hiếm gặp
- Bỏ qua các từ thông thường không làm tăng giá trị tìm kiếm
- Tập trung vào tần suất thuật ngữ hơn là ý nghĩa ngữ nghĩa
- Hoạt động đặc biệt tốt đối với các thuật ngữ kỹ thuật, ID và các cụm từ cụ thể
Điểm mấu chốt là cả hai phương pháp tìm kiếm đều có những điểm mạnh bổ sung. Tìm kiếm ngữ nghĩa hiểu ngữ cảnh và ý nghĩa, trong khi tìm kiếm từ vựng đảm bảo bạn không bỏ lỡ các kết quả khớp chính xác thuật ngữ. Bằng cách kết hợp chúng, bạn tạo ra một hệ thống tìm kiếm mạnh mẽ hơn, xử lý cả các truy vấn khái niệm và tra cứu cụ thể một cách hiệu quả.
Trong bước tiếp theo, bạn sẽ học cách hợp nhất kết quả từ cả hai hệ thống tìm kiếm để tạo ra trải nghiệm tìm kiếm kết hợp thống nhất.
Tải xuống
🔁 Bài học liên quan
- Bài tiếp: A Multi-Index RAG pipeline
- Bài trước: Implementing the RAG flow
- Cùng section: Making a request · Multi-Turn conversations · Chat exercise
- Thuộc lộ trình: Path C
- Docs tham khảo: Glossary · Skills atlas · By use-case
📚 Nguồn & ghi nhận
- Bài học gốc Anthropic Academy: https://anthropic.skilljar.com/claude-with-the-anthropic-api/287767
- © 2025 Anthropic. Chỉ dùng cho mục đích giáo dục, fair-use.
- Crawl: 2026-04-23 · Chuẩn hoá: 2026-05-01