- Embedding gần đây mang lại tiềm năng đột phá cho lĩnh vực viết kỹ thuật
- Có đặc điểm là trả về một mảng số có số chiều cố định bất kể kích thước của văn bản đầu vào
- Thông qua mảng số này, có thể so sánh toán học giữa các đoạn văn bản bất kỳ
- Embedding tính khoảng cách theo ý nghĩa của văn bản trong không gian đa chiều, và có thể được ứng dụng đa dạng như gợi ý nội dung liên quan, phân tích ngữ nghĩa, v.v.
- Trong tương lai, khi các trang tài liệu kỹ thuật công khai dữ liệu embedding, các công cụ mới và các trường hợp sử dụng trong cộng đồng được kỳ vọng sẽ mở rộng
Tổng quan về công nghệ embedding dựa trên machine learning
- Trong công nghệ machine learning, khác với các mô hình tạo sinh văn bản, embedding có tiềm năng tạo ra ảnh hưởng mang tính cách mạng đối với viết kỹ thuật
- Trong vài năm gần đây, việc sử dụng embedding đã trở nên dễ tiếp cận hơn nhiều
- Nhờ embedding, các technical writer có thể thực hiện so sánh và phân tích ngữ nghĩa giữa nhiều loại văn bản khác nhau
Xây dựng trực giác về embedding
- Embedding nhận đầu vào là văn bản (từ, câu, nhiều tài liệu, v.v.) và trả về một mảng số có kích thước cố định
- Bất kể độ dài của văn bản đầu vào, luôn tạo ra dữ liệu mảng có cùng kích thước
- Nhờ vậy, nảy sinh khả năng so sánh toán học giữa các văn bản bất kỳ có độ dài khác nhau
Cách tạo embedding
- Có thể tạo embedding chỉ với vài dòng code thông qua các nhà cung cấp dịch vụ lớn
- Tùy theo mô hình được sử dụng, kích thước mảng của embedding sẽ khác nhau; trong trường hợp của Gemini là 768 giá trị số, còn Voyage AI là 1024 giá trị
- Vì ý nghĩa của embedding hoàn toàn khác nhau tùy theo nhà cung cấp hoặc mô hình, nên thiếu khả năng tương thích lẫn nhau
Chi phí và tác động môi trường
- Bản thân việc tạo embedding không tốn nhiều chi phí
- Quá trình tạo được ước tính là tiêu tốn ít tài nguyên tính toán hơn so với mô hình sinh văn bản, nhưng tác động môi trường vẫn cần thêm thông tin trong tương lai
Tiêu chí chọn mô hình embedding
- Mô hình phù hợp nhất sẽ khác nhau tùy theo khả năng hỗ trợ dữ liệu đầu vào dung lượng lớn
- Tính đến năm 2024, Voyage AI
voyage-3 cung cấp giới hạn đầu vào cao nhất
- Việc chọn mô hình phù hợp với mục đích sử dụng và nhu cầu là điều quan trọng
Khái niệm không gian đa chiều
- Mỗi giá trị trong mảng số embedding tương ứng với một tọa độ trong không gian đa chiều, và đặc điểm của văn bản được biểu diễn như một vị trí ngữ nghĩa trong không gian đó
- Ví dụ, phép toán như ‘king’ - ‘man’ + ‘woman’ ≈ ‘queen’ cho thấy khả năng biểu diễn quan hệ ngữ nghĩa
- Đặc tính của từng chiều trong không gian embedding phần lớn là mơ hồ và trừu tượng
- Thông qua quá trình này, máy có thể học ý nghĩa và suy luận ngữ nghĩa của văn bản
So sánh và lưu trữ embedding
- Embedding được tạo ra sẽ được lưu trong cơ sở dữ liệu theo từng văn bản (ví dụ: từng trang)
- Có thể đánh giá mức độ tương đồng ngữ nghĩa bằng cách tính khoảng cách toán học giữa hai embedding (sử dụng đại số tuyến tính)
- Có thể dùng các thư viện như NumPy, scikit-learn để giảm gánh nặng phải tự triển khai công thức phức tạp
Ví dụ ứng dụng của embedding
- Embedding được sử dụng hiệu quả cho chức năng gợi ý các trang liên quan trên các trang tài liệu kỹ thuật
- Sau khi tạo embedding cho từng trang, có thể đề xuất các tài liệu liên quan về mặt ngữ nghĩa giữa các trang có độ tương đồng số học cao
- Mỗi khi nội dung trang thay đổi, chỉ cần làm mới embedding nên hiệu quả rất cao
- Kết quả áp dụng thực tế cho tài liệu [Sphinx] cho thấy hiệu năng tích cực
Cộng đồng và khả năng dữ liệu mở
- Trong tương lai, các trang tài liệu có thể cung cấp dữ liệu embedding thông qua REST API hoặc well-known URI
- Nhờ đó, cộng đồng có thể phát triển nhiều công cụ và dịch vụ ứng dụng đa dạng
Lời kết
- Thật thú vị khi có cơ hội liên hệ khái niệm không gian hàng trăm chiều với công việc thường ngày
- Có thể kỳ vọng embedding sẽ mang lại tiềm năng phát triển đột phá trong bảo trì tài liệu và mở rộng tính năng
1 bình luận
Ý kiến trên Hacker News
Xin chào, tôi muốn gửi lời cảm ơn vì tôi là người đã viết bài này
Xin cho biết là đã có một cuộc thảo luận tương tự cách đây 6 tháng
Câu nói “embedding đang bị đánh giá thấp” nhằm nhấn mạnh rằng đây là công cụ hữu ích hơn cho các cây bút kỹ thuật so với người làm machine learning
Tôi nhận thức được rằng bài viết này còn thiếu chi tiết về việc chính xác embedding được dùng trong viết kỹ thuật như thế nào
Tôi đang chuẩn bị các dự án và bài blog về cách ứng dụng embedding
Embedding quan trọng vì có thể giúp giải quyết 3 vấn đề khó trong viết kỹ thuật
Để có thể công khai trải nghiệm vấn đề người dùng không dễ tìm thấy thông tin họ muốn, tôi đã thử áp dụng “semantic scrolling” như một lớp UX
Thay vì tìm kiếm, người dùng có thể dạo qua các cụm dưới dạng cấu trúc cây <details>/<summary>
[1] là điểm bắt đầu, còn [2] là toàn bộ bộ sưu tập (sách, phim, nhạc, anime, v.v.)
Tôi cũng chia sẻ liên kết
Sẽ tốt hơn nếu nội dung được xây dựng sao cho hấp dẫn hơn với các cây bút kỹ thuật thay vì chuyên gia machine learning
Ví dụ, phần “có thể khám phá sự liên kết giữa các văn bản ở quy mô trước đây là không thể” nên được giải thích chi tiết hơn
Nếu đưa ví dụ ứng dụng lên phần đầu, thông điệp sẽ đến với độc giả hiệu quả hơn
Tôi xin gợi ý một bài báo liên quan như ví dụ ứng dụng trực tiếp của embedding trong viết kỹ thuật
Cung cấp liên kết
Sau khi đọc bài này, tôi tò mò chất lượng đầu ra như thế nào
Không cần đi đến mức evals mà phía machine learning ưa dùng, tôi chỉ muốn biết đại khái liệu kết quả có cho cảm giác hợp lý hay không
Tôi đã đọc bài nhưng không tìm thấy phần giải thích embedding là gì
Đoạn thứ ba có nói về cách dùng, nhưng phần đầu còn thiếu định nghĩa về bản thân embedding
Với người mới bắt đầu thì bài này có vẻ quá cơ bản
Đọc xong tôi không thu được thông tin hay góc nhìn mới nào
Nếu có thể cho xem thử dù chỉ là một ví dụ cốt lõi về ứng dụng embedding thì có lẽ tôi đã mong đợi bài tiếp theo hơn
Dù vậy tôi vẫn cảm ơn vì đã chia sẻ
Một lợi thế khác của embedding và tìm kiếm bằng embedding là có thể triển khai phía client với gánh nặng thấp
Mô hình ONNX có thể được tải và chạy bằng transformer.js
Cũng có thể tạo chỉ mục như hnsw và host tĩnh
Tôi cũng đã tự làm một demo mã nguồn mở
Chỉ cần biểu diễn chỉ mục dưới dạng file parquet có thể truy vấn và dùng duckdb để truy vấn
Với Github Pages, có thể làm miễn phí hoặc gần như miễn phí
Việc có thể làm embedding bằng JS ở phía client là một khám phá mới với tôi
Có vẻ nó sẽ mở ra các ứng dụng mới cho các trang tài liệu
Tôi bắt đầu chú ý tới Parquet và Polars nhờ một bài viết tôi từng đọc trước đó
Tôi từng thắc mắc về kiểu triển khai này
Tôi đã ngần ngại áp dụng vì lo độ trễ của tìm kiếm dựa trên embedding
Nếu đặt mô hình cục bộ để render, tôi muốn biết chất lượng so với OpenAI/Google ra sao
Miễn phí/tức thời là một lợi thế
Sẽ hay hơn nếu bạn giải thích chi tiết điều gì đang diễn ra trong demo
Tôi chưa hiểu rõ kết quả
Tôi muốn phần “embedding luôn trả về một mảng số có cùng kích thước bất kể kích thước văn bản đầu vào, nên có thể so sánh toán học các văn bản bất kỳ với nhau” được giải thích rõ hơn
Hàm băm cũng cho ra kết quả cùng kích thước bất kể kích thước đầu vào, nhưng việc so sánh toán học ở đó hoàn toàn khác so với embedding
Cần nhấn mạnh rằng chất lượng của embedding được quyết định bởi quá trình huấn luyện
Không tồn tại “embedding phổ dụng” cho phép so sánh có ý nghĩa với mọi văn bản bất kỳ
Tôi cũng chia sẻ các liên kết
Embedding cũng giống hash ở chỗ nén đầu vào lớn để biểu diễn, nhưng khác với hash ở chỗ embedding mang ý nghĩa nội tại
Vậy có nghiên cứu nào về việc “bẻ khóa” để từ embedding sinh ngược ra văn bản có ý nghĩa tương tự không
Có vẻ cũng có thể đưa độ tương tự với embedding hoặc thay đổi về hướng vào phần đánh giá token tiếp theo trong đầu ra của LLM
Giống như phép toán giữa các vector embedding mà tác giả nhắc tới, tôi hình dung liệu có thể áp dụng “đại số ngữ nghĩa” cho văn bản quy mô lớn như cả đoạn hay cả cuốn sách hay không
Tôi cũng tò mò liệu có thể vector hóa một khái niệm cốt lõi như “affinity” rồi cộng nó vào văn bản hiện có hay không
Việc “sinh ra văn bản có nghĩa tương tự từ embedding” được gọi là embedding inversion hoặc Universal Zero-shot Embedding Inversion
Cũng có các bài báo liên quan, và diffusion dùng embedding CLIP trong ảnh cũng có liên quan
Nói đại khái thì embedding có vai trò tương tự fuzzy hash
Tôi không phải chuyên gia lĩnh vực này, nhưng cũng có nghiên cứu gọi là inference-time intervention có liên quan
Có đính kèm liên kết bài báo
Câu “có thể đạt bước tiến hàng đầu trong viết kỹ thuật nhờ embedding” không cụ thể nên với tư cách người đọc tôi thấy không hữu ích
Khi đọc hoặc viết tài liệu kỹ thuật, bình thường tôi chưa từng mong muốn một widget “trang tương tự”
Luận điểm nằm ở đoạn thứ hai
Embedding giúp cây bút kỹ thuật tìm ra các mối liên hệ giữa văn bản theo cách trước đây không thể phát hiện
Tôi thừa nhận bài viết chưa thực sự cho thấy luận điểm này bằng ví dụ
Tôi cho rằng embedding có thể giải quyết nhiều bài toán khó trong viết kỹ thuật, và các ví dụ trực tiếp sẽ được đề cập sau
Bỏ qua tài liệu liên quan, tài liệu kỹ thuật sẽ rất hưởng lợi từ tìm kiếm xuất sắc
Embedding đặc biệt hữu ích cho “fuzzy matching”, giúp người dùng tìm ra đúng tính năng họ cần ngay cả khi không nhớ chính xác từ ngữ
Cách tiếp cận hybrid kết hợp tìm kiếm từ khóa và tìm kiếm theo độ tương đồng vector là hiệu quả
Tôi muốn tìm thêm các ví dụ ứng dụng cụ thể
Phép so sánh với bản đồ 2 chiều là điểm khởi đầu tốt để dễ hiểu, nhưng embedding hoạt động trong hàng trăm đến hàng nghìn chiều
Cũng không rõ mỗi chiều mang ý nghĩa gì, và ví dụ 'king - man + woman = queen' không phải vì có “một chiều mang khái niệm giới tính” mà vì tồn tại “một hướng nhất định”
Trong không gian n chiều, có vô số hướng gần trực giao tăng theo cấp số mũ
Đó là lý do có thể chứa hàng tỷ khái niệm trong không gian 1000 chiều
Trong các bài báo arXiv thực tế, nếu đưa 1000 từ nam tính vào embedding thì sẽ không xảy ra chuyện tìm chính xác 950 từ nữ tính
Khoảng 20 từ có thể tụ lại thấy rõ, nhưng do số chiều lớn nên khi chiếu xuống thì cái gì trông cũng có thể “đúng”
Khi N tăng, kết quả dễ trở nên mơ hồ
Embedding dựa trên transformer vượt trội hơn hẳn word vector cũ vì có xét ngữ cảnh
Ngay cả trong tìm kiếm toàn văn, embedding nhận biết ngữ cảnh cũng xử lý hiệu quả các vấn đề của truy hồi thông tin đã được thử giải suốt 50 năm qua, như xử lý từ đồng nghĩa
Xin cảm ơn lời phê bình chi tiết, tôi thừa nhận phần giải thích như thể một chiều đơn lẻ ánh xạ một-một với khái niệm là sai về mặt khái niệm
Tôi sẽ chỉnh sửa bài viết, trau chuốt lại khái niệm cùng với cách cosine similarity hoạt động
Nhờ các bình luận mà tôi cảm thấy chất lượng tư duy của mình được cải thiện
Tôi muốn nhấn mạnh rằng cách diễn đạt chính xác là “các hướng gần trực giao” chứ không phải “các chiều gần trực giao”
Tôi tò mò về thông tin liên quan đến Johnson-Lindenstrauss lemma, cũng như độ chính xác của việc giữ nguyên số chiều và bảo toàn khoảng cách trong embedding
Để bảo toàn khoảng cách với sai số 10% thì cần khoảng 18 nghìn chiều
Cũng hướng dẫn tới liên kết wiki
Chính xác hơn thì phải là “các hướng gần trực giao” chứ không phải “các chiều gần trực giao”
Nếu từng chiều riêng lẻ khớp với các khái niệm có ý nghĩa, ví dụ có một chiều giới tính, thì ta có thể dễ dàng nhận ra rằng khác biệt giữa “king” và “queen” chỉ tồn tại ở một chiều duy nhất
Nếu mỗi khái niệm có một chiều khác nhau, ta có thể trực quan theo dõi khái niệm dựa trên khác biệt đó
Có giới thiệu một bài viết hay về khái niệm vector gần trực giao
Chia sẻ liên kết
Tôi tự hỏi liệu nguyên lý ở đây có phải là coi mỗi chiều như một bit nhị phân để mã hóa 2^n hướng hay không, hay tôi đang hiểu sai
Nếu giới tính được biểu diễn bằng hai chiều, thì có phải ta sẽ không thể phân biệt giữa “khác giới tính” và “mỗi chiều có thành phần khác nhau” không
Dù không thể trực quan hóa, ta vẫn có thể tính khoảng cách Euclid
Có thể giảm chiều bằng công cụ như UMAP
Liên quan đến ví dụ king-man+woman=queen, phép cộng vector có thể không phải lúc nào cũng hoạt động như mong muốn
Ý nghĩa có thể bị giới hạn chỉ bởi hướng và độ lớn của một vector đơn lẻ, và do mạng học hành vi phi tuyến nên ý nghĩa có thể thay đổi theo điểm bắt đầu
Có giới hạn khi khái quát chỉ bằng phép toán vector đơn giản mà không có bằng chứng thực nghiệm
Embedding là một bước nhảy mới hướng tới tính phổ quát, giống như bảng chữ cái hay chữ số
Chia sẻ liên kết
Tôi có câu hỏi cho các chuyên gia
Nếu embedding chứa nội dung, tức chính ý nghĩa, dưới dạng vector thì liệu có tồn tại vector riêng chỉ dành cho “phong cách” hay không
Nếu embedding có thể dễ dàng dùng trong nghiên cứu phân tích văn phong thì tôi nghĩ đó sẽ là một tiến bộ lớn
Tôi hoàn toàn đồng ý về việc ứng dụng embedding
Khi phát triển thứ gọi là Recallify, tôi đã có thể nhanh chóng tìm lại cả những thông tin hiếm từng đọc trên mạng
Chỉ với 1024 chiều cũng có thể liên kết nội dung hiệu quả theo độ tương đồng ngữ nghĩa chứ không chỉ theo từ khóa
Đây là công cụ mang tính đột phá trong việc biến các khái niệm mơ hồ thành insight có thể hành động
Hiện cũng đang tuyển beta tester cho ứng dụng iOS
Tôi không rõ trong bài có xuất hiện trường hợp dùng trực tiếp nào cho cây bút kỹ thuật hay chưa
Embedding rất quan trọng trong LLM, semantic search, v.v., nhưng còn thiếu giải thích về lợi ích trực tiếp mà tác giả đang ngụ ý
Chưa có ví dụ ứng dụng trực tiếp nào xuất hiện
Tôi từng định đề cập nhiều cách dùng embedding qua bài tiếp theo và dự án, nhưng gần đây bị chậm lại vì chăm con nhỏ 3 tháng tuổi
Tôi đang chuẩn bị các dự án và bài viết liên quan, và embedding giúp giải quyết 3 bài toán khó quan trọng trong viết kỹ thuật
Ứng dụng thực tế của embedding là semantic search, phân loại và clustering
Trong lĩnh vực tìm kiếm, cứ khoảng 10 năm lại có một bước tiến lớn
Tạo embedding rồi đưa vào các thuật toán ML hiện có là có thể phân loại hiệu quả
Cách Bag-of-Words giờ cho kết quả không còn tốt, còn embedding cộng với thuật toán đơn giản cũng có thể tạo được cụm tốt
Việc tìm vector gần nhất cũng không hẳn là đại số tuyến tính phức tạp, đôi khi chỉ cần dot product là đủ
Việc tìm kiếm ngữ nghĩa các bài báo khoa học, tài liệu tham khảo, v.v. bằng embedding sẽ rất hữu ích
Tuy nhiên, bản thân embedding không chứa thông tin nguồn nên trong tìm kiếm RAG chỉ có thể nối về trang nguồn
Các vấn đề trích dẫn và xác thực vẫn còn tồn tại
Các mô hình trích dẫn dựa trên đồ thị như GraphRAG có vẻ tiến bộ hơn
Tôi đã tạo một bộ phân loại RSS feed bằng semantic search dựa trên embedding
Cũng có thể phân loại theo các danh mục tùy ý
Hiện tại dịch vụ đã ngừng vì tôi rời AWS