Tìm kiếm bằng từ khoá sẽ bỏ sót khi khách dùng chữ khác với tài liệu của bạn. Bài này giải thích embedding và vector, nền tảng để máy tìm theo ý nghĩa, và cũng là mắt xích đầu tiên của RAG.
Biến câu chữ thành toạ độ
Khách nhắn: “Mình muốn mang theo cái vali to lên máy bay có được không?” Trong tài liệu của hãng bay không có chữ “vali”, chỉ có “hành lý ký gửi”. Tìm bằng từ khoá sẽ trượt. Nhưng con người hiểu hai cách nói ấy cùng ý.
Embedding (nhúng) là cách đổi một đoạn văn thành một dãy số, gọi là vector (véc-tơ), sao cho đoạn có nghĩa gần nhau thì dãy số gần nhau. Hãy tưởng tượng một tấm bản đồ rộng lớn, mỗi đoạn văn là một điểm. Những câu nói về hành lý tụ lại một khu, những câu nói về đổi vé tụ ở khu khác. Dãy số chính là toạ độ của điểm, chỉ là bản đồ này có hàng trăm hay hàng nghìn chiều chứ không chỉ hai.
Việc đổi chữ thành số do một mô hình embedding làm. Đây là loại mô hình riêng, khác với mô hình chat, thường nhỏ hơn và rẻ hơn. Nhà cung cấp lớn đều có loại này, xem tài liệu chính thức để biết lựa chọn và giá hiện hành.
Đo độ gần
Có hai cách hay dùng để đo hai vector gần nhau cỡ nào. Khoảng cách giống đo đường chim bay giữa hai điểm. Độ tương đồng cosine không quan tâm hai điểm cách xa bao nhiêu mà quan tâm hai mũi tên có chỉ cùng hướng không, và thường được ưa dùng cho văn bản vì nó ít bị ảnh hưởng bởi việc đoạn văn dài hay ngắn.
| Cách tìm | Hoạt động | Điểm mạnh | Điểm yếu |
|---|---|---|---|
| Từ khoá | Khớp chữ y hệt | Chính xác với mã đơn, tên riêng, số hiệu | Bỏ sót khi diễn đạt khác |
| Vector | Khớp theo ý nghĩa | Hiểu cách nói khác nhau | Có thể kéo về đoạn “na ná” nhưng sai chi tiết |
Chỉ mục và cơ sở dữ liệu vector
Nếu tài liệu có vài chục đoạn, bạn so từng đoạn cũng nhanh. Nhưng với hàng trăm nghìn đoạn thì so từng đoạn là quá chậm. Vì thế người ta dựng chỉ mục vector, một cấu trúc dữ liệu giúp tìm gần đúng các điểm láng giềng mà không phải duyệt hết, đánh đổi chút độ chính xác lấy tốc độ lớn. Cơ sở dữ liệu vector là phần mềm lưu vector cùng văn bản gốc và siêu dữ liệu (nguồn, ngày, loại tài liệu), có sẵn chỉ mục. Với dự án nhỏ, bạn có thể bắt đầu bằng thư viện chạy ngay trong ứng dụng hoặc một tiện ích vector của cơ sở dữ liệu quen thuộc như Postgres hay Supabase, chưa cần dịch vụ riêng.
Toàn bộ quy trình
Lưu ý
Câu hỏi và tài liệu phải được nhúng bằng cùng một mô hình. Đổi mô hình giữa chừng thì toàn bộ vector cũ vô nghĩa, phải nhúng lại từ đầu.
Hạn chế cần biết
Vector gần nhau nghĩa là “nói về chuyện tương tự”, chưa chắc là “trả lời đúng câu hỏi”. Hai đoạn nói về hành lý xách tay của hai hãng khác nhau sẽ rất gần nhau, nhưng quy định lại khác. Vì vậy ta thường lưu thêm siêu dữ liệu để lọc trước, ví dụ chỉ tìm trong tài liệu của đúng hãng.
Thử ngay
Không cần code, bạn thử trực giác bằng cách nhờ AI chấm độ gần ý nghĩa:
Cho 5 câu hỏi của khách về quy định hành lý máy bay, viết khác nhau.
Sau đó cho tôi một đoạn quy định mẫu (tự bịa, ghi rõ là minh hoạ)
và xếp 5 câu hỏi theo mức liên quan tới đoạn đó, giải thích ngắn.
Chú ý câu nào không chứa chữ nào trùng với đoạn nhưng vẫn liên quan.
Ghi nhớ
- Embedding đổi văn bản thành vector sao cho nghĩa gần thì số gần.
- Tìm vector hiểu cách nói khác; tìm từ khoá giỏi mã, tên, số hiệu.
- Chỉ mục vector tìm gần đúng rất nhanh trên lượng đoạn lớn.
- Phải dùng cùng một mô hình embedding cho tài liệu và câu hỏi.