Biểu diễn & Căn chỉnhgiáo trình tự học
Chương 215 phút đọcBiểu diễn và embedding

2Word2Vec#

Câu hỏi đầu tiên ở Chương 1 là gán cho mỗi từ một vector sao cho các từ gần nghĩa có vector gần nhau. Ta đi tới câu trả lời qua ba bước: đếm số lần các từ cùng xuất hiện, chuyển số đếm thành thông tin tương hỗ điểm (PMI), rồi nén ma trận PMI thành các vector ngắn. Word2Vec làm cùng việc đó mà không cần lập ma trận, và Levy và Goldberg (2014) chứng minh rằng nó thực chất đang phân rã ma trận PMI. Một kho ngữ liệu nhân tạo nhỏ cho phép quan sát từng bước bằng số.

2.1Giả thuyết phân bố#

"Gần nghĩa" là khái niệm của con người, không đo trực tiếp được. Tín hiệu thay thế đến từ ngôn ngữ học: giả thuyết phân bố (distributional hypothesis; Harris, 1954; Firth, 1957) cho rằng các từ xuất hiện trong những ngữ cảnh giống nhau thường có nghĩa giống nhau. Nếu trong rất nhiều câu tiếng Việt, "mèo" và "chó" cùng thường đi với "nuôi", "thú cưng", "cho ăn", thì hai từ này có điểm chung, và điểm chung đó đo được qua thống kê.

Như vậy một câu hỏi không đo được ("hai từ này có gần nghĩa không?") được thay bằng một câu hỏi đo được ("hai từ này có xuất hiện trong những ngữ cảnh giống nhau không?"). Sự thay thế không hoàn hảo: hai từ trái nghĩa như "tốt" và "xấu" xuất hiện trong ngữ cảnh gần như giống hệt nhau, nên sẽ có vector gần nhau. Nhưng nó đủ tốt để làm nền cho hầu hết các phương pháp biểu diễn văn bản về sau.

2.2Kho ngữ liệu thí nghiệm#

Để quan sát cơ chế một cách rõ ràng, thí nghiệm trong code/bieudien/experiments.py dùng một kho ngữ liệu nhân tạo nhỏ nhưng có cấu trúc. Từ vựng có 20 từ, mỗi từ là một cặp (chủ đề, vai trò) với 5 chủ đề và 4 vai trò, đặt tên như vua_nam, mua_nho, cay_lon. Kho gồm 40 000 câu, mỗi câu 3 từ. Một nửa số câu gồm các từ cùng chủ đề, ví dụ vua_nam vua_nho vua_lon; nửa còn lại gồm các từ cùng vai trò, ví dụ vua_nam mua_nam cay_nam.

Không câu nào cho biết có hai trục "chủ đề" và "vai trò", và không có nhãn nào; dữ liệu chỉ là các dãy từ. Nếu embedding học được tách hai trục thành hai hướng cộng được với nhau, đó là điều mô hình tự rút ra từ thống kê.

2.3Số lần đồng hiện và PMI#

Đếm số lần mỗi cặp từ cùng xuất hiện trong một câu cho ma trận đồng hiện #(w,c)\#(w, c). Số đếm thô có một nhược điểm: một từ rất phổ biến như "của" đồng hiện với hầu hết các từ, không phải vì liên quan mà vì phổ biến. Thứ cần đo là hai từ cùng xuất hiện nhiều hơn bao nhiêu so với mức kỳ vọng nếu chúng độc lập.

Định nghĩa 2.1 (Thông tin tương hỗ điểm)

Với p(w,c)p(w, c) là xác suất cặp (w,c)(w, c) cùng xuất hiện và p(w)p(w), p(c)p(c) là các xác suất biên,

PMI(w,c)=log⁡p(w,c)p(w) p(c).\mathrm{PMI}(w, c) = \log\frac{p(w, c)}{p(w)\,p(c)}.

