AIHieu.comAI Hiểu
Thuật ngữ AI giải thích dễ hiểu

Tìm kiếm theo nghĩa là gì: embedding giúp máy hiểu "khác chữ nhưng cùng ý" ra sao

Tìm kiếm theo nghĩa dùng embedding đặt mỗi câu vào một toạ độ, câu cùng ý nằm gần nhau. Cơ chế, ứng dụng quanh ta và những chỗ nó hay nhầm.

Two young friends in a Hoi An cafe sorting a pile of colorful buttons into small bowls by shade, overhead view of hands and wooden table, soft afternoon light

Tìm kiếm theo nghĩa là cách tìm thông tin dựa trên ý của câu hỏi, không dựa trên việc trùng từng chữ. Bạn gõ "máy lạnh chảy nước", hệ thống vẫn tìm ra bài viết tên "điều hoà bị rỉ nước trong phòng", dù hai câu gần như không chung chữ nào. Công cụ đứng sau việc này là embedding, tiếng Việt thường gọi là vector nhúng: mỗi câu được đổi thành một dãy số, giống một toạ độ, sao cho các câu cùng ý nằm gần nhau.

Embedding là một thuật ngữ nghe kỹ thuật nhưng bạn dùng nó hằng ngày mà không biết: trong ô tìm kiếm của cửa hàng trực tuyến, trong mục "bài viết liên quan", trong chatbot trả lời dựa trên tài liệu của công ty. Bài này giải thích ý tưởng bằng ví dụ đời thường, không công thức, và chỉ ra những chỗ tìm kiếm theo nghĩa hay nhầm để bạn khỏi tin nó tuyệt đối.

Tìm theo chữ và tìm theo nghĩa khác nhau ở đâu

Cách tìm kiếm truyền thống, gọi là tìm theo từ khoá, hoạt động gần giống tra mục lục cuối sách: máy lập danh sách xem chữ nào xuất hiện trong tài liệu nào, rồi khi bạn gõ câu hỏi, nó trả về tài liệu chứa đúng các chữ ấy, ưu tiên tài liệu chứa nhiều và chứa ở chỗ quan trọng. Cách này nhanh, rẻ, dễ giải thích, và rất giỏi khi bạn biết chính xác chữ cần tìm, như một mã đơn hàng hay một tên người.

Điểm yếu của nó là ngôn ngữ con người có quá nhiều cách nói cùng một ý. "Điều hoà" và "máy lạnh", "bị rỉ" và "chảy nước", "xe máy không nổ" và "xe đề không lên" là những cặp mà người Việt hiểu ngay là một, nhưng máy tìm theo chữ coi là khác hẳn. Ngược lại, hai câu chung chữ nhưng khác nghĩa, như "đường" là con đường hay "đường" là đường ăn, lại bị máy gộp nhầm.

Tìm theo nghĩa giải quyết chuyện này bằng cách so ý thay vì so chữ. Câu hỏi của bạn và từng đoạn tài liệu đều được đổi sang một dạng biểu diễn ý nghĩa, rồi máy tìm những đoạn có ý gần với câu hỏi nhất. Trên thực tế, nhiều hệ thống tốt hiện nay kết hợp cả hai cách: dùng từ khoá để bắt chính xác các mã, tên riêng, con số, và dùng nghĩa để bắt các cách diễn đạt khác nhau. Khi đọc tài liệu kỹ thuật, bạn sẽ gặp tên gọi tìm kiếm lai (hybrid search) cho kiểu kết hợp này.

Embedding là gì: đổi một câu thành toạ độ

Hình dung bạn sắp xếp các món ăn lên một tấm bản đồ tưởng tượng. Trục ngang là mặn hay ngọt, trục dọc là nóng hay lạnh. Phở nằm ở góc mặn và nóng, chè đậu nằm ở góc ngọt và lạnh, bánh flan nằm gần chè. Chỉ với hai con số, mỗi món đã có một vị trí, và món giống nhau nằm gần nhau. Đây chính là ý tưởng của embedding: biểu diễn mỗi thứ bằng một dãy số, sao cho khoảng cách giữa các dãy số phản ánh độ giống nhau.

