4Embedding theo ngữ cảnh và tìm kiếm vector#
Word2Vec gán cho mỗi từ đúng một vector, bất kể từ đó xuất hiện trong câu nào. Với những từ nhiều nghĩa, đây là giới hạn của chính thiết kế. Transformer bỏ được giới hạn này, nhưng trạng thái ẩn của một mô hình ngôn ngữ chưa phải embedding câu tốt; phải huấn luyện thêm bằng học tương phản. Khi đã có embedding tốt cho hàng triệu văn bản, bài toán chuyển sang tìm kiếm: tìm nhanh những vector gần một truy vấn. Chương 6 và 7 của Ứng dụng LLM trình bày cùng chủ đề từ phía ứng dụng, kèm thí nghiệm trên văn bản tiếng Việt.
4.1Hạn chế của embedding tĩnh#
Một vector cho mỗi từ không phân biệt được các nghĩa khác nhau của cùng một từ. Trong hai câu "Con đường này dài quá" và "Cho thêm đường vào cà phê", chữ "đường" mang hai nghĩa không liên quan gì tới nhau. Vector duy nhất của "đường" phải là một thoả hiệp giữa hai nghĩa, thường nghiêng về nghĩa phổ biến hơn trong dữ liệu, và không biểu diễn tốt nghĩa nào. Đây là giới hạn của thiết kế, không phải của cách huấn luyện: bất kỳ phương pháp nào gán một vector cho một chuỗi ký tự đều gặp vấn đề này.
4.2Embedding theo ngữ cảnh và học tương phản#
Cách khắc phục là gán vector cho một lần xuất hiện của từ trong một câu cụ thể, thay vì cho từ. Transformer làm đúng điều đó (Chương 9 của Học sâu): mỗi lớp attention kết hợp thông tin giữa các vị trí, nên biểu diễn của một token ở các lớp sau chứa thông tin của cả câu, và chữ "đường" trong hai câu trên có hai vector khác nhau. ELMo (Peters và cộng sự, 2018) và BERT (Devlin và cộng sự, 2019) là những mô hình đầu tiên phổ biến cách làm này.
Từ đó có một cách tạo embedding cho cả câu có vẻ tự nhiên: đưa câu qua một mô hình đã tiền huấn luyện rồi lấy trung bình các trạng thái ẩn. Nhưng kết quả thường kém.
Lưu ý
Trạng thái ẩn của một mô hình tiền huấn luyện chưa phải embedding câu tốt. Mô hình được huấn luyện để đoán token bị che hoặc token tiếp theo, không được huấn luyện để hai câu cùng nghĩa có biểu diễn gần nhau. Reimers và Gurevych (2019) cho thấy trung bình các vector đầu ra của BERT cho kết quả trên các bộ đánh giá độ tương đồng câu kém hơn cả trung bình các vector GloVe tĩnh. Tính bất đẳng hướng ở Chương 3 là một phần nguyên nhân.
Cách làm đúng là huấn luyện thêm với mục tiêu tương phản (contrastive objective): dùng các cặp câu đã biết là liên quan (câu hỏi và đoạn trả lời, câu và bản dịch, hai cách diễn đạt của cùng một ý), và tối ưu
trong đó là embedding của một câu, là embedding của câu cặp với nó, các là embedding của mọi câu cặp trong lô (gồm cả ), và là nhiệt độ, thường cỡ 0,01 tới 0,1. Hàm này có dạng cross-entropy của hồi quy softmax (Mục 6.4 của Nền tảng), trong đó "lớp đúng" là câu cặp thật và các "lớp sai" là những câu còn lại trong lô. Dạng hàm mất mát này thường được gọi là InfoNCE (van den Oord, Li và Vinyals, 2018). Chẳng hạn với một lô ba cặp, câu có cosine 0,8 với câu cặp của nó và 0,3; 0,1 với hai câu còn lại. Với , ba logit là 8, 3 và 1, softmax gán 0,992 cho câu cặp và mất mát chỉ còn 0,008. Với , ba logit là 0,8; 0,3; 0,1, câu cặp chỉ nhận xác suất 0,48 và mất mát là 0,74, dù cosine của nó cao nhất. Nhiệt độ nhỏ phóng đại chênh lệch giữa các cosine, nên mô hình được thưởng ngay khi câu cặp đứng đầu một cách rõ ràng.
Các câu khác trong cùng lô đóng vai trò mẫu âm, nên không phải tìm mẫu âm riêng; lô càng lớn thì càng nhiều mẫu âm, và các mô hình embedding tốt thường huấn luyện với lô rất lớn. Đây là cùng ý tưởng lấy mẫu âm ở Mục 2.5. SimCSE (Gao, Yao và Chen, 2021) cho thấy mục tiêu này vẫn hoạt động khi "câu cặp" chỉ là chính câu đó đi qua mô hình hai lần với dropout khác nhau. Các mô hình embedding hiện nay như họ E5 (Wang và cộng sự, 2022), dùng trong các thí nghiệm của Ứng dụng LLM, được huấn luyện theo cách này trên hàng trăm triệu cặp văn bản.
4.3Tìm kiếm vector#
Có embedding rồi, bài toán tiếp theo thường là: cho một truy vấn, tìm vector gần nhất trong một kho vector. Tìm chính xác bằng cách tính khoảng cách tới mọi vector tốn phép tính cho mỗi truy vấn. Với và , đó là khoảng 7,7 tỉ phép nhân–cộng cho một truy vấn, quá chậm nếu cần trả lời trong vài chục mili giây với nhiều truy vấn mỗi giây. Các cấu trúc dữ liệu cổ điển như cây k-d cũng không giúp được ở số chiều cao, vì lời nguyền số chiều làm chúng thoái hoá về quét toàn bộ (Mục 7.2 của Nền tảng).
Lối ra là chấp nhận tìm kiếm láng giềng gần đúng (approximate nearest neighbor, ANN): chỉ hứa trả về các vector gần, không hứa trả về đúng vector gần nhất, đổi lại nhanh hơn hàng chục tới hàng trăm lần. Ba họ phương pháp chính đánh đổi khác nhau giữa tốc độ, bộ nhớ và độ chính xác:
| Họ phương pháp | Ý tưởng | Đánh đổi |
|---|---|---|
| IVF (inverted file) | phân cụm kho bằng k-means; truy vấn chỉ quét vài cụm gần nhất | tốn ít bộ nhớ; có thể bỏ sót vector nằm gần biên cụm |
| HNSW | đồ thị láng giềng nhiều tầng; tìm bằng cách đi tham lam từ tầng thưa xuống tầng dày | nhanh và chính xác; tốn bộ nhớ để lưu đồ thị |
| PQ (product quantization) | chia vector thành nhiều đoạn, lượng tử hoá mỗi đoạn bằng một bảng mã nhỏ | nén mạnh; mất độ chính xác do lượng tử hoá |
PQ có liên hệ trực tiếp với giáo trình Quantization: đó là lượng tử hoá áp dụng cho từng đoạn của vector, với cùng đánh đổi giữa sai số và dung lượng. Chương 7 của Ứng dụng LLM đo cả ba phương pháp trên 4 419 vector.
Trước khi chọn phương pháp hay thư viện, nên tính dung lượng của kho. Một kho 10 triệu vector 768 chiều lưu ở FP32 chiếm
Con số này quyết định phần lớn kiến trúc hệ thống: nó không vừa bộ nhớ của một máy chủ thông thường, nên phải giảm độ chính xác số (FP16 còn 15,4 GB), nén bằng PQ, hoặc chia kho cho nhiều máy.
4.4Đánh giá hệ thống tìm kiếm vector#
Vì đã chấp nhận xấp xỉ, cần đo mức mất mát. Chỉ số chuẩn là recall@k của chỉ mục: trong kết quả trả về, bao nhiêu phần trăm thuộc về kết quả đúng tìm bằng quét toàn bộ, tính trên một mẫu truy vấn. Mỗi phương pháp có một tham số điều chỉnh độ chính xác (số cụm được quét với IVF, kích thước hàng đợi với HNSW), và kết quả nên được vẽ thành đường recall theo độ trễ. Giống đường ROC (Mục 8.3 của Nền tảng), không có điểm tốt nhất chung; chọn điểm nào trên đường là quyết định nghiệp vụ.
Recall của chỉ mục cao không bảo đảm hệ thống tìm kiếm hữu ích. Nếu bản thân embedding không nắm được điều người dùng coi là "liên quan", tìm đúng 100% láng giềng gần nhất vẫn cho kết quả vô dụng. Chất lượng embedding (đo bằng recall theo nhãn liên quan do người gán; Mục 6.6 của Ứng dụng LLM) và chất lượng chỉ mục (đo bằng recall so với tìm chính xác) là hai đại lượng khác nhau và phải đo riêng.
4.5Tóm tắt#
Embedding tĩnh gán một vector cho mỗi từ nên không phân biệt được các nghĩa của cùng một từ. Transformer gán vector cho từng lần xuất hiện, nhưng trạng thái ẩn của một mô hình chỉ được huấn luyện để đoán token chưa phải embedding câu tốt: trung bình các vector đầu ra của BERT còn kém trung bình vector GloVe trên các bộ đánh giá độ tương đồng câu. Huấn luyện thêm với hàm mất mát InfoNCE, dùng các câu khác trong lô làm mẫu âm, mới cho embedding câu dùng được. Với hàng triệu vector, tìm chính xác quá chậm, nên các hệ thống dùng tìm kiếm láng giềng gần đúng như IVF, HNSW hoặc PQ, và phải đo riêng hai thứ: chất lượng của embedding và recall của chỉ mục.
Các mô hình embedding ở chương này, cũng như mọi mô hình ngôn ngữ lớn, bắt đầu từ cùng một bước: tiền huấn luyện trên lượng lớn dữ liệu không nhãn. Chương 5 giải thích vì sao bước đó hiệu quả và có những cách nào để dùng lại một mô hình đã tiền huấn luyện.
Tự kiểm tra
3 câu. Chọn đáp án để xem ngay lời giải thích.
1Vì sao trung bình các trạng thái ẩn của BERT chưa phải embedding câu tốt?
Vì sao: Reimers và Gurevych (2019) cho thấy trung bình các vector đầu ra của BERT kém cả trung bình vector GloVe trên các bộ đánh giá độ tương đồng câu. Cần huấn luyện thêm với mục tiêu tương phản (Mục 4.2).2Trong học tương phản với hàm mất mát InfoNCE, mẫu âm thường lấy từ đâu?
Vì sao: Mỗi câu còn lại trong lô là một "lớp sai" trong hàm cross-entropy, nên lô càng lớn thì càng nhiều mẫu âm. Đây là cùng ý tưởng với lấy mẫu âm của word2vec.3Một kho 10 triệu vector 768 chiều lưu ở FP32 chiếm bao nhiêu bộ nhớ?
Vì sao: byte GB. Con số này quyết định nhiều lựa chọn kiến trúc: giảm độ chính xác số, nén bằng product quantization, hay chia kho cho nhiều máy (Mục 4.3).
Đã trả lời 0/3