PMI dương nghĩa là hai từ cùng xuất hiện nhiều hơn mức ngẫu nhiên, bằng 0 nghĩa là đúng mức ngẫu nhiên, âm nghĩa là ít hơn. PPMI (positive PMI) là PMI với các giá trị âm thay bằng 0.

Tử số là xác suất quan sát được; mẫu số là xác suất nếu hai từ độc lập. Trong kho ngữ liệu thí nghiệm, PMI chỉ có ba giá trị:

Cặp từ PMI
Cùng chủ đề, khác vai trò (vua_nam, vua_nu) +1,1876+1{,}1876
Cùng vai trò, khác chủ đề (vua_nam, mua_nam) +0,9367+0{,}9367
Khác cả chủ đề lẫn vai trò (vua_nam, mua_nu) 00

Hai từ có chung một thuộc tính thì PMI dương; không có thuộc tính chung thì cùng xuất hiện đúng mức ngẫu nhiên. Cấu trúc hai trục của dữ liệu đã nằm sẵn trong ma trận PMI trước khi học bất cứ điều gì.

2.4Nén ma trận PPMI bằng SVD#

Ma trận PMI có V×VV \times V phần tử. Với từ vựng thật cỡ 400 000 từ, đó là 160 tỉ phần tử, phần lớn bằng 0. Cần một biểu diễn ngắn và dày: mỗi từ một vector vài trăm chiều. Cách làm là xấp xỉ hạng thấp bằng SVD (Chương 14 của Nền tảng): với PPMI=USV⊤\mathrm{PPMI} = U S V^\top, giữ kk giá trị suy biến lớn nhất và đặt embedding của các từ là các hàng của E=UkSk1/2E = U_k S_k^{1/2}. PPMI được dùng thay cho PMI vì các giá trị PMI âm ước lượng rất kém: chúng đòi hỏi đếm chính xác những cặp từ hiếm khi đi cùng nhau.

Chất lượng embedding được kiểm tra bằng phép loại suy dạng a:b::c:?a : b :: c : ?, tìm từ có vector gần nhất với b⃗−a⃗+c⃗\vec b - \vec a + \vec c theo cosine, loại trừ ba từ đã cho. Với k=8k = 8:

Văn bản
vua_nam : vua_nu :: mua_nho : ?  ->  mua_nu
Do chinh xac tren 240 phep loai suy: 1.0000   (doan ngau nhien: 0.0588)

Cả 240 phép loại suy đều đúng. Vector vua_nu→−vua_nam→\overrightarrow{vua\_nu} - \overrightarrow{vua\_nam}, tức "đổi vai trò từ nam sang nữ", cộng vào mua_nho cho đúng mua_nu. Hai trục đã được tách thành hai hướng cộng được, dù dữ liệu không hề nói có hai trục.

Hình 2
Hình 2. Trái: ma trận PMI của 20 từ. Giữa: các từ chiếu xuống hai chiều đầu tiên; màu là chủ đề, hình dạng điểm là vai trò. Phải: tích vô hướng học được bằng skip-gram so với PMI (Mục 2.6).

Ta có thể nghĩ giữ càng nhiều chiều thì embedding càng tốt, nhưng độ chính xác không tăng đều theo số chiều giữ lại:

Số chiều kk 2 4 6 8 12 16 20
Độ chính xác loại suy 0,479 0,788 0,875 1,000 0,588 0,250 1,000

Giải thích nằm ở phổ của ma trận. Ma trận PPMI ở đây có đúng 8 trị riêng dương (7,28; 2,73; 2,70; 2,68; 2,68; 2,49; 2,46; 2,43) và 12 trị riêng âm có độ lớn gần bằng nhau, từ −2,09-2{,}09 tới −2,16-2{,}16. Tám trị riêng dương ứng với cấu trúc hai trục: một hướng chung cho mọi từ, 4 hướng cho sự khác biệt giữa 5 chủ đề và 3 hướng cho sự khác biệt giữa 4 vai trò, tổng cộng 1+4+3=81 + 4 + 3 = 8. Mười hai trị riêng âm sinh ra vì đường chéo của ma trận bằng 0: một từ không bao giờ đồng hiện với chính nó. SVD cho giá trị suy biến bằng giá trị tuyệt đối của trị riêng và không phân biệt dấu, nên khi giữ 12 hoặc 16 chiều, embedding lấy thêm một phần các hướng ứng với trị riêng âm và coi chúng như hướng mang thông tin, làm sai lệch hình học. Giữ đủ 20 chiều thì ma trận được tái tạo chính xác và phép loại suy lại đúng hết.