Khác biệt là embedding của câu chữ không chỉ có hai trục mà có hàng trăm tới vài nghìn trục, và không trục nào được con người đặt tên trước. Một mô hình được huấn luyện trên rất nhiều cặp câu, học cách đặt các câu cùng ý ở gần nhau và các câu khác ý ở xa nhau. Kết quả là một không gian nhiều chiều, nơi "máy lạnh chảy nước" và "điều hoà rỉ nước" nằm sát nhau dù chữ khác hẳn.

Ý tưởng biểu diễn từ bằng dãy số đã có từ lâu, nhưng được biết rộng rãi từ khoảng năm 2013, khi nhóm nghiên cứu của Google công bố phương pháp word2vec. Ví dụ nổi tiếng thời đó là lấy toạ độ của "vua", trừ đi "đàn ông", cộng thêm "phụ nữ", sẽ ra một điểm rất gần "nữ hoàng". Ví dụ này đẹp nhưng không phải lúc nào cũng đúng như vậy; nó cho thấy các hướng trong không gian có thể mang ý nghĩa, chứ không phải máy đã hiểu khái niệm vương quyền.

Các mô hình embedding hiện nay không chỉ biểu diễn từng từ mà cả câu và đoạn văn, và có thể biểu diễn cả ảnh, âm thanh. Phần toán học đứng sau thuộc về đại số tuyến tính; ở đây bạn chỉ cần giữ hình ảnh tấm bản đồ: gần nhau là giống nhau.

Một lần tìm kiếm theo nghĩa diễn ra thế nào

Lấy ví dụ giả định: một cửa hàng điện máy ở Cần Thơ có kho bài hỏi đáp về sửa chữa và muốn khách tìm được bài đúng. Các bước bên trong hệ thống như sau.

  1. Chuẩn bị kho. Mỗi bài hỏi đáp được chia thành các đoạn vừa phải. Đoạn quá dài thì nhiều ý trộn lẫn, toạ độ bị nhoè; đoạn quá ngắn thì mất ngữ cảnh.
  2. Tính embedding cho từng đoạn. Mô hình embedding đọc từng đoạn và trả về một dãy số. Việc này làm một lần, rồi lưu lại.
  3. Lưu vào kho chuyên dụng. Các dãy số được cất vào một loại cơ sở dữ liệu được thiết kế để tìm điểm gần nhau thật nhanh, thường gọi là cơ sở dữ liệu vector.
  4. Đổi câu hỏi của khách. Khi khách gõ "tủ lạnh kêu rè rè ban đêm", câu này cũng được đổi thành một dãy số bằng chính mô hình đó.
  5. Tìm hàng xóm gần nhất. Hệ thống tìm các đoạn có toạ độ gần câu hỏi nhất. Độ gần thường được đo bằng góc giữa hai mũi tên chỉ từ gốc tới hai điểm: góc càng hẹp, ý càng giống.
  6. Trả kết quả hoặc đưa tiếp cho chatbot. Các đoạn tìm được có thể hiện thẳng cho khách, hoặc được đưa cho một mô hình ngôn ngữ để nó soạn câu trả lời dựa trên đó.

Bước cuối là nền của kỹ thuật thường gọi là tìm kiếm tăng cường (RAG), được giải thích kỹ ở danh mục về tác tử và công cụ của AI Hiểu. Ở đây chỉ cần thấy rằng chất lượng câu trả lời của chatbot loại này phụ thuộc rất nhiều vào bước tìm hàng xóm: tìm sai đoạn thì chatbot trả lời sai một cách rất tự tin.

Embedding đang chạy ở đâu quanh bạn

