Sự kiện tìm thấy:

Vector Search và HNSW: Tìm kiếm ngữ nghĩa nhanh

Vector Search và HNSW: Tìm kiếm ngữ nghĩa nhanh

Một trung tâm hỗ trợ có một triệu bài viết có thể chứa đúng câu trả lời cho khách hàng, nhưng tìm ra câu trả lời đó mới là phần khó. Khi người dùng hỏi cách hủy gói đăng ký, bài hướng dẫn phù hợp có thể lại mang tiêu đề về việc kết thúc tư cách thành viên và không trùng bất kỳ từ khóa nào.

Đó là lý do doanh nghiệp xây chatbot, hệ thống RAG, công cụ đề xuất hoặc tìm kiếm nội bộ cần hiểu Vector Search. Embeddings giúp hệ thống hiểu ý nghĩa, còn HNSW giúp tìm nội dung gần nghĩa đủ nhanh để dùng trong môi trường thực tế.

Vì sao các cách tìm kiếm thông thường không đủ?

Hãy hình dung bạn đang quản lý kho kiến thức rất lớn. Có ba cách tiếp cận tự nhiên: đọc toàn bộ tài liệu, tìm theo từ khóa, hoặc chuyển nội dung thành vector để tìm theo ngữ nghĩa.

Cách tiếp cận Điểm mạnh Vấn đề chính
Quét toàn bộ tài liệu Luôn có thể tìm ra câu trả lời nếu tồn tại Chi phí tăng tuyến tính theo số bài viết
Tìm kiếm từ khóa Nhanh nhờ chỉ mục đảo Bỏ sót đồng nghĩa và cách diễn đạt khác
Vector Search Tìm theo ý nghĩa thay vì chỉ theo chữ Cần cơ chế tìm vector lân cận thật nhanh

Quét toàn bộ tài liệu chính xác nhưng không mở rộng được

Với một kho nhỏ, bạn có thể mở từng bài, kiểm tra nội dung rồi tiếp tục đến khi gặp câu trả lời đúng. Nhưng với một triệu bài viết, một truy vấn có thể cần tới một triệu lần đọc. Khi kho nội dung tăng gấp đôi, thời gian xử lý cũng tăng gấp đôi.

Cách này đúng về mặt kết quả, nhưng không phù hợp khi bạn cần phản hồi liên tục cho khách hàng. Đây là bài toán chi phí tăng theo quy mô dữ liệu.

Minh họa quét toàn bộ bài viết với chi phí một triệu lần đọc cho mỗi truy vấn
Quét toàn bộ kho dữ liệu tạo chi phí tăng trực tiếp theo số lượng tài liệu.

Tìm kiếm từ khóa nhanh nhưng không hiểu đồng nghĩa

Tìm kiếm từ khóa dùng chỉ mục đảo, tức một bảng ánh xạ từ mỗi từ sang các tài liệu chứa từ đó. Khi người dùng nhập từ liên quan đến hủy, hệ thống có thể lập tức trả về danh sách bài viết chứa từ này mà không phải đọc từng bài.

Điểm yếu xuất hiện khi ngôn ngữ của người hỏi khác ngôn ngữ người viết. Một bài tên “Kết thúc tư cách thành viên” có thể là câu trả lời chính xác cho yêu cầu hủy gói đăng ký, nhưng không chứa từ “hủy” hay “đăng ký”. Chỉ mục từ khóa sẽ bỏ lỡ câu trả lời tốt nhất chỉ vì hai bên dùng từ khác nhau.

Sơ đồ chỉ mục đảo cho tìm kiếm từ khóa và bài viết đúng bị bỏ sót do không chứa từ truy vấn
Từ khóa tìm nhanh, nhưng không tự nhận ra các cách diễn đạt cùng ý nghĩa.

Embeddings biến ý nghĩa thành không gian hình học

