Sau Word2Vec và FastText, GloVe (Global Vectors for Word Representation) đưa ra một cách tiếp cận khác để học vector từ. Thay vì chủ yếu dự đoán từ dựa trên từng cửa sổ ngữ cảnh, GloVe khai thác thống kê đồng xuất hiện (co-occurrence) được tổng hợp trên toàn bộ tập văn bản.
Ý tưởng quan trọng của GloVe là: nếu hai từ thường xuất hiện trong những môi trường tương tự, cấu trúc thống kê đó phải được phản ánh trong không gian vector. Vì vậy, để hiểu GloVe, cần bắt đầu từ ma trận đồng xuất hiện trước khi đi đến hàm tối ưu.
1. Từ cửa sổ ngữ cảnh đến ma trận đồng xuất hiện
Giả sử có ba câu đơn giản:
dog eats meat
cat likes fish
Ta chọn cửa sổ ngữ cảnh bằng 1. Điều này có nghĩa là với mỗi từ, chỉ xét từ ngay bên trái và ngay bên phải nó.
Trong câu đầu tiên:
eats ↔ fish
Ta đếm số lần mỗi cặp từ xuất hiện trong phạm vi cửa sổ đã chọn. Nếu Xij là số lần từ j xuất hiện trong ngữ cảnh của từ i thì toàn bộ các giá trị Xij tạo thành ma trận đồng xuất hiện.
| cat | dog | eats | fish | meat | likes | |
|---|---|---|---|---|---|---|
| cat | 0 | 0 | 1 | 0 | 0 | 1 |
| dog | 0 | 0 | 1 | 0 | 0 | 0 |
| eats | 1 | 1 | 0 | 1 | 1 | 0 |
| fish | 0 | 0 | 1 | 0 | 0 | 1 |
Ma trận này có thể rất lớn khi từ điển chứa hàng chục nghìn hoặc hàng triệu từ. Tuy nhiên, phần lớn cặp từ không bao giờ xuất hiện gần nhau, nên ma trận thực tế thường rất thưa.
2. Vì sao không dùng trực tiếp số lần đồng xuất hiện?
Có thể nghĩ rằng chỉ cần dùng mỗi hàng của ma trận X làm vector của từ. Về nguyên tắc, hàng tương ứng với cat đã cho biết cat thường xuất hiện gần những từ nào.
Tuy nhiên cách này có hai vấn đề lớn. Thứ nhất, số chiều bằng kích thước từ điển nên vector có thể cực lớn. Thứ hai, tần suất từ trong ngôn ngữ phân bố rất không đều: một số từ xuất hiện thường xuyên hơn hàng nghìn lần so với các từ khác.
GloVe giải quyết vấn đề bằng cách tìm một không gian vector có số chiều nhỏ hơn nhưng vẫn giữ được cấu trúc quan trọng của các thống kê đồng xuất hiện.
3. Hàm mục tiêu của GloVe hoạt động như thế nào?
Với mỗi từ i, GloVe học một vector wi. Với mỗi từ đóng vai trò ngữ cảnh j, mô hình học một vector ngữ cảnh riêng là w̃j. Ngoài ra còn có hai hệ số lệch bi và b̃j.
Mục tiêu là làm cho:
Nếu hai từ xuất hiện cùng nhau nhiều, Xij lớn và mô hình phải điều chỉnh các vector để vế trái gần với log(Xij). Nếu chúng hiếm khi đồng xuất hiện, tác động của cặp đó nhỏ hơn.
GloVe tối ưu hàm mất mát có dạng:
Hàm f(Xij) là một hàm trọng số (weighting function). Nó ngăn các cặp xuất hiện cực kỳ nhiều chi phối hoàn toàn quá trình huấn luyện, đồng thời giảm ảnh hưởng của các thống kê quá hiếm và thiếu ổn định.
4. Tại sao GloVe dùng logarit của tần suất?
Tần suất đồng xuất hiện có thể chênh lệch rất lớn. Ví dụ một cặp từ có thể xuất hiện 10 lần, trong khi một cặp phổ biến khác xuất hiện 10.000 lần.
Nếu dùng trực tiếp giá trị Xij, khoảng cách về số học giữa các cặp phổ biến và cặp hiếm trở nên quá lớn. Logarit nén thang đo:
log(100) ≈ 4.61
log(1,000) ≈ 6.91
log(10,000) ≈ 9.21
Mặc dù tần suất từ 10 đến 10.000 tăng một nghìn lần, giá trị log chỉ tăng từ khoảng 2.30 lên 9.21. Điều này giúp mô hình làm việc với một thang giá trị cân bằng hơn.
Đây cũng là một lý do không nên diễn giải GloVe đơn giản là “từ xuất hiện cùng nhau càng nhiều thì vector càng giống nhau”. Mô hình học từ toàn bộ cấu trúc quan hệ giữa một từ với nhiều từ ngữ cảnh khác nhau.
5. Xây dựng ma trận đồng xuất hiện bằng Python
Đoạn mã sau minh họa bước đầu của GloVe: xây dựng ma trận đồng xuất hiện từ một tập câu nhỏ với cửa sổ bằng 1.
Mỗi hàng biểu diễn một từ trung tâm, mỗi cột biểu diễn một từ ngữ cảnh. Giá trị tại X[i,j] cho biết số lần hai từ xuất hiện trong phạm vi cửa sổ đã chọn.
Đây mới chỉ là phần thống kê đầu vào. Bước tiếp theo của GloVe là tạo các vector ngẫu nhiên rồi tối ưu chúng để tái tạo cấu trúc logarit của X.
6. Một bước huấn luyện GloVe diễn ra ra sao?
Giả sử Xij lớn hơn 0. Ta tính giá trị dự đoán:
Giá trị mục tiêu là log(Xij). Sai số:
Từ sai số này, gradient được tính cho wi, w̃j và hai hệ số lệch. Quá trình lặp qua rất nhiều cặp đồng xuất hiện sẽ dần điều chỉnh các vector.
Đoạn mã trên được đơn giản hóa để làm rõ cơ chế gradient. Một triển khai GloVe đầy đủ còn phải áp dụng hàm trọng số f(Xij) và lặp qua toàn bộ các cặp đồng xuất hiện khác 0 trong nhiều vòng huấn luyện.
7. GloVe khác Word2Vec và FastText như thế nào?
| Tiêu chí | Word2Vec | FastText | GloVe |
|---|---|---|---|
| Nguồn tín hiệu chính | Ngữ cảnh cục bộ | Ngữ cảnh + subword | Thống kê đồng xuất hiện toàn cục |
| Đơn vị biểu diễn | Từ | Từ + n-gram ký tự | Từ |
| Từ ngoài từ điển | Không xử lý trực tiếp | Có thể suy ra từ subword | Không xử lý trực tiếp |
| Dữ liệu trung gian | Các cặp huấn luyện | Cặp huấn luyện + subword | Ma trận đồng xuất hiện |
| Loại embedding | Tĩnh | Tĩnh | Tĩnh |
Sự khác biệt giữa các phương pháp không nên bị phóng đại thành “cục bộ” và “toàn cục” hoàn toàn tách biệt. Word2Vec cũng có thể học cấu trúc rộng hơn sau rất nhiều cửa sổ ngữ cảnh, trong khi GloVe cũng xây dựng thống kê từ các cửa sổ cục bộ. Điểm khác nhau chủ yếu nằm ở cách tổng hợp và tối ưu tín hiệu ngữ cảnh.
FastText nổi bật khi thông tin cấu tạo từ quan trọng hoặc dữ liệu có nhiều từ hiếm. GloVe phù hợp khi muốn khai thác trực tiếp các thống kê đồng xuất hiện của một kho văn bản lớn.
Điểm cần nhớ là GloVe vẫn tạo embedding tĩnh. Một từ chỉ có một biểu diễn cơ bản, vì vậy mô hình chưa giải quyết được trường hợp cùng một từ mang nghĩa khác nhau tùy câu.
Đây chính là giới hạn tự nhiên dẫn sang thế hệ tiếp theo của biểu diễn từ: embedding phụ thuộc ngữ cảnh, nơi vector của cùng một từ có thể thay đổi theo câu mà nó xuất hiện.
Nội dung gốc thuộc tác giả. Vui lòng không đăng lại toàn văn khi chưa được phép, trừ trường hợp pháp luật hoặc giấy phép áp dụng cho phép. Nội dung của bên thứ ba tuân theo quyền và giấy phép tương ứng.
Nguồn gốc: GloVe Word Embedding: Học vector từ ma trận đồng xuất hiện