Âm tiết không phải là từ
Âm tiết không phải là từ
Suốt cả môn này, cắt theo khoảng trắng nghĩa là cắt ra âm tiết, không phải từ. Đây là chỗ trả món nợ đó, và đếm xem nó làm lệch các độ đo bao nhiêu.
Bài token, OOV và ba cách tách đã cắt câu ở khoảng trắng và ghi một chú thích ở cuối: với tiếng Việt thì cái vừa cắt ra là âm tiết, không phải từ. Mọi bài sau đó lặp lại chú thích ấy rồi đi tiếp. Cụm ngôn ngữ là hai âm tiết nhưng một từ. Cụm trí tuệ nhân tạo là bốn âm tiết nhưng một khái niệm. Nếu bộ đếm của bạn coi mỗi âm tiết là một token thì nó đang đếm sai đơn vị, và mọi con số dựng trên đó đều lệch theo.
Món nợ này không dừng ở chuyện đếm. Nó chạy thẳng vào BLEU, vào độ chính xác theo token, vào mọi thứ có chữ "token" trong công thức. Sim dưới đây đặt ba cách tách cạnh nhau trên cùng một câu, rồi lấy đúng ba cách tách đó chấm lại cùng một bản dịch.
Sinh viên học máy tính , nhà nghiên cứu xử lý ngôn ngữ tiếng Việt bằng máy tính · 79 ký tự| Cách tách | Số token | Số loại khác nhau | Ký tự / token |
|---|---|---|---|
| Âm tiết | 18 | 16 | 4.39 |
| Từ ghép | 10 | 10 | 7.90 |
| Ký tự | 79 | 29 | 1.00 |
Hệ quả: cùng một bản dịch, ba con số
Cùng một cặp câu, chấm lại dưới cả ba cách tách. BLEU ở đây là bản tối giản: một câu tham chiếu, trọng số đều, có hệ số phạt ngắn, và bậc nào mà bản dịch không đủ token thì bị bỏ khỏi trung bình nhân. Độ chính xác theo token là so từng vị trí, mẫu số lấy chuỗi dài hơn.
| Cách tách | Token bản dịch | Token tham chiếu | Phạt ngắn | BLEU | Đúng theo vị trí |
|---|---|---|---|---|---|
| Âm tiết | 11 | 11 | 1.0000 | 78.61% | 81.82% (9/11) |
| Từ ghép | 6 | 6 | 1.0000 | 75.98% | 83.33% (5/6) |
| Ký tự | 48 | 46 | 1.0000 | 80.52% | 81.25% (39/48) |
| Chi tiết Âm tiết | Khớp | Tổng | Độ chính xác bậc n |
|---|---|---|---|
| n = 1 | 9 | 11 | 0.8182 |
| n = 2 | 8 | 10 | 0.8000 |
| n = 3 | 7 | 9 | 0.7778 |
| n = 4 | 6 | 8 | 0.7500 |
| Trung bình nhân | trên 4 bậc | 0.7861 | |
| BLEU = phạt ngắn × trung bình nhân | 1.0000 × 0.7861 | 78.61% | |
Ba cách tách, ba bộ số
Ở trạng thái mặc định, câu trong ô là Sinh viên học máy tính, nhà nghiên cứu xử lý ngôn ngữ tiếng Việt bằng máy tính. Sau khi chuẩn hoá, nó dài 79 ký tự, và ba cách tách cho:
- Theo khoảng trắng: 18 token, 16 loại khác nhau, 4.39 ký tự trên mỗi token.
- Theo từ ghép: 10 token, 10 loại, 7.90 ký tự trên mỗi token.
- Theo ký tự: 79 token, 29 loại, đúng 1.00 ký tự trên mỗi token.
Từ 18 xuống 10 là mất gần một nửa. Nếu bạn từng báo cáo "câu trung bình 18 token" cho một hệ tiếng Việt, con số đó nói về âm tiết, và một người đọc quen tiếng Anh sẽ hiểu nhầm thành từ. Cột "số loại khác nhau" còn thú vị hơn: theo âm tiết có 16 loại trên 18 token vì máy và tính mỗi cái xuất hiện hai lần, còn theo từ ghép thì 10 trên 10, không lặp lại gì cả. Cùng một câu, chỉ đổi đơn vị, mà một câu "có lặp từ" biến thành một câu "không lặp từ nào".
Ba hàng chip là ba cách tách chạy thật trên câu bạn đang gõ, không phải ba kịch bản dựng sẵn. Sửa một chữ trong ô là cả ba hàng, cả bảng, và cả phần BLEU bên dưới tính lại.
Khớp dài nhất từ trái sang, và chỗ nó sai
Hàng giữa dùng một thuật toán cụ thể: quét từ trái sang phải, tại mỗi vị trí lấy mục dài nhất trong từ điển mà khớp được, nhảy qua phần vừa lấy, lặp lại. Không quay lui, không cân nhắc gì phía sau.
Hãy nhìn kỹ câu mặc định. Cụm máy tính xuất hiện hai lần, mà chỉ lần thứ hai được ghép thành một token máy_tính. Lần đầu, khi con trỏ tới vị trí của học, từ điển có mục học máy dài hai âm tiết nên khớp tham lam nuốt luôn máy vào đó, để lại tính đứng trơ một mình. Người đọc hiểu câu là sinh viên | học | máy tính, còn thuật toán trả về sinh_viên | học_máy | tính.
Chip nền đỏ trong sim đánh dấu đúng chỗ đó. Điều kiện để bị đánh dấu rất hẹp: từ điển còn một mục bắt đầu ở giữa token và kết thúc quá mép phải của nó, tức là tồn tại một cách đọc khác mà thuật toán quét một chiều không bao giờ chạm tới. Cụm nhà nghiên cứu thì không bị đánh dấu, dù nghiên cứu cũng là một mục: mục đó kết thúc đúng ở mép phải, nên không tranh chấp gì.
Cần nói thẳng hai điều. Thứ nhất, đây là hạn chế của chiến lược tham lam, không phải lỗi cài đặt. Không có cách sửa vòng lặp nào cứu được, vì thuật toán chốt lựa chọn tại mỗi vị trí trước khi biết phần còn lại của câu ra sao. Muốn giải đúng thì phải chấm điểm toàn bộ cách tách rồi chọn cách tốt nhất, tức là đổi sang một thuật toán khác hẳn. Thứ hai, xoá mục học máy khỏi từ điển sẽ chữa được câu này nhưng làm hỏng câu khác, vì học máy đúng là một từ trong sinh viên học máy và học sâu. Không có từ điển nào tự nó gỡ được nhập nhằng.
Cờ đỏ chỉ báo rằng có một cách đọc khác, chứ không phán cách nào đúng. Việc đó vẫn phải do người quyết.
Hệ quả lên các độ đo
Phần dưới của sim lấy đúng ba cách tách ấy chấm một cặp câu:
- Tham chiếu:
nhà nghiên cứu dùng máy tính để xử lý ngôn ngữ - Bản dịch:
nhà nghiên cứu dùng máy tính để xử lý tiếng Việt
Máy dịch sai đúng hai âm tiết cuối. Kết quả:
| Cách tách | Token bản dịch | BLEU | Đúng theo vị trí |
|---|---|---|---|
| Âm tiết | 11 | 78.61% | 81.82% |
| Từ ghép | 6 | 75.98% | 83.33% |
| Ký tự | 48 | 80.52% | 81.25% |
Một bản dịch, ba điểm BLEU, chênh nhau 4.54 điểm giữa cao nhất và thấp nhất. Không con số nào trong ba con số đó là "điểm BLEU của bản dịch này". Mỗi con số là điểm của cặp gồm bản dịch và cách tách. Hai bài báo cùng báo cáo BLEU trên cùng bộ dữ liệu tiếng Việt, một bài tách âm tiết một bài tách từ ghép, thì bảng so sánh giữa chúng vô nghĩa dù cả hai đều trung thực.
Chú ý cột cuối: theo âm tiết, hai âm tiết sai trên mười một vị trí cho 81.82%; theo từ ghép, một token sai trên sáu cho 83.33%. Độ chính xác xếp từ ghép rộng lượng hơn, còn BLEU xếp từ ghép khắt khe hơn. Hai độ đo đảo chiều nhau trên cùng dữ liệu, nên đừng chọn cách tách bằng cách thử xem cách nào cho số đẹp.
Lý do BLEU đảo chiều nằm ở bảng chi tiết. Chọn "Xem chi tiết" là Âm tiết: bốn bậc lần lượt khớp 9/11, 8/10, 7/9, 6/8. Chọn Từ ghép: 5/6, 4/5, 3/4, 2/3. Chuỗi ngắn đi thì mỗi lỗi chiếm tỉ lệ lớn hơn, và số n-gram bậc cao ít đi rất nhanh. Bấm preset Sập về 0 để thấy dạng cực đoan: một âm tiết dịch sai làm hỏng hai token từ ghép liền nhau, BLEU theo từ ghép về 0 ngay từ bậc 2, trong khi theo ký tự vẫn trên 0. Hạ "BLEU bậc tối đa" xuống 2 thì điểm theo âm tiết sống lại, còn điểm theo từ ghép vẫn 0.
Những gì ở đây là quy ước, không phải chân lý
Nói rõ để bạn không mang nhầm con số đi chỗ khác:
- Từ điển 40 mục là đồ chơi. Bộ tách từ tiếng Việt thật, như VnCoreNLP hay underthesea, dùng mô hình học máy được huấn luyện trên ngữ liệu gán nhãn, cộng với từ điển hàng chục nghìn mục, và vẫn sai ở những chỗ nhập nhằng. Từ điển ở đây chỉ đủ lớn để ba cách tách bất đồng với nhau. Chuyển ô "Từ điển" sang Rỗng thì cách tách theo từ ghép thoái hoá về đúng cách tách theo khoảng trắng, 18 token, đây là hành vi dự phòng cố ý.
- BLEU ở đây là bản tối giản: một câu tham chiếu, trọng số đều bốn bậc, cắt ngọn, phạt câu ngắn, không làm mượt. Bậc nào mà bản dịch không đủ token thì bị bỏ khỏi trung bình nhân, đây là quy ước "bậc hiệu dụng" quen dùng cho BLEU mức câu; không có nó thì mọi câu ngắn đều ra 0. Bậc nào có n-gram mà không khớp cái nào vẫn kéo cả điểm về 0, và đó là hành vi thật của BLEU.
- Độ chính xác theo token ở đây so từng vị trí, mẫu số lấy chuỗi dài hơn. Nó phạt một cú dịch chuyển một token như thể mọi thứ phía sau đều sai. Đó chính là lý do khoảng cách chỉnh sửa tồn tại.
- Chuẩn hoá trước khi tách: chuỗi được đưa về NFC, dấu câu tách rời thành token riêng, khoảng trắng gộp lại. Sim in ra câu sau chuẩn hoá để bạn thấy đúng cái mà thuật toán nhìn. Ở cách tách theo ký tự, khoảng trắng cũng là một token, nhờ vậy ghép các token lại luôn ra đúng câu đã chuẩn hoá ở cả ba cách. Nói "câu đã chuẩn hoá" chứ không phải câu bạn gõ: dấu phẩy đã được đẩy ra thành token riêng nên chuỗi ghép lại có thêm một khoảng trắng trước nó.
- Số loại khác nhau đếm không phân biệt hoa thường, còn việc tra từ điển cũng hạ chữ thường trước khi so.
- Ba con số BLEU ở trên đến từ đúng một cặp câu. Chúng đủ để chứng minh điều bài này muốn nói, rằng điểm đổi theo cách tách, nhưng không đủ để nói cách tách nào nói chung rộng lượng hơn. Trên mấy cặp câu ngắn bạn bấm được ở đây, ký tự luôn cho điểm cao nhất và từ ghép luôn thấp nhất, và điều đó có lý do cơ học: n-gram ký tự chồng lên nhau rất dày, nên hai âm tiết dịch sai ở cuối câu chỉ làm hỏng 7 cụm trong 48 ở bậc 1 và 10 cụm trong 45 ở bậc 4, còn chuỗi từ ghép ngắn tới mức mỗi lỗi ăn một phần lớn. Nhưng khoảng cách thì dao động dữ dội: cặp mặc định chênh 4.54 điểm, còn preset Sập về 0 đẩy chênh lệch lên gần 74 điểm vì hai cách tách kia về 0 còn ký tự vẫn ở 73.95%. Một câu không đo được xu hướng, muốn kết luận thì phải chấm trên cả tập dữ liệu.
Bài điểm số nhạy theo quy ước đi tiếp hướng này: cách tách chỉ là một trong nhiều quy ước chấm điểm, và bật tắt chúng cùng lúc thì khoảng dao động còn rộng hơn nữa.
Với tiếng Việt, khoảng trắng cắt ra âm tiết chứ không cắt ra từ, nên "số token" và mọi độ đo đếm theo token đều phụ thuộc vào một lựa chọn mà bài báo thường không ghi. Hãy nói rõ bạn tách bằng gì, và đừng so hai con số BLEU sinh ra từ hai cách tách khác nhau.
- 1Ở trạng thái mặc định, cụm "máy tính" xuất hiện hai lần trong câu nhưng chỉ một lần được ghép thành một token. Vì sao?
- 2Cùng một bản dịch cho BLEU 78.61% theo âm tiết, 75.98% theo từ ghép và 80.52% theo ký tự. Kết luận đúng là gì?
- 3Khớp dài nhất trả về "sinh_viên | học_máy | tính" trong khi người đọc hiểu là "sinh viên | học | máy tính". Đây là chuyện gì?