Túi từ và n-gram
Túi từ và n-gram
Máy học không đọc chữ, nó chỉ nhân ma trận. Vậy phải biến một đoạn văn thành dãy số bằng cách nào? Cách cũ nhất, và vẫn còn hữu dụng, là đếm.
Mọi mô hình đều cần đầu vào là số. Cách đơn giản nhất để biến văn bản thành số là lập một danh sách các từ xuất hiện trong toàn bộ kho văn bản, coi mỗi từ là một cột, rồi với từng tài liệu ta đếm xem mỗi cột xuất hiện bao nhiêu lần. Kết quả là một ma trận tài liệu × từ: mỗi hàng là một tài liệu đã thành vector. Cách biểu diễn này tên là túi từ, gọi vậy vì nó đúng nghĩa đổ hết các từ vào một cái túi rồi lắc lên, không còn nhớ từ nào đứng trước từ nào.
Mất thứ tự là một mất mát thật. Hai câu mèo đuổi chuột và chuột đuổi mèo cho ra hai vector giống hệt nhau, dù nghĩa ngược nhau hoàn toàn. Cách vá quen thuộc là n-gram: thay vì lấy từng từ một, ta lấy từng cụm n từ liên tiếp làm cột. Cụm hai từ gọi là bigram, cụm ba từ gọi là trigram. Hãy tự tay đổi bậc n bên dưới và nhìn cái giá phải trả.
| tài liệu | con | đen | trên | tấm | thảm | mèo | nằm | ngủ | chó | tổng |
|---|---|---|---|---|---|---|---|---|---|---|
| TL 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 7 |
| TL 2 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 7 |
| TL 3 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 7 |
nBa thứ đáng nhìn kỹ trong sim, và cả ba đều là con số chứ không phải lời hứa.
Túi từ vứt bỏ thứ tự, n-gram giữ lại thứ tự cục bộ. Bấm Đảo trật tự từ. Ba câu dùng đúng ba từ như nhau, chỉ khác cách sắp. Ở bậc 1 ma trận chỉ có 3 cột, cả ba hàng đều là 1, 1, 1, độ thưa bằng 0: túi từ không phân biệt nổi ba câu khác nghĩa. Đổi sang bậc 2, mỗi câu sinh ra cặp từ của riêng nó, ma trận rộng ra 5 cột, ba hàng tách hẳn nhau và độ thưa nhảy lên 60%. Nhưng hãy để ý phạm vi: bigram chỉ nhớ được quan hệ giữa hai từ đứng cạnh nhau. Chủ ngữ ở đầu câu và động từ ở cuối câu thì bậc n nhỏ vẫn chịu thua, còn tăng n lên cho đủ dài thì gặp ngay vấn đề tiếp theo.
Tăng bậc n là đổi thông tin lấy độ thưa. Với ba câu mặc định, bậc 1 cho 9 cột và 22,2% số ô bằng 0. Bậc 3 cho 10 cột nhưng tới 50% số ô bằng 0, vì mỗi cụm ba từ hầu như chỉ thuộc về đúng một tài liệu. Trên ba câu ngắn thì số cột chưa kịp phình, nhưng nguyên tắc thì thấy rõ ngay ở dải độ thưa theo từng bậc n dưới cùng: cột chung ít đi, cột riêng nhiều lên. Với kho văn bản thật, số bigram khả dĩ là bình phương cỡ từ vựng, số trigram là lập phương, nên ma trận vừa khổng lồ vừa gần như toàn số 0. Đó chính là lý do túi từ đơn thuần khó lên bậc cao, và là chỗ các vector nhúng dày sẽ thay thế nó.
Đếm số lần hay chỉ đánh dấu có mặt là hai câu hỏi khác nhau. Bấm Lặp từ trong một câu rồi gạt công tắc ở thanh công cụ. Ô của cột học ở tài liệu đầu tụt từ 3 xuống 1. Chế độ đếm hỏi từ này quan trọng cỡ nào trong tài liệu, chế độ nhị phân chỉ hỏi tài liệu có nhắc tới nó hay không. Khi văn bản dài ngắn lệch nhau nhiều, chế độ đếm dễ thiên vị tài liệu dài, và đó là động cơ để người ta chuẩn hóa độ dài rồi hạ trọng số các từ có mặt ở khắp nơi.
Vài điểm cần nhớ khi đọc một ma trận đếm:
- Bộ tách token là một phần của cách biểu diễn. Sim này quy về chữ thường, bỏ dấu câu, cắt theo khoảng trắng, nên mỗi âm tiết tiếng Việt là một token. Đổi quy ước tách là đổi toàn bộ các cột.
- Số cột phụ thuộc vào kho văn bản, không phụ thuộc vào một tài liệu. Thêm một tài liệu mới với từ lạ là cả ma trận rộng thêm, và mọi hàng cũ đều nhận thêm một số 0.
- Độ thưa không phải là lỗi, nó là bản chất. Ma trận đếm thật thường thưa trên 99%, nên người ta lưu ở dạng thưa chứ không lưu cả bảng.
Túi từ biến văn bản thành vector bằng cách đếm, đơn giản và giải thích được tới từng cột, nhưng đánh mất thứ tự từ. N-gram mua lại thứ tự trong một cửa sổ n từ, và trả bằng số cột nhiều lên cùng ma trận thưa hẳn ra. Cái giá đó tăng rất nhanh theo n, nên trong thực tế người ta hiếm khi đi quá bigram hay trigram, và khi cần thứ tự xa hơn thì chuyển hẳn sang cách biểu diễn khác.
- 1Hai câu "mèo đuổi chuột" và "chuột đuổi mèo" được biểu diễn bằng túi từ bậc 1. Hai vector kết quả thế nào?
- 2Giữ nguyên ba tài liệu, tăng bậc n từ 1 lên 3. Điều gì xảy ra với ma trận?
- 3Tài liệu "học học nữa học mãi" có chữ học ba lần. Ô ở cột "học" bằng bao nhiêu ở chế độ đếm số lần và ở chế độ chỉ đánh dấu có mặt?