Ngoài ô tìm kiếm, cùng một ý tưởng đặt mọi thứ lên bản đồ ý nghĩa xuất hiện ở nhiều chỗ quen thuộc:

  • Gợi ý nội dung. Mục "có thể bạn cũng thích" trên trang báo, ứng dụng nhạc, ứng dụng video có thể dùng embedding để tìm bài, bài hát, video nằm gần thứ bạn vừa xem. Hệ thống gợi ý thật thường kết hợp nhiều tín hiệu khác nữa.
  • Gom nhóm phản hồi. Một cửa hàng nhận hàng nghìn nhận xét có thể gom các nhận xét gần nhau thành nhóm như "giao chậm", "đóng gói kém", "nhân viên nhiệt tình" mà không cần ai đặt từ khoá trước.
  • Phát hiện trùng lặp. Hai câu hỏi diễn đạt khác nhau trên một diễn đàn có thể được nhận ra là cùng một câu, để gộp lại.
  • Tìm ảnh bằng chữ. Khi ảnh và chữ được đặt lên cùng một bản đồ, bạn gõ "con mèo ngủ trên ghế" là tìm ra ảnh, dù ảnh không có chú thích nào.
  • Phân loại thư và tin nhắn. Thư cùng loại thường nằm gần nhau, giúp hệ thống xếp thư vào các mục hoặc nhận ra thư rác có cách viết mới.
  • Tìm trong tài liệu nội bộ. Nhân viên gõ câu hỏi bằng lời thường, hệ thống tìm đúng điều khoản trong quy chế dù không ai nhớ tên mục.

Điểm chung: ở đâu cần trả lời câu "cái này giống cái nào", ở đó embedding có đất dùng.

Những chỗ tìm kiếm theo nghĩa hay nhầm

Gần nghĩa chưa chắc là đúng ý. Câu "cách giảm cân" và "cách tăng cân" nói về cùng một chủ đề nên có thể nằm khá gần nhau trên bản đồ, dù ý ngược hẳn. Embedding giỏi bắt chủ đề, kém hơn trong việc bắt phủ định, so sánh hay điều kiện.

Mã số, tên riêng và con số. Mã sản phẩm "AB-1203" và "AB-1230" với máy tìm theo nghĩa có thể gần như giống nhau, trong khi với người dùng chúng là hai món khác hẳn. Đây là lý do các hệ thống nghiêm túc vẫn giữ tìm theo từ khoá song song.

Tiếng Việt và cách viết địa phương. Chất lượng embedding phụ thuộc lượng dữ liệu tiếng Việt mà mô hình đã học. Từ địa phương, tiếng lóng, viết không dấu, viết tắt kiểu "ko", "đc" có thể bị đặt sai chỗ. Trước khi dùng cho khách hàng thật, cần thử với chính cách khách hay gõ.

Luôn có kết quả, kể cả khi không có câu trả lời. Tìm theo từ khoá không thấy chữ thì trả về rỗng. Tìm theo nghĩa thì luôn tìm được "điểm gần nhất", dù điểm đó vẫn rất xa. Nếu hệ thống không đặt ngưỡng, khách hỏi chuyện mà kho không có vẫn nhận về một kết quả trông có vẻ liên quan.

Thiên lệch của dữ liệu huấn luyện. Bản đồ được vẽ từ dữ liệu, nên những liên tưởng có sẵn trong dữ liệu, kể cả định kiến về nghề nghiệp hay giới tính, có thể nằm luôn trong khoảng cách giữa các điểm.

Embedding và mô hình ngôn ngữ: họ hàng nhưng không phải một

Người mới tìm hiểu hay nhầm mô hình embedding với chatbot. Hai thứ có họ hàng: cả hai đều học từ rất nhiều chữ, và bên trong một mô hình ngôn ngữ cũng có những lớp biểu diễn chữ bằng dãy số. Nhưng đầu ra khác hẳn nhau. Mô hình ngôn ngữ nhận chữ và sinh ra chữ. Mô hình embedding nhận chữ và trả về một dãy số, không nói gì cả.

