Nói ngắn gọn, embedding là cách biến một đoạn chữ thành một dãy số sao cho hai đoạn gần nghĩa nhau thì có dãy số gần nhau. Nhờ đó máy tính so sánh được "ý" của văn bản thay vì chỉ so từng chữ, và đây là nền tảng của tìm kiếm ngữ nghĩa, hệ thống RAG và phần lớn tính năng gợi ý bạn dùng hằng ngày.
Vấn đề mà embedding giải quyết
Máy tính giỏi so sánh số, không giỏi so sánh nghĩa. Hãy thử với ba câu:
- "Cách hoàn tiền khi huỷ đơn hàng"
- "Tôi muốn trả lại sản phẩm và nhận lại tiền"
- "Cách hoàn thành đơn hàng"
Người đọc thấy ngay câu một và câu hai nói cùng một việc, còn câu ba là chuyện khác dù có nhiều chữ giống câu một. Nhưng nếu so bằng chữ, câu một và câu ba giống nhau hơn: chung "cách", "hoàn", "đơn hàng". Tìm kiếm kiểu khớp từ khoá sẽ trả câu ba lên trước, và đó là lý do ô tìm kiếm trên nhiều website hay trả kết quả vô duyên.
Embedding sinh ra để giải quyết chính chỗ này. Nó đưa mỗi câu qua một mô hình AI được huấn luyện chuyên cho việc "hiểu nghĩa", và mô hình trả về một dãy số, gọi là vector. Với ba câu trên, vector của câu một và câu hai nằm gần nhau, vector câu ba nằm xa hơn. Từ lúc đó, việc "tìm câu gần nghĩa" biến thành "tìm dãy số gần nhau", thứ máy tính làm cực nhanh.
Hình dung không cần toán
Hãy tưởng tượng một tấm bản đồ khổng lồ. Mỗi từ, mỗi câu là một điểm được ghim lên bản đồ đó. Mô hình embedding là người ghim, và quy tắc ghim rất đơn giản: những thứ hay xuất hiện trong bối cảnh giống nhau thì ghim gần nhau. "Chó" và "mèo" gần nhau vì cùng hay đi với "nuôi", "cho ăn", "thú cưng". "Chó" và "hoá đơn" xa nhau vì hiếm khi chung bối cảnh.
Điểm khác với bản đồ thật: bản đồ này không có hai chiều mà có hàng trăm chiều. Đừng cố hình dung hàng trăm chiều, không ai hình dung được. Chỉ cần hiểu mỗi chiều ghi lại một khía cạnh nào đó của nghĩa, và "gần" nghĩa là gần trên tất cả các chiều cộng lại. Dãy số bạn nhận về chính là toạ độ của điểm trên bản đồ đó.
Ví dụ nổi tiếng nhất minh hoạ việc toạ độ này thực sự mang nghĩa: lấy vector của "vua", trừ đi vector "đàn ông", cộng vector "đàn bà", kết quả rơi rất gần vector "nữ hoàng". Tức là hướng từ "đàn ông" sang "đàn bà" trên bản đồ trùng với hướng từ "vua" sang "nữ hoàng". Mô hình chưa bao giờ được dạy phép tính này, nó tự nổi lên từ việc học bối cảnh. Tương tự, "Hà Nội − Việt Nam + Nhật Bản" rơi gần "Tokyo".
Trong thực tế, người ta không làm phép cộng trừ như vậy, mà chỉ cần một phép: đo khoảng cách giữa hai vector. Khoảng cách nhỏ là gần nghĩa, lớn là xa nghĩa.
Embedding khác gì mô hình chat
Người mới hay nhầm hai thứ này vì đều là "AI xử lý văn bản". Chúng khác nhau về việc làm và cách dùng:
| Mô hình embedding | Mô hình chat (LLM) | |
|---|---|---|
| Đầu vào | Một đoạn chữ | Một đoạn chữ |
| Đầu ra | Một dãy số cố định | Chữ mới, sinh từng token |
| Việc chính | Đo và so nghĩa | Hiểu rồi viết, trả lời |
| Kích thước | Nhỏ hơn nhiều | Rất lớn |
| Tốc độ, chi phí | Rất rẻ, xử lý hàng triệu đoạn được | Đắt, chậm hơn nhiều |
| Người dùng có "chat" với nó không | Không | Có |
Hai loại thường đi cặp: embedding làm khâu tìm, LLM làm khâu trả lời. Bài LLM là gì nói về vế sau; bài này là vế trước.
Embedding được dùng vào việc gì
Tìm kiếm ngữ nghĩa. Thay vì khớp từ khoá, hệ thống chuyển mọi tài liệu thành vector từ trước, lưu vào một cơ sở dữ liệu vector. Khi bạn gõ câu hỏi, câu hỏi cũng được chuyển thành vector, rồi hệ thống tìm những tài liệu có vector gần nhất. Kết quả: gõ "làm sao lấy lại tiền" vẫn tìm ra bài "chính sách hoàn trả" dù không chung từ nào.
RAG. Đây là ứng dụng đang phổ biến nhất. Khi bạn hỏi chatbot về tài liệu nội bộ công ty, hệ thống không thể dán toàn bộ tài liệu vào prompt vì quá dài. Nó dùng embedding để tìm vài đoạn liên quan nhất, rồi chỉ đưa các đoạn đó cho LLM đọc và trả lời. Chất lượng khâu embedding quyết định chatbot có tìm đúng đoạn hay không; tìm sai đoạn thì LLM giỏi đến đâu cũng trả lời sai. Bài RAG là gì mô tả cả quy trình.
Gợi ý. Sản phẩm, bài viết, video cũng chuyển thành vector được, dựa trên mô tả hoặc lịch sử người xem. "Người xem cái này cũng thích cái kia" thực chất là "vector cái này gần vector cái kia".
Gom nhóm và phát hiện trùng. Có mười nghìn phản hồi khách hàng, muốn biết họ phàn nàn về mấy nhóm vấn đề? Chuyển thành vector rồi gom các điểm gần nhau lại. Muốn tìm bài viết trùng ý dù viết khác lời? So khoảng cách vector.
Vài điểm cần biết trước khi dùng
Mỗi mô hình một bản đồ riêng. Vector từ mô hình A không so được với vector từ mô hình B, giống như toạ độ trên hai bản đồ khác tỷ lệ. Đổi mô hình embedding là phải chuyển lại toàn bộ dữ liệu.
Đoạn dài bị mờ nghĩa. Nhét cả chương sách vào một vector thì vector đó là "trung bình" của nhiều ý, chẳng gần ý nào rõ. Vì thế tài liệu thường được cắt thành đoạn vài trăm chữ trước khi embedding, và cách cắt ảnh hưởng lớn đến kết quả tìm.
Gần nghĩa không phải đúng. Embedding tìm đoạn "nói về cùng chuyện", không phải đoạn "chứa câu trả lời đúng". Câu hỏi "giá gói A" có thể kéo về đoạn nói về giá gói B vì rất gần nghĩa. Khâu LLM phía sau phải tự phân biệt, và đây là một nguồn gây ra hallucination trong hệ thống RAG.
Dùng ở Việt Nam thế nào
Tiếng Việt là điểm cần kiểm đầu tiên. Nhiều mô hình embedding được huấn luyện chủ yếu bằng tiếng Anh; đưa tiếng Việt vào vẫn ra vector, nhưng bản đồ tiếng Việt của chúng thưa và méo: hai câu gần nghĩa có thể bị ghim xa, câu khác nghĩa lại gần. Hãy ưu tiên mô hình đa ngôn ngữ ghi rõ hỗ trợ tiếng Việt, và trước khi chọn, tự thử với vài chục cặp câu tiếng Việt lấy từ chính dữ liệu của bạn. Lấy câu hỏi thật của khách, xem hệ thống có kéo về đúng đoạn tài liệu không.
Chuyện dấu và chính tả. Người Việt gõ tìm kiếm hay bỏ dấu, viết tắt, sai chính tả. Mô hình đa ngôn ngữ tốt chịu được một phần, nhưng "hoan tien" và "hoàn tiền" vẫn có thể rơi xa nhau. Chuẩn hoá đầu vào trước khi embedding, hoặc đưa cả biến thể không dấu vào dữ liệu, là mẹo hay dùng.
Ai nên quan tâm:
- Doanh nghiệp có kho tài liệu, FAQ, chính sách muốn làm chatbot hỏi đáp nội bộ hoặc cho khách hàng. Embedding là khâu quyết định chatbot đó có tìm đúng tài liệu không.
- Cửa hàng online muốn ô tìm kiếm hiểu "áo mặc đi biển" thay vì chỉ khớp chữ "áo". Đây là bước đầu nếu bạn cân nhắc AI hỗ trợ bán hàng online.
- Lập trình viên xây tính năng tìm kiếm, gợi ý, phân loại. Hầu hết dịch vụ API lớn đều có endpoint embedding riêng, rẻ hơn nhiều so với gọi mô hình chat, và có nhiều mô hình mở chạy được trên máy thường.
- Người làm nghiên cứu, thư viện, pháp chế cần tìm trong hàng nghìn văn bản theo ý chứ không theo từ khoá.
Ai không cần bận tâm: người chỉ dùng ChatGPT hay Gemini để hỏi đáp thường ngày. Embedding đang chạy ngầm trong nhiều tính năng bạn dùng, nhưng bạn không phải chạm vào nó.
Câu hỏi thường gặp
Embedding có phải là AI hiểu nghĩa thật không?
Không theo nghĩa con người. Nó ghi lại quy luật thống kê: từ nào hay đi cùng từ nào. Nhưng quy luật đó đủ tốt để "gần nghĩa" theo máy trùng với "gần nghĩa" theo người trong đa số trường hợp, và đó là tất cả những gì ứng dụng cần.
Dãy số embedding dài bao nhiêu?
Tuỳ mô hình, thường từ vài trăm đến vài nghìn con số cho mỗi đoạn văn. Dài hơn không đồng nghĩa tốt hơn; nó đổi lấy dung lượng lưu trữ và tốc độ tìm. Với ứng dụng nhỏ, kích thước mặc định của mô hình là đủ.
Có cần cơ sở dữ liệu vector không?
Với vài nghìn đoạn, một danh sách trong bộ nhớ và so lần lượt là xong. Với hàng triệu đoạn thì cần cơ sở dữ liệu vector chuyên dụng để tìm nhanh. Nhiều cơ sở dữ liệu thông thường hiện cũng có sẵn phần mở rộng cho vector, không nhất thiết phải thêm hệ thống mới.
Embedding tiếng Việt dùng mô hình nào?
Bài này không nêu tên vì bảng xếp hạng đổi liên tục. Nguyên tắc chọn: mô hình đa ngôn ngữ có công bố kết quả trên tiếng Việt, và quan trọng hơn là tự thử trên dữ liệu của bạn. Kết quả trên dữ liệu thật đáng tin hơn mọi bảng xếp hạng.
Embedding có lộ dữ liệu không?
Vector không phải văn bản, nhưng từ vector có thể suy ngược lại phần nào nội dung gốc. Nếu dùng dịch vụ embedding bên ngoài, văn bản của bạn vẫn được gửi đi để tính vector. Với dữ liệu nhạy cảm, hãy dùng mô hình embedding chạy nội bộ.