Chuyển tới nội dung chính

Đồng xuất hiện và PPMI

Ngữ liệu sửa đượcCửa sổ 1 tới 4 từĐếm thô so với PPMI

Đồng xuất hiện và PPMI

Bạn không cần từ điển để biết một từ nghĩa là gì. Chỉ cần đếm xem nó hay đứng cạnh những từ nào, rồi bỏ đi phần mà sự tình cờ đã giải thích được.

Có một câu hay được nhắc trong ngôn ngữ học: bạn nhận ra một từ qua đám bạn nó chơi cùng. Nếu tôi không nói cho bạn biết tesgüino nghĩa là gì, nhưng cho bạn xem vài câu có nó, và trong các câu đó nó luôn đứng cạnh uống, say, ngô, chai, thì bạn đoán ra ngay đó là một loại đồ uống lên men. Bạn không tra từ điển, bạn đọc hàng xóm.

Máy làm đúng như vậy, chỉ khác là nó đếm. Với mỗi từ trung tâm, ta nhìn sang trái và sang phải trong một cửa sổ ngữ cảnh rộng vài từ, rồi ghi vào một bảng: từ này đã nằm cạnh từ kia bao nhiêu lần. Bảng đó là ma trận đồng xuất hiện, và mỗi hàng của nó là một vector mô tả từ trung tâm. Vấn đề nằm ở chỗ số đếm thô nói dối một cách rất có hệ thống, và phần còn lại của bài là chuyện chữa cái nói dối đó.

Đồng xuất hiện và PPMI · nghĩa của một từ nằm ở hàng xóm
PPMI cao nhất sinh · viên 2.663
Câu 4Token 25Từ vựng 11Cặp trong cửa sổ 38Tổng mọi ô T 76
Ma trận đồng xuất hiện · hàng là từ trung tâm, cột là từ ngữ cảnhsố đếm thô c(x,y)
x \ yrấtdữhọcliệumáycầnsinhviênchothíchtốtR(x)
rất16
dữ8
học8
liệu7
máy7
cần8
sinh4
viên6
cho4
thích4
tốt4
Ô đang chọn: rất làm từ trung tâm, dữ làm từ ngữ cảnh
PMI(x,y) = log2( P(x,y) / (P(x) * P(y)) )PPMI = max(0, PMI)log cơ số 2, đơn vị bit
c(x,y) số lần cùng nằm trong một cửa sổ3
P(x,y) = c(x,y) / T = 3 / 760.0395
P(x) = R(x) / T = 16 / 760.2105
P(y) = R(y) / T = 8 / 760.1053
P(x) * P(y) giá trị chờ đợi nếu hai từ độc lập0.0222
PMI log2 của tỉ số trên0.8329
PPMI phần dương của PMI0.8329
Tỉ số 0.0395 / 0.0222 lớn hơn 1, nghĩa là cặp này xuất hiện cùng nhau nhiều hơn mức ngẫu nhiên dự đoán, nên PMI dương và PPMI giữ nguyên giá trị.
Vô địch theo đếm thô
rất · dữđếm 3, PPMI 0.83
dữ · liệuđếm 3, PPMI 2.03
học · máyđếm 3, PPMI 2.03
Vô địch theo PPMI
sinh · viênđếm 2, PPMI 2.66
2 cặp thật sự đồng xuất hiện nhưng PMI âm, thấp nhất là rất · liệu với PMI = -0.559. PPMI kéo hết về 0, nên nhìn vào bảng PPMI bạn không còn phân biệt được "chưa từng gặp nhau" với "gặp nhau ít hơn mức ngẫu nhiên". Đó là cái giá của việc cắt phần âm.

Đọc bảng ở trạng thái mặc định

Ngữ liệu ban đầu có 4 câu, 25 token, 11 từ khác nhau. Với cửa sổ 2 từ mỗi bên, hệ đếm được 38 cặp, và vì mỗi cặp được ghi vào cả hai ô đối xứng nên tổng mọi ô là T = 76. Đó là con số nằm dưới mẫu của mọi xác suất trong bài.

Nhìn cột R(x) ở mép phải bảng. Hàng của từ rất có tổng 16, gấp đôi hàng đứng ngay sau nó. Chuyện này không có gì bí ẩn: rất xuất hiện trong cả bốn câu nên nó chạm vào gần như mọi từ khác. Nếu bạn xếp hạng cặp từ theo số đếm thô, rất sẽ luôn có mặt ở nhóm đầu, đúng như từ the trong tiếng Anh luôn đứng đầu mọi bảng đếm.