Vì chỉ cần trả về một dãy số, mô hình embedding thường nhỏ, nhanh và rẻ hơn nhiều. Một kho vài trăm nghìn đoạn văn có thể được tính embedding một lần rồi dùng mãi, trong khi mỗi câu trả lời của chatbot đều tốn công tính mới. Đó là lý do hai thứ thường đi đôi: embedding lo phần tìm, mô hình ngôn ngữ lo phần nói.

Một điểm kỹ thuật đáng biết: embedding của mô hình này không dùng chung được với mô hình khác. Mỗi mô hình vẽ một tấm bản đồ riêng, trục và toạ độ không khớp nhau. Nếu một hệ thống đổi sang mô hình embedding mới, toàn bộ kho phải được tính lại. Khi nghe ai đó nói "nâng cấp tìm kiếm", đôi khi đó chính là việc tốn kém này.

Về quyền riêng tư: dãy số embedding không phải là văn bản, nhưng cũng không nên coi là đã ẩn danh. Đã có nghiên cứu cho thấy từ embedding có thể khôi phục lại một phần nội dung gốc. Tài liệu nhạy cảm vẫn cần được bảo vệ như dữ liệu gốc; phần này AI Bảo Mật bàn kỹ hơn.

Câu hỏi thường gặp

Embedding và vector khác nhau thế nào?

Vector là khái niệm toán học chung, chỉ một dãy số có thứ tự. Embedding là một vector được tạo ra với mục đích đặc biệt: biểu diễn ý nghĩa của một câu, một từ hay một bức ảnh sao cho thứ giống nhau nằm gần nhau. Mọi embedding là vector, nhưng không phải vector nào cũng là embedding.

Tìm kiếm theo nghĩa có thay thế hẳn tìm theo từ khoá không?

Không. Hai cách mạnh ở những chỗ khác nhau. Từ khoá bắt chính xác mã số, tên riêng, cụm từ nguyên văn; nghĩa bắt các cách diễn đạt khác nhau của cùng một ý. Nhiều hệ thống tốt hiện nay chạy cả hai rồi trộn kết quả, thường gọi là tìm kiếm lai.

Một embedding có bao nhiêu con số?

Tuỳ mô hình, thường từ vài trăm tới vài nghìn con số. Nhiều chiều hơn có thể biểu diễn tinh hơn nhưng tốn chỗ lưu và tốn thời gian so sánh hơn. Con số này do người thiết kế mô hình chọn, không có mức chuẩn chung cho mọi trường hợp.

Vì sao ô tìm kiếm của nhiều trang web Việt Nam vẫn tìm kém?

Có nhiều lý do: hệ thống chỉ dùng từ khoá, không xử lý được chữ không dấu, hoặc dùng mô hình embedding chưa học đủ tiếng Việt. Chất lượng tìm kiếm còn phụ thuộc cách chia đoạn tài liệu và cách sắp xếp kết quả, không chỉ phụ thuộc mô hình.

Mình có cần biết embedding để dùng chatbot không?

Không cần để dùng, nhưng biết thì bạn hiểu vì sao chatbot trả lời dựa trên tài liệu đôi khi trích nhầm đoạn: bước tìm kiếm theo nghĩa đã đưa cho nó đoạn có chủ đề gần nhưng ý khác. Khi thấy câu trả lời lạ, hãy mở đoạn được trích để đối chiếu.

Ảnh và chữ có dùng chung một bản đồ ý nghĩa được không?

Được, nếu mô hình được huấn luyện cho việc đó. Một số mô hình học từ rất nhiều cặp ảnh và chú thích để đặt ảnh và câu mô tả nó ở gần nhau. Nhờ vậy bạn có thể tìm ảnh bằng một câu mô tả, kể cả khi ảnh không có tên tệp hay chú thích nào.

Cần tư vấn cụ thể cho trường hợp của bạn?

Chúng tôi sẽ liên hệ trong vòng 24 giờ.

Đăng ký tư vấn ngay

Bài viết liên quan

Bạn cần hỗ trợ thêm?

Để lại thông tin, chúng tôi sẽ liên hệ trong 24 giờ.

hoặc
Gọi ngay 0926 138 138