Lưu ý

Trên kho ngữ liệu thật, không có ranh giới rõ ràng như vậy giữa phần cấu trúc và phần còn lại, và số chiều được chọn bằng thực nghiệm trên các nhiệm vụ đánh giá. Ví dụ này không cho thấy "đường cong đánh đổi" điển hình theo số chiều; nó cho thấy số chiều tốt nhất phụ thuộc vào cấu trúc phổ của ma trận, và giữ thêm chiều không phải lúc nào cũng có lợi.

2.5Skip-gram và lấy mẫu âm#

SVD ở Mục 2.4 cần lập toàn bộ ma trận PPMI, và với từ vựng thật ma trận đó quá lớn. Word2Vec (Mikolov và cộng sự, 2013) tránh việc này bằng cách xử lý từng cặp (w,c)(w, c) quan sát được bằng gradient descent. Mô hình skip-gram gán cho mỗi từ hai vector, ww khi là từ trung tâm và cc khi là từ ngữ cảnh, và mô hình hoá

p(c∣w)=exp⁡(⟨w,c⟩)∑c′∈Vexp⁡(⟨w,c′⟩).p(c \mid w) = \frac{\exp(\langle w, c\rangle)}{\sum_{c' \in V}\exp(\langle w, c'\rangle)}.

Mẫu số là tổng trên toàn bộ từ vựng, tính lại cho mỗi cặp huấn luyện. Với vector 300 chiều, tính softmax đầy đủ và gradient của nó tốn cỡ 2×V×3002 \times V \times 300 phép tính mỗi cặp:

Từ vựng VV Softmax đầy đủ Lấy mẫu âm, k=5k = 5 Tỉ lệ
1 000 600 000 3 600 167
50 000 30 000 000 3 600 8 333
400 000 240 000 000 3 600 66 667
2 000 000 1 200 000 000 3 600 333 333
Hình 3
Hình 3. Số phép tính cho mỗi cặp huấn luyện theo kích thước từ vựng: softmax đầy đủ tăng tuyến tính theo VV, lấy mẫu âm không phụ thuộc VV.

Lấy mẫu âm (negative sampling) thay bài toán "chọn đúng 1 trong VV từ" bằng k+1k + 1 bài toán phân loại nhị phân: cặp quan sát được có phải cặp thật không, và kk cặp ghép ngẫu nhiên có phải cặp thật không. Hàm mục tiêu cho mỗi cặp là

log⁡σ(⟨w,c⟩)+∑i=1kEci∼Pn[log⁡σ(−⟨w,ci⟩)],\log\sigma(\langle w, c\rangle) + \sum_{i=1}^{k}\mathbb{E}_{c_i \sim P_n}\big[\log\sigma(-\langle w, c_i\rangle)\big],

với PnP_n là phân phối để rút từ ngẫu nhiên. Chi phí mỗi cặp không còn phụ thuộc vào VV, nhờ vậy word2vec huấn luyện được trên kho hàng tỉ từ ngay từ năm 2013. Trong bài báo gốc, PnP_n tỉ lệ với tần suất của từ mũ 3/43/4; số mũ này được chọn bằng thực nghiệm.

2.6Skip-gram phân rã ma trận PMI#

Đến đây có hai cách tạo embedding trông rất khác nhau: một cách đếm rồi phân rã ma trận, một cách huấn luyện bằng gradient descent trên từng cặp từ. Định lý sau cho thấy chúng nhắm tới cùng một ma trận.

Định lý 2.1 (Levy và Goldberg, 2014)

Nếu các vector đủ nhiều chiều để mọi tích vô hướng ⟨wi,cj⟩\langle w_i, c_j\rangle nhận giá trị tuỳ ý, thì điểm tối ưu của skip-gram với lấy mẫu âm, với kk mẫu âm rút từ phân phối unigram, thoả

⟨wi,cj⟩=PMI(i,j)−log⁡k.\langle w_i, c_j\rangle = \mathrm{PMI}(i, j) - \log k.

Chứng minh

Với NN là tổng số cặp, cặp (i,j)(i, j) xuất hiện #(i,j)\#(i, j) lần như cặp thật và, theo kỳ vọng, k #(i) Pn(j)k\,\#(i)\,P_n(j) lần như cặp âm. Phần hàm mục tiêu phụ thuộc s=⟨wi,cj⟩s = \langle w_i, c_j\rangle là

#(i,j) log⁡σ(s)+k #(i) Pn(j) log⁡σ(−s).\#(i,j)\,\log\sigma(s) + k\,\#(i)\,P_n(j)\,\log\sigma(-s).

Dùng ddslog⁡σ(s)=1−σ(s)\frac{d}{ds}\log\sigma(s) = 1 - \sigma(s) và ddslog⁡σ(−s)=−σ(s)\frac{d}{ds}\log\sigma(-s) = -\sigma(s), cho đạo hàm bằng 0:

#(i,j) (1−σ(s))=k #(i) Pn(j) σ(s)⟹  es=σ(s)1−σ(s)=#(i,j)k #(i) Pn(j).\begin{gathered} \#(i,j)\,(1 - \sigma(s)) = k\,\#(i)\,P_n(j)\,\sigma(s) \\ \Longrightarrow\; e^{s} = \frac{\sigma(s)}{1 - \sigma(s)} = \frac{\#(i,j)}{k\,\#(i)\,P_n(j)}. \end{gathered}

Thay Pn(j)=#(j)/NP_n(j) = \#(j)/N được s=log⁡#(i,j) N#(i) #(j)−log⁡k=PMI(i,j)−log⁡ks = \log\frac{\#(i,j)\,N}{\#(i)\,\#(j)} - \log k = \mathrm{PMI}(i,j) - \log k.

Như vậy skip-gram với lấy mẫu âm là một cách phân rã ma trận PMI (dịch đi log⁡k\log k) mà không cần lập ma trận: mỗi bước gradient chỉ chạm vào một cặp quan sát được và vài cặp ngẫu nhiên. Mô hình cũng không phải mạng nơ-ron sâu như tên gọi thường gợi ý: nó chỉ có một lớp, không có hàm phi tuyến ở giữa.

Định lý kiểm chứng được bằng số. Thí nghiệm tối ưu hàm mục tiêu kỳ vọng của skip-gram bằng gradient descent, với k=1k = 1 (để đích đúng bằng PMI) và phân phối unigram, rồi so tích vô hướng học được với PMI trên các cặp có đồng hiện:

Số chiều Tương quan với PMI Sai lệch tuyệt đối trung bình Sai lệch lớn nhất
8 (hạng thấp) 0,3727 0,2862 1,0566
20 (hạng đầy đủ) 0,9995 0,0106 0,0251

Ở hạng đầy đủ, gradient descent hội tụ về đúng ma trận PMI, khớp Định lý 2.1: một bên là công thức giải tích, một bên là 4 000 vòng lặp tối ưu, cho cùng một ma trận.

Ở hạng thấp, mô hình không khớp chính xác được và phải chọn giữ lại phần nào của ma trận. Sự lựa chọn này khác với SVD. SVD cho xấp xỉ tốt nhất theo tổng bình phương sai số với trọng số như nhau cho mọi phần tử; skip-gram cho một xấp xỉ có trọng số theo tần suất của các cặp, và dùng hai bộ vector riêng cho từ và ngữ cảnh. Trên kho ngữ liệu này, embedding skip-gram hạng 8 (lấy các vector từ ww) chỉ giải đúng 20,4% phép loại suy, so với 100% của SVD trên PPMI cùng số chiều. Kết quả không có nghĩa skip-gram kém hơn nói chung: Levy, Goldberg và Dagan (2015) so sánh trên dữ liệu thật và kết luận rằng khác biệt giữa các phương pháp phụ thuộc vào siêu tham số và cách xử lý dữ liệu nhiều hơn vào bản thân thuật toán. Điều ví dụ cho thấy là hai phương pháp cùng nhắm tới một ma trận vẫn có thể cho embedding rất khác nhau khi bị giới hạn số chiều.

2.7Các hiểu lầm thường gặp#

Word2Vec thường được giới thiệu như một thành tựu của học sâu, và cách giới thiệu đó để lại khá nhiều hiểu lầm. Bảng dưới đối chiếu những hiểu lầm hay gặp với điều các mục trên đã chỉ ra.

Phát biểu Thực tế
"Word2Vec là học sâu." Mô hình chỉ có một lớp tuyến tính; về bản chất là phân rã ma trận.
"Lấy mẫu âm là phép xấp xỉ của softmax." Không hẳn: đó là một hàm mục tiêu khác, có nghiệm là PMI dịch log⁡k\log k, không phải nghiệm của softmax đầy đủ.
"Embedding hiểu nghĩa của từ." Embedding chỉ nắm thống kê đồng hiện, nên không phân biệt được các từ trái nghĩa xuất hiện trong ngữ cảnh giống nhau.
"Vector cộng trừ được nên mô hình biết suy luận." Tính cộng được đến từ cấu trúc của ma trận PMI. Trên dữ liệu thật, nó đúng với một số quan hệ và sai với nhiều quan hệ khác.
"Số mũ 3/4 trong phân phối lấy mẫu âm có cơ sở lý thuyết." Bài báo gốc chọn số mũ này bằng thực nghiệm.

2.8Tóm tắt#

Embedding từ dựa trên giả thuyết phân bố: hai từ xuất hiện trong những ngữ cảnh giống nhau thường gần nghĩa. Đếm số lần đồng hiện, chuyển sang PMI để loại ảnh hưởng của tần suất, rồi nén ma trận PPMI bằng SVD đã cho embedding giải đúng cả 240 phép loại suy trên kho ngữ liệu thí nghiệm. Số chiều tốt nhất không phải số chiều lớn nhất mà do phổ của ma trận quyết định. Word2Vec với lấy mẫu âm làm cùng việc mà không lập ma trận, và chi phí mỗi cặp huấn luyện không phụ thuộc kích thước từ vựng. Ở điểm tối ưu, tích vô hướng của nó bằng PMI dịch đi log⁡k\log k; ở hạng đầy đủ, thí nghiệm cho tương quan 0,9995 giữa hai đại lượng.

Có embedding rồi, việc tiếp theo là so sánh chúng, và cách so sánh mặc định là cosine. Chương 3 cho thấy cosine có thể cho con số rất cao giữa hai vector không liên quan gì tới nhau, khi đám mây embedding không nằm quanh gốc toạ độ.


Tự kiểm tra

6 câu. Chọn đáp án để xem ngay lời giải thích.

  1. 1Skip-gram với lấy mẫu âm thực chất phân rã ma trận nào?

  2. 2Vì sao dùng PMI thay cho số lần đồng hiện thô?

  3. 3Lấy mẫu âm giải quyết vấn đề gì?

  4. 4Trong thí nghiệm ở Mục 2.6, embedding skip-gram hạng 8 giải đúng bao nhiêu phép loại suy, so với SVD trên PPMI cùng số chiều?

  5. 5Vì sao độ chính xác loại suy của SVD giảm khi giữ 12 hoặc 16 chiều, rồi lại đạt 100% ở 20 chiều?

  6. 6Số mũ 3/4 trong phân phối lấy mẫu âm có cơ sở gì?

Đã trả lời 0/6