Và đúng thế thật. Ở chế độ đếm thô, ba ô cùng đạt giá trị lớn nhất là 3:

  • rất với dữ
  • dữ với liệu
  • học với máy

Ba ô bằng nhau, nhưng chúng không nói cùng một chuyện. dữ liệuhọc máy là hai từ ghép, chúng dính nhau vì bản chất. Còn rất dính với dữ chỉ vì rất dính với tất cả mọi thứ. Số đếm thô không phân biệt nổi hai trường hợp này, và đó chính là lỗ hổng.

PPMI hỏi một câu khác

Thay vì hỏi "hai từ này gặp nhau bao nhiêu lần", ta hỏi "hai từ này gặp nhau nhiều hơn mức tình cờ bao nhiêu". Muốn trả lời thì phải biết mức tình cờ là bao nhiêu đã. Nếu hai từ hoàn toàn không liên quan, xác suất gặp nhau chỉ là tích của hai xác suất riêng. Vậy lấy cái thực chia cho cái tình cờ:

PMI(x, y) = log2( P(x,y) / (P(x) * P(y)) )
PPMI(x, y) = max(0, PMI(x, y))

Trong đó P(x,y) = c(x,y) / T là tỉ lệ của ô đang xét trên tổng mọi ô, còn P(x) = R(x) / TP(y) = R(y) / T là tỉ lệ của hai lề. Bấm vào bất kỳ ô nào trong ma trận, khung bên dưới sẽ bày ra đủ ba con số đó cùng phép chia và phép lấy log. Cơ số 2 nên đơn vị là bit: PMI bằng 1 nghĩa là cặp này xuất hiện cùng nhau gấp đôi mức tình cờ, PMI bằng 0 nghĩa là đúng bằng mức tình cờ.

Ô mở sẵn là rất với dữ, cặp có số đếm cao nhất mà rất chạm tới. Ba con số của nó: P(x,y) = 3/76, P(x) = 16/76, P(y) = 8/76. Tỉ số ra 57/32, và PPMI = 0,8329. Bây giờ gạt công tắc sang PPMI rồi so ba ô vừa liệt kê:

cặpđếm thôPPMI
rất với dữ30,83
dữ với liệu32,03
học với máy32,03
sinh với viên22,66

Dòng cuối là điểm rơi của cả bài. Cặp sinh viên chỉ đồng xuất hiện 2 lần, ít hơn cả ba cặp trên, vậy mà PPMI của nó là 2,66, cao nhất toàn bảng. Lý do: sinhviên đều là từ hiếm trong ngữ liệu này, lề của chúng nhỏ, nên mức tình cờ mà chúng phải vượt qua cũng nhỏ. Chúng vượt qua rất xa. Còn rất có lề tới 16, mức tình cờ của nó cao ngất, nên dù chạm vào ai với số đếm 3 thì cũng chỉ nhỉnh hơn tình cờ một chút.

Nói gọn: đếm thô đo độ ồn ào, PPMI đo độ bất ngờ.

Kéo thanh cửa sổ và xem cái gì đổi

Cửa sổ là tham số quyết định "hàng xóm" nghĩa là gì. Kéo về 1, chỉ hai từ dính sát nhau mới tính là đồng xuất hiện: T tụt xuống 42, và ô rất với dữ về đúng 0, vì trong ngữ liệu này chúng chưa bao giờ đứng liền nhau. Khung chi tiết lúc đó ghi PMI = -∞. Đó là giá trị thật chứ không phải lỗi, log của 0 là âm vô cùng, và bài này in ra ký hiệu đó thay vì để lọt một NaN vào bảng.

Kéo sang 3 rồi 4 thì ngược lại: cửa sổ càng rộng, càng nhiều cặp được tính là hàng xóm, T càng lớn, và các cặp cụ thể càng bị pha loãng. PPMI của học với máy2,655 ở cửa sổ 1, 2,026 ở cửa sổ mặc định, và tụt còn 0,984 ở cửa sổ 4. Cùng một ngữ liệu, cùng một công thức, con số đổi gấp gần ba lần chỉ vì một tham số.

Trong các hệ thật, cửa sổ hẹp cỡ 1 tới 2 từ thường bắt quan hệ cú pháp và từ ghép, còn cửa sổ rộng cỡ 5 tới 10 từ thiên về quan hệ chủ đề. Đó là quy tắc kinh nghiệm chứ không phải định lý, và sim này chỉ chạy tới 4 nên bạn chỉ quan sát được nửa đầu của xu hướng ấy.

Hai chỗ PPMI làm hỏng chuyện

Phần âm bị cắt mất. Ở cửa sổ mặc định có đúng 2 cặp mang PMI âm: rất với liệurất với máy, cả hai đều bằng -0,559. PMI âm là một thông tin có thật và có ích: hai từ này gặp nhau ít hơn mức tình cờ, tức chúng hơi kỵ nhau. PPMI lấy max(0, PMI) nên cả hai ô về 0, ngồi chung một rọ với những cặp chưa bao giờ gặp nhau. Sau bước đó, nhìn bảng PPMI bạn không còn phân biệt được "chưa từng gặp" với "gặp ít hơn dự kiến".

Người ta vẫn chấp nhận đánh đổi ấy vì một lý do thực tế: muốn ước lượng đáng tin một con số âm thì cần rất nhiều dữ liệu. Với ngữ liệu bé, một cặp không gặp nhau lần nào có thể chỉ là do bạn chưa đọc đủ văn bản, chứ không phải vì hai từ ghét nhau. Cắt phần âm là thừa nhận rằng ta không đủ dữ liệu để tin vào nó.

PPMI thiên vị cặp hiếm. Hãy để ý cặp cho với tốt trong bảng mặc định: nó đồng xuất hiện đúng 1 lần, thế mà PPMI đạt 2,25, cao hơn cả học máy vốn có 3 lần. Nhìn công thức thì rõ ngay tại sao. Nếu hai từ đều xuất hiện đúng một lần và lần đó chúng đứng cạnh nhau, tỉ số P(x,y) trên P(x)P(y) bị đẩy lên cực đại, bất kể ta chỉ có một mẩu bằng chứng duy nhất. PPMI tin vào một lần trùng hợp y như tin vào một quy luật.

Đó là lý do trong thực tế người ta thêm làm mượt. Hai cách hay gặp: cộng một hằng số nhỏ vào mọi ô đếm trước khi tính xác suất, hoặc nâng phân phối ngữ cảnh lên luỹ thừa 0,75 để kéo mẫu số của từ hiếm lên và hạ bớt lợi thế của chúng. Bài này cố tình không cài làm mượt, để bạn thấy sống sượng cái mà làm mượt sinh ra để chữa.

Trung thực về ngữ liệu đồ chơi

Ngữ liệu mặc định chỉ có 25 token. Với cỡ đó, mọi con số ở trên đều là minh hoạ cơ chế chứ không phải bằng chứng thống kê. Một ma trận đồng xuất hiện dùng được thật sự cần hàng triệu token, và khi đó các hiệu ứng ở đây vẫn xuất hiện nhưng mượt hơn nhiều. Ngược lại, chính vì ngữ liệu bé mà bạn tính tay kiểm chứng lại được từng ô, việc gần như bất khả thi trên kho thật.

Vài quy ước của bài mà bạn nên biết trước khi đem số đi so với thư viện khác: cửa sổ không vượt qua dấu chấm hay xuống dòng; từ được cắt theo khoảng trắng nên sinh viên thành hai token; log lấy cơ số 2; và một cặp được ghi vào cả hai ô đối xứng nên T bằng đúng hai lần số cặp. Đổi bất kỳ quy ước nào trong đó thì mọi con số đổi theo, dù công thức viết ra trông y hệt.

Điều rút ra

Ma trận đồng xuất hiện biến "nghĩa" thành một hàng số đếm hàng xóm. Nhưng số đếm thô luôn tôn vinh từ phổ biến, vì từ phổ biến đứng cạnh mọi thứ. PPMI chia cho mức tình cờ để trả lại công bằng, và nhờ đó một cặp chỉ gặp nhau 2 lần vẫn có thể thắng một cặp gặp nhau 3 lần. Đổi lại, PPMI vứt bỏ mọi quan hệ âm và tin quá nhanh vào cặp hiếm, nên trong hệ thống thật nó gần như luôn đi kèm một bước làm mượt.

Câu hỏi tự kiểm0/3 đúngchưa trả lời
  1. 1Từ "rất" có tổng hàng 16, lớn nhất bảng, và ô của nó với "dữ" đạt số đếm 3, cũng thuộc nhóm cao nhất. Vì sao PPMI của cặp đó chỉ 0,83 trong khi cặp "sinh" với "viên" chỉ có số đếm 2 lại đạt 2,66?
  2. 2Trong bảng PPMI, một ô bằng 0 có thể có nghĩa gì?
  3. 3Bạn tính PPMI trên một kho văn bản nhỏ và thấy cặp từ có điểm cao nhất là hai thuật ngữ hiếm chỉ xuất hiện đúng một lần, ngay cạnh nhau. Kết luận nào hợp lý?