Kích thước từ vựng, độ phủ và đuôi dài Zipf
Kích thước từ vựng, độ phủ và đuôi dài Zipf
Từ vựng phải hữu hạn, mà số từ khác nhau trong văn bản thì cứ mọc thêm mãi. Cắt ở đâu là một quyết định, và giá phải trả lộ ra ở hai con số OOV rất khác nhau.
Bài trước đã nói tới OOV như một nhãn dán lên từng từ. Bài này hỏi câu tiếp theo: nếu bạn là người chọn từ vựng, bạn giữ lại bao nhiêu từ? Giữ nhiều thì bảng nhúng phình to và phần lớn số dòng trong đó gần như không bao giờ được dùng tới. Giữ ít thì mô hình gặp từ lạ liên tục.
Trước khi kéo, hãy nắm chắc hai chữ sẽ đi cùng nhau suốt cả bài. Token là một lần xuất hiện: câu mèo mèo mèo có ba token. Type là một từ khác nhau: câu đó chỉ có một type. Cùng một kho văn bản, đếm theo token và đếm theo type cho ra hai thế giới khác hẳn nhau, và đó chính là chỗ bài này muốn bạn thấy tận mắt.
tần suất = tần suất cao nhất / hạng.Kho mặc định có 225 token nhưng chỉ 114 type, và trong 114 type đó thì 70 từ xuất hiện đúng một lần. Từ đứng đầu bảng là từ với 15 lần, tức một mình nó đã chiếm hơn 6% toàn bộ số lần xuất hiện.
Bây giờ nhìn vào mốc mặc định K = 20. Bạn giữ lại 20 từ trong 114, tức khoảng một phần sáu số type, và được:
- Độ phủ token 47,1%: gần một nửa số lần xuất hiện trong kho đã nằm trong từ vựng.
- OOV theo token 52,9%: phần còn lại, đúng bằng một trừ độ phủ.
- OOV theo type 82,5%: 94 trong 114 từ khác nhau đã bị vứt ra ngoài.
Hai con số OOV nói về cùng một phép cắt mà chênh nhau tới 30 điểm phần trăm. Lý do rất đơn giản khi nhìn biểu đồ Zipf: những từ bị loại đều nằm ở đuôi phải, mỗi từ chỉ góp một hai lần xuất hiện, nên vứt rất nhiều type mà mất tương đối ít token. Điều này luôn đúng chứ không phải may rủi của kho này: các type bị loại là các type hiếm nhất, nên tỉ lệ OOV theo type không bao giờ nhỏ hơn tỉ lệ OOV theo token.
Kéo thanh K lên 23 để thấy độ phủ vượt mốc một nửa, rồi kéo tiếp lên 50. Độ phủ leo lên khoảng 71,6%, nhưng OOV theo type vẫn còn hơn một nửa. Cứ kéo thêm nữa, bạn sẽ thấy đường cong độ phủ ngày càng phẳng: mỗi từ mới thêm vào từ vựng chỉ còn mua về đúng một hai lần xuất hiện. Đó là lúc tăng từ vựng không còn đáng tiền.
Biểu đồ bên phải vẽ hạng của từ theo tần suất, cả hai trục đều thang log. Nếu tần suất giảm theo lũy thừa của hạng thì trên trục log-log các điểm phải nằm gần một đường thẳng, và đường đứt nét là mốc lý thuyết tần suất = tần suất cao nhất / hạng. Dữ liệu thật bám đường đó một cách lỏng lẻo, không khít, và kho ở đây quá nhỏ để nói gì mạnh hơn thế. Điều rút ra được là hình dạng: đầu rất cao, đuôi rất dài và rất mỏng.
Vài điểm cần thành thật với nhau về công cụ trên:
- Kho này chỉ có vài trăm token, còn kho huấn luyện thật thì hàng tỉ. Trên kho thật, độ lệch mạnh hơn nhiều: vài chục nghìn từ đầu bảng thường phủ trên 95% số token. Ở đây bạn thấy đúng chiều của hiện tượng, còn độ mạnh thì bị thu nhỏ lại.
- Bộ đếm cắt theo khoảng trắng, nên với tiếng Việt mỗi âm tiết thành một token:
mô hìnhđược tính là hai chứ không phải một. Muốn đếm theo từ thật thì phải ghép âm tiết trước, và con số sẽ đổi. - Đuôi dài không phải là rác. Tên riêng, thuật ngữ, số liệu, những thứ mang nội dung nhất của một văn bản, phần lớn nằm ở đuôi. Cắt đuôi là cắt đúng chỗ mô hình cần phân biệt.
Đây chính là lý do lịch sử khiến mảnh từ thắng: thay vì chọn giữa từ vựng to và tỉ lệ OOV cao, bộ tách mảnh từ giữ một từ vựng cỡ vài chục nghìn mảnh, rồi ghép mảnh lại để biểu diễn cả cái đuôi dài. Đường cong độ phủ trong sim là bài toán mà mảnh từ sinh ra để né. Cách nó dựng từ vựng đó thì bạn đã tự tay bấm ở bài BPE học từ vựng như thế nào: số bước hợp nhất chính là núm chỉnh K của bài này, chỉ khác là đơn vị được giữ lại là mảnh chứ không phải từ nguyên.
Độ phủ theo token và độ phủ theo type là hai thước đo khác nhau của cùng một phép cắt từ vựng. Một từ vựng nhỏ trông rất ổn nếu bạn chỉ nhìn token, và trông rất tệ nếu bạn nhìn type. Khi ai đó khoe từ vựng của họ phủ được bao nhiêu phần trăm, câu hỏi đầu tiên phải là phủ theo token hay theo type.
- 1Với kho mặc định và K = 20, OOV theo token là 52,9% còn OOV theo type là 82,5%. Vì sao hai con số này chênh nhau nhiều đến vậy?
- 2Kéo K từ 20 lên 40 thì độ phủ token có thể tụt xuống không?
- 3Trên biểu đồ Zipf log-log, các điểm nằm gần một đường thẳng dốc xuống có nghĩa gì?