Embeddings là cách một mô hình chuyển mỗi bài viết thành vector, tức một dãy số dài. Quá trình này được thiết kế để những tài liệu có nghĩa gần nhau sẽ nằm gần nhau trong không gian vector, ngay cả khi chúng không dùng chung từ nào.

Ví dụ, bài về kết thúc tư cách thành viên và bài về tạm dừng gói dịch vụ sẽ nằm trong cùng một vùng. Ngược lại, công thức làm bánh mì men cái sẽ ở rất xa. Câu hỏi của người dùng cũng được chuyển thành vector, rồi nhiệm vụ tìm kiếm trở thành tìm các vector gần nhất với vector truy vấn.

Điểm quan trọng là Vector Search không còn hỏi “tài liệu nào có đúng chữ này?”, mà hỏi “tài liệu nào gần nhất về mặt ý nghĩa?”. Đây là nền tảng hữu ích cho tìm kiếm ngữ nghĩa, hệ thống đề xuất, chatbot hỗ trợ và RAG.

Biểu đồ không gian vector với các cụm nội dung có ý nghĩa gần nhau
Trong không gian vector, nội dung gần nghĩa được gom vào những vùng gần nhau.

Embeddings giải quyết ý nghĩa, chưa giải quyết tốc độ

Nếu bạn đã có một triệu vector bài viết, cách chính xác nhất là tính khoảng cách từ truy vấn tới toàn bộ một triệu vector. Đây vẫn là tìm kiếm vét cạn, chỉ khác là bạn đang quét vector thay vì quét văn bản.

Vì vậy, vấn đề khó không phải chỉ là định nghĩa “gần nhất”. Vấn đề là tìm được các hàng xóm gần nhất với tốc độ đủ nhanh mà không cần kiểm tra toàn bộ không gian.

Đồ thị hàng xóm: chỉ đi qua các vùng có triển vọng

Ý tưởng tiếp theo là nối mỗi vector với các vector lân cận nhất của nó. Toàn bộ kho dữ liệu lúc này trở thành một đồ thị, trong đó các cạnh chỉ ra những nội dung có ý nghĩa gần nhau.

Thay vì đo khoảng cách đến mọi bài viết, hệ thống có thể bắt đầu ở một điểm bất kỳ, kiểm tra các hàng xóm, rồi di chuyển tham lam đến điểm gần truy vấn hơn. Từ khu vực công thức nấu ăn, đường đi có thể dần tiến sang các bài về gói dịch vụ và kết thúc ở bài phù hợp.

Phần lớn không gian sẽ không bị ghé qua. Tuy nhiên, đồ thị phẳng vẫn có thể phải đi qua nhiều liên kết cục bộ trước khi tới đúng khu vực.

HNSW là viết tắt của Hierarchical Navigable Small World. Bạn có thể hình dung nó như hệ thống đường giao thông: đường cao tốc ở tầng trên, đường chính ở tầng giữa và đường địa phương ở tầng dưới.

Tầng dưới chứa toàn bộ bài viết cùng nhiều liên kết ngắn đến các hàng xóm gần. Các tầng cao hơn chỉ giữ một phần nhỏ điểm dữ liệu, nhưng có các liên kết dài hơn, giúp vượt qua những khoảng cách lớn trong không gian vector.

HNSW tìm kiếm theo từng tầng

  1. Bắt đầu từ tầng cao nhất.
    • Hệ thống đi từ điểm khởi đầu sang hàng xóm có ý nghĩa gần truy vấn hơn.
    • Ở tầng thưa, mỗi bước có thể bao phủ một khoảng cách lớn.
  2. Dừng khi không còn hàng xóm tốt hơn.
    • Điểm tốt nhất hiện tại trở thành điểm vào cho tầng kế tiếp.
    • Thuật toán hạ dần xuống để tăng độ chi tiết.
  3. Tinh chỉnh tại tầng dưới cùng.
    • Hệ thống duy trì một tập nhỏ các ứng viên hứa hẹn.
    • Kết quả trả về là các hàng xóm gần đúng, không nhất thiết là đáp án toán học tuyệt đối.
Sơ đồ quá trình truy vấn đi qua tầng trên và tầng dưới của HNSW với tập ứng viên
HNSW thu hẹp dần vùng tìm kiếm từ tầng thưa đến tầng chi tiết.

Ba tham số quyết định đánh đổi của HNSW

HNSW là một thỏa hiệp có thể điều chỉnh giữa bộ nhớ, thời gian tạo chỉ mục, tốc độ truy vấn và khả năng tìm đúng kết quả gần nhất. Ba tham số cần nắm là M, efConstructionefSearch.

Tham số Vai trò Ảnh hưởng chính
M Số lượng hàng xóm mỗi điểm giữ lại Ảnh hưởng bộ nhớ và độ kết nối của đồ thị
efConstruction Mức độ tìm kiếm khi xây chỉ mục Ảnh hưởng thời gian xây dựng và chất lượng đồ thị
efSearch Độ rộng tập ứng viên khi truy vấn Ảnh hưởng trực tiếp đến tốc độ và khả năng tìm đúng

efSearch là nút điều chỉnh tại thời điểm truy vấn. Tập ứng viên rộng hơn kiểm tra nhiều khả năng hơn, thường cho kết quả tốt hơn nhưng chậm hơn. Tập hẹp hơn phản hồi nhanh hơn, nhưng đôi lúc bỏ qua một kết quả phù hợp hơn.

Khi xây chỉ mục, bài viết được thêm từng cái một. Mỗi bài có cơ hội được nâng lên tầng trên qua các lần chọn ngẫu nhiên có thiên lệch. Đa số chỉ ở tầng đáy, một số ít lên cao hơn, và các điểm hiếm ở tầng trên trở thành các “đường cao tốc” cho những truy vấn sau.

HNSW hoạt động thế nào trong chatbot hỗ trợ?

Quy trình hoàn chỉnh khá rõ ràng. Câu hỏi được chuyển thành embedding, chỉ mục HNSW trả về một nhóm tài liệu gần nghĩa trong vài mili giây, sau đó hệ thống có thể áp dụng bộ lọc hoặc xếp hạng lại để tinh chỉnh danh sách.

Cuối cùng, mô hình ngôn ngữ dựa trên các tài liệu đã chọn để tạo câu trả lời thân thiện. Với doanh nghiệp, điều này giúp chatbot không phải dò toàn bộ kho kiến thức và không bị phụ thuộc hoàn toàn vào từ khóa chính xác.

FAQ

HNSW có luôn trả về kết quả gần nhất tuyệt đối không?

Không. HNSW là phương pháp tìm kiếm gần đúng, ưu tiên tốc độ cao trong khi vẫn duy trì khả năng tìm được ứng viên phù hợp. Độ rộng tìm kiếm lớn hơn thường cải thiện kết quả, nhưng làm tăng chi phí truy vấn.

Vector Search có thay thế hoàn toàn tìm kiếm từ khóa không?

Vector Search xử lý tốt ý nghĩa và từ đồng nghĩa, còn tìm kiếm từ khóa vẫn mạnh khi bạn cần khớp chính xác. Trong hệ thống thực tế, các bước lọc hoặc xếp hạng lại có thể được thêm vào sau khi HNSW trả về ứng viên.

Nếu bạn cần xây dựng website, chatbot kiến thức hoặc nền tảng tìm kiếm nội bộ có cấu trúc kỹ thuật ổn định, đội ngũ MintStack có thể hỗ trợ bạn biến yêu cầu vận hành thành hệ thống phù hợp.

 

Hotline Zalo Zalo
AI Avatar

Trợ lý ảo AI

Sẵn sàng hỗ trợ

AI Avatar
Xin chào! Em là trợ lý ảo của MintStack, sẵn sàng hỗ trợ anh/chị tìm hiểu về dịch vụ thiết kế website, SEO, content marketing và các giải pháp công nghệ phù hợp. Anh/chị đang quan tâm đến vấn đề gì ạ?
01:32