Vì sao các con số trong bài báo “gzip beats BERT” lại lệch nhau?
(kenschutte.com)- Hiệu năng của bộ phân loại kNN dựa trên gzip được chú ý trong bài báo “Low-Resource” Text Classification của Jiang et al. có khả năng không được tính theo độ chính xác kNN thông thường, mà theo cách gần với top-2 khi k=2
calc_acctrongexperiments.pycủa kho lưu trữ chính thức xử lý là đúng nếu trong các ứng viên hòa điểm có dù chỉ một nhãn đúng, nên chỉ cần một trong hai mẫu huấn luyện gần nhất đúng là được tính là thành công- Khi tính lại cột “Full” của 4 bộ dữ liệu đầu tiên, nhiều con số thay đổi; với KirundiNews, phương pháp gzip tụt từ hiệu năng cao nhất xuống thấp nhất
- Kết quả tái triển khai riêng cho thấy đầu ra của mã chính thức luôn giống
top2; nếu giải quyết hòa điểm ở k=2 bằng cách ưu tiên mẫu gần hơn, kết quả về thực chất giống k=1 - Tùy chọn
rand==Truedùngrandom.choiceđể phá hòa, nhưng có vẻ không được dùng trong kết quả của bài báo; SogouNews vẫn chưa được chạy do kích thước dữ liệu
Vấn đề tính độ chính xác lộ ra khi tái hiện kết quả bài báo
- Đối tượng là bài báo “Low-Resource” Text Classification: A Parameter-Free Classification Method with Compressors của Jiang et al.; bảng cho thấy phương pháp dựa trên
gzipđạt hiệu năng cao hơn nhiều phương pháp dựa trên mạng nơ-ron đã được chú ý trên Twitter - Trong quá trình tái hiện mã nguồn chính thức, đã xác định một điểm mà cách tính độ chính xác của bộ phân loại kNN hoạt động khác với cách thông thường
- Đặc biệt với k=2, thay vì độ chính xác kNN(k=2) chuẩn, nó gần với độ chính xác top-2, khiến hiệu năng của phương pháp trong bài báo có thể bị ước tính cao hơn
Vì sao hòa điểm là vấn đề trong kNN k=2
- Phương pháp của bài báo dùng bộ phân loại kNN, và theo Appendix C, k=2 được dùng trong mọi thí nghiệm
- Phân loại k=2 tìm 2 mẫu huấn luyện gần nhất cho mỗi mẫu kiểm thử, nên trạng thái nhãn khá đơn giản
- Nếu hai nhãn giống nhau, nhãn đó được dự đoán; kết quả rốt cuộc giống câu trả lời của k=1
- Nếu hai nhãn khác nhau, sẽ có hòa 1:1, nên cần một quy tắc phá hòa riêng, chẳng hạn ưu tiên mẫu gần hơn
- Nếu phá hòa ngẫu nhiên, trong một nửa các trường hợp hòa 1:1 sẽ chọn mẫu xa hơn, nên khó tốt hơn k=1
Cách calc_acc xử lý hòa điểm
- Điểm có vấn đề là phương thức
calc_acctrongexperiments.py - Luồng mã gom nhãn và số đếm của các mẫu top-k vào
sorted_pred_lab, nhóm theo từng nhãn, rồi sắp xếp theo số đếm - Khi duyệt các nhãn hòa với số đếm cao nhất, nếu bất kỳ nhãn nào trong đó trùng với nhãn kiểm thử thì
if_right = 1được đặt, và trường hợp đó được xử lý là đúng - Với k=2, nếu hai nhãn khác nhau mỗi nhãn nhận 1 phiếu, về cơ bản chỉ kiểm tra liệu một trong hai ứng viên có phải là đáp án đúng hay không
- Kết quả này tương tự độ chính xác top-k trong ImageNet, nhưng khác ở chỗ tại đây nó dựa trên k mẫu huấn luyện chứ không phải k nhãn được chọn
- Phương thức này nhận k tùy ý, nhưng không tính top-k cho mọi k; với k=2 xuất hiện tình huống đặc biệt là tất cả ứng viên đều được nhóm với số đếm tối đa bằng 1
calc_acccó cờrand, và khirand==Truethì dùngrandom.choiceđể phá hòa, nhưng có vẻ không được dùng trong kết quả bài báo
Thay đổi về độ chính xác sau khi tính lại
- Với cột “Full” của 4 bộ dữ liệu đầu tiên, các con số trong bài báo và số
knn2dđã sửa như sau
| Phân loại | KinyarwandaNews | KirundiNews | DengueFilipino | SwahiliNews |
|---|---|---|---|---|
| Bài báo | 0.891 | 0.905 | 0.998 | 0.927 |
knn2d đã sửa |
0.835 | 0.858 | 0.999 | 0.850 |
- Bộ dữ liệu thứ năm, SogouNews, chưa được chạy vì kích thước lớn
- Khác biệt này làm thay đổi đáng kể cách diễn giải thí nghiệm; với KirundiNews, phương pháp
gziptụt từ hiệu năng cao nhất xuống thấp nhất
Kết quả xác nhận bằng triển khai riêng
- Triển khai riêng dùng hai chiến lược phá hòa
r: chọn ngẫu nhiênd: giảm k cho đến khi hết hòa
- Kết quả tái triển khai như sau
| Cách | kinnews | kirnews | filipino | swahili | Mô tả |
|---|---|---|---|---|---|
table5 |
0.891 | 0.905 | 0.998 | 0.927 | Con số trong bảng của bài báo |
code |
0.891 | 0.906 | 1.000 | 0.927 | Dùng kho lưu trữ npc_gzip |
top2 |
0.891 | 0.906 | 1.000 | 0.927 | top-2 |
knn1r |
0.835 | 0.858 | 0.999 | 0.850 | kNN, k=1, hòa điểm ngẫu nhiên |
knn1d |
0.835 | 0.858 | 0.999 | 0.850 | kNN, k=1, giảm k khi hòa |
knn2r |
0.828 | 0.807 | 0.851 | 0.842 | kNN, k=2, hòa điểm ngẫu nhiên |
knn3r |
0.838 | 0.791 | 0.851 | 0.881 | kNN, k=3, hòa điểm ngẫu nhiên |
knn2d |
0.835 | 0.858 | 0.999 | 0.850 | kNN, k=2, giảm k khi hòa |
knn3d |
0.843 | 0.794 | 0.904 | 0.883 | kNN, k=3, giảm k khi hòa |
- Kết quả kiểm tra chéo cho thấy mã chính thức đã tính gì
table5gần vớicodetrong phạm vi 0.001 hoặc 0.002, nên có thể tái hiện các con số của bài báocodeluôn giốngtop2, tức kết quả mã chính thức trùng với kết quả top-2 của triển khai riêngknn1r == knn1d, và với k=1 không phát sinh hòa điểmknn2d == knn1d, và nếu phá hòa ở k=2 bằng mẫu đầu tiên thì kết quả trở nên giống k=1knn2r < knn2d, vì trong hòa 1:1 ở k=2, chọn ngẫu nhiên sẽ chọn mẫu xa hơn trong một nửa trường hợp
Những điểm còn cần xác nhận
- Bản tái triển khai mới với nhiều giá trị k hơn nằm tại gzip-knn
- Lý do DengueFilipino đạt mức rất cao như 1.0 trong một số trường hợp sẽ được bàn trong bài tiếp theo, Part 2
- Lý do
table5vàcodehơi khác nhau trong hai trường hợp vẫn là một vấn đề cần xác nhận
1 bình luận
Ý kiến trên Hacker News
Có lẽ sẽ khiến các tác giả thất vọng, nhưng tôi nghĩ đây là một phản biện rất tốt
Trong machine learning, kiểu sai lầm này thực sự rất dễ mắc phải, và điều tệ hơn là các lỗi phương pháp luận tinh vi thường không bộc lộ thành thất bại chí mạng như ở nhiều lĩnh vực kỹ thuật hay khoa học khác, mà chỉ xuất hiện dưới dạng thay đổi hiệu năng rất nhỏ
Ngay cả khi dữ liệu xấu lẫn vào tập huấn luyện hoặc thông tin về giá trị mục tiêu bị rò rỉ, hệ thống vẫn cứ chạy tạm được, chỉ là kết quả bị nhiễm bẩn đôi chút
Việc áp dụng các thuật toán nén hiện có vào machine learning, trái với kỳ vọng, cho cảm giác như một bữa trưa miễn phí quá mức. Nếu thuật toán nén thực sự có phép màu đặc biệt nào đó, thì người ta đã dùng thuật toán nén làm encoder thay vì dùng transformer như bộ nén rồi
Vì vậy tôi thường lập luận rằng xuất bản công khai là một hình thức phản biện đồng cấp tốt hơn so với hội nghị hay tạp chí. Phản biện đồng cấp là đồng nghiệp xem xét công trình của tôi, chứ cốt lõi không phải là những tiêu chí tùy tiện và đầy nhiễu mà hội nghị hay tạp chí đưa ra
Trong phần lớn lịch sử, mọi thứ đã vận hành như thế, và phản biện đồng cấp theo nghĩa hiện đại là một khái niệm khá mới, chỉ xuất hiện từ giữa thập niên 1970. Các tạp chí trước đây gần với vai trò phổ biến nghiên cứu hơn, tương tự như arxiv ngày nay
https://mitcommlab.mit.edu/broad/commkit/peer-review-a-histo...
Một lý do khác để ủng hộ việc loại bỏ vai trò của hội nghị và tạp chí là như vậy sẽ chủ động khuyến khích các công trình quan trọng như bài báo tái lập, bài báo về thất bại. Không cần bị trói buộc bởi tiêu chí “tính mới”, và thật ra hầu như mọi nghiên cứu đều mang tính gia tăng
“Xuất bản” là truyền đạt công trình của mình cho đồng nghiệp, để họ kiểm chứng hoặc bác bỏ kết quả
Tuy vậy, điểm tốt của hội nghị là giúp tập hợp con người và thúc đẩy hợp tác. Ở đây tôi đang phê phán việc dùng hội nghị và tạp chí như công cụ để phán định tính hợp lệ của nghiên cứu
Nếu hệ thống hội nghị chỉ đơn thuần là nơi mời gọi nghiên cứu và cộng đồng thì hoàn toàn không có vấn đề gì. Về lý thuyết, tạp chí cũng có điểm hay là có đối thoại giữa tác giả và phản biện, nhưng theo tôi điều này cũng có thể làm dễ dàng bằng arxiv + github hoặc OpenReview
Hiệu năng không cao nhưng chắc chắn là có tồn tại, và cũng cực kỳ dễ triển khai. Văn bản tương tự nhau có xu hướng nén tốt hơn, nên tôi từng thấy gzip được dùng để phát hiện đạo văn
Cũng có thể dùng tỷ lệ nén làm trọng số cho mô hình lò xo để trực quan hóa, và áp dụng cho cả metadata của giao tiếp mạng
Nhất là khi kết quả đó xác nhận những gì mình vốn đã tin
Thiếu một dấu chấm phẩy là lỗi hiện ra ngay
Nhưng ngay cả khi tính toán gradient sai ở một trong ba lớp thì đôi khi nó vẫn chạy được. Chỉ là kết quả trở nên kỳ quặc
Một thế giới có số bài báo khoa học giảm một nửa và mức độ cẩn trọng tăng gấp đôi sẽ tạo ra nhiều giá trị hơn rất nhiều, nhưng toàn bộ hệ thống hiện tại đã bị game hóa đến mức tuyệt vọng
Tôi là người viết bài blog này. Tôi khá chắc về những gì mình viết ở đây, nhưng nếu có điều gì tôi bỏ sót thì có lẽ chính các tác giả cần trực tiếp giải thích
Tôi vừa mở issue trên GitHub: https://github.com/bazingagin/npc_gzip/issues/3
Bản thân bài báo vẫn khá vững
Tuy nhiên, nhận xét rằng lựa chọn này có phần kỳ lạ là đúng. Như tôi đã nói trong bài báo và trên Twitter, kết quả thay đổi khi giá trị k thay đổi, và con số được báo cáo là kết quả tối đa có thể đạt được, nên nó biểu thị tình huống lý tưởng khi dự đoán luôn đúng
Tôi cũng dùng cùng chiến lược cho W2V và SentBERT. Nhưng điều đó không có nghĩa đây là độ chính xác top-2. Theo hiểu biết của tôi, độ chính xác top-2 nghĩa là nếu một trong 2 lớp dự đoán cao nhất là đúng thì sẽ được tính điểm
Nhưng như bạn đã chỉ ra, trong kNN với k=2 có trường hợp 2 láng giềng gần nhất cùng chỉ về một lớp, và khi đó nếu báo cáo độ chính xác top-2 thì sẽ bỏ lỡ một lớp ứng viên khác
Khi có thời gian để đăng phiên bản mới lên arxiv, tôi muốn thêm kết quả cho các chiến lược khác và các giá trị k khác. Chiến lược decrement mà blog nêu ra thực sự rất hay, và nếu bạn muốn thì tôi muốn thêm nó vào repository
Xin lỗi vì phản hồi ngắn và muộn. Tôi vẫn chưa kịp kiểm tra repository. Ngày mai tôi đang chuẩn bị cho việc phản biện bài báo, xong việc tôi sẽ trả lời issue và xử lý tiếp
Tôi tò mò không biết bạn đã thử tái lập bảng kết quả khác là Table 3 chưa
Nếu tôi hiểu đúng thì khi chỉ có 2 lớp, độ chính xác top-2 sẽ là 1, nhưng khi số lớp tăng lên thì trung bình khoảng cách giữa nó với độ chính xác “thông thường” sẽ dần thu hẹp. Vì vậy nếu dataset có nhiều lớp, kết quả ở Table 3 có lẽ sẽ không thay đổi quá lớn
Dù sao thì trên dataset 20-newsgroups, độ chính xác top-2 là 0.685 cũng khá ấn tượng đối với một phương pháp thậm chí còn không xem ký tự là ký tự[1]. Chưa cần nói tới những công cụ tốt mà giới nghiên cứu xử lý ngôn ngữ tự nhiên đã đổ công nhiều năm vào như token, n-gram hay embedding
[1] Theo hiểu biết của tôi, gzip chỉ xử lý chuỗi bit, mà chuỗi này không nhất thiết phải căn chỉnh theo ranh giới byte, tức là theo từ
Khi làm các thí nghiệm về độ liên quan trong tìm kiếm ở Shopify, tôi cũng mắc rất nhiều sai lầm nên rất đồng cảm với các tác giả. Tôi cũng có không ít lần công khai mắc lỗi đến mức xấu hổ
Vào giai đoạn cuối ở Shopify, tôi đã học được rằng khoa học tốt cần kỹ thuật phần mềm tốt. Vì rất dễ mắc lỗi ở quá nhiều điểm trong toàn bộ stack
Vì vậy, để có thể tin vào các con số và tái lập thí nghiệm của nhau, tôi đã dành rất nhiều thời gian để xây dựng phần mềm thí nghiệm nghiêm ngặt, có nhiều kiểm thử và chất lượng cao
Tôi cố tránh các phương pháp đánh giá dùng một lần; khi tạo ra phương pháp mới, tôi thêm nó vào bộ công cụ đánh giá rồi kiểm thử để hiểu chỉ số đó thực sự có ý nghĩa gì
Nghe thì có vẻ hiển nhiên, nhưng theo kinh nghiệm của tôi khi làm các thí nghiệm kiểu này, đáng tiếc là điều đó không phổ biến như mong muốn. Công ty muốn tốc độ, còn việc suy nghĩ sâu về mặt thống kê hay xây dựng công cụ nội bộ thì phần lớn không khớp với lợi ích của cấp trên
Thứ nhất, có thể tận dụng nhiều chuyên môn kỹ thuật phần mềm hơn; thứ hai, có động lực để bớt phóng đại các tuyên bố. Vì nếu nói là nó hoạt động, người ta sẽ kỳ vọng đưa nó vào môi trường vận hành thực tế
Tôi rất vui vì bài blog này đã được công bố
Tôi cũng làm rất nhiều dự án nhỏ kiểu này, nhưng ngay cả những việc như chỉ ra vấn đề của một bài báo cũng thường không bao giờ được chú ý. Thường chỉ phát ra một tiếng ngắn ngủi rồi kết thúc, bị chôn vùi trong ổ cứng
Vì thế, cảm ơn vì đã công bố nó ra như thế này
Sau khi dành cả một ngày cho kiểu công việc này, thường tôi không còn sức để thực sự viết một bài blog, nên thấy khá tiếc. Nhưng ít nhất thì viết một thread ngắn trên Twitter thường vẫn làm được
Tôi thực sự rất mừng khi thấy kết quả này. kNN + tác vụ phân loại + phân loại dựa trên độ tương tự văn bản thuần túy là một tổ hợp rất dễ tạo ra kết quả có lợi
Phản ứng khoái chí trước bài báo này đã hiểu sai điểm rằng thành phần ngôn ngữ tự nhiên mới là thứ quan trọng cốt lõi trong embedding. Các cụm từ dùng chung từ ngữ vừa dễ phân loại vừa dễ cho GZIP xử lý tốt, nên có thể dùng GZIP như một bộ phân loại thay thế
Điều kỳ diệu của BERT hay embedding nằm ở chỗ không cần phải chia sẻ cùng từ ngữ. Ví dụ, “what is my safe passcode?” khớp rất mạnh với “my lockbox pin is 1234”, nhưng không phải với “my jewelry is stored safely in the safe”
Điểm này cũng quan trọng trong LLM. Nhiều người dùng embedding cho độ tương tự văn bản, nhưng trên thực tế nên dùng mô hình SBERT được huấn luyện để câu hỏi và tài liệu chứa câu trả lời của nó có tương quan với nhau
Có thể xem toàn bộ rabbit hole tại https://www.sbert.net/
Bài trước: Should you use OpenAI's embeddings? Probably not, and here's why. https://iamnotarobot.substack.com/p/should-you-use-openais-e...
Thảo luận trên HN: https://news.ycombinator.com/item?id=35377935
Trong những điều kiện như vậy, đầu vào huấn luyện quá thưa thớt nên các mô hình nhiều tham số có thể khó học được embedding tốt
Trong thiết lập phân loại dữ liệu lớn truyền thống trong cùng miền, các phương pháp phi tham số như nén khó có khả năng đánh bại các biểu diễn đã được học
Không rõ vì sao các tác giả lại chọn kNN làm bộ phân loại. Nếu đã tạo ma trận khoảng cách thì họ có thể dùng đa chiều hóa tỷ lệ để biến ma trận thành các yếu tố, rồi dùng thuật toán cây như xgboost; khi đó có khả năng sẽ tận dụng được nhiều thông tin hơn và cho kết quả tốt hơn hẳn so với kNN
Họ cũng có thể dùng thuật toán nén PAQ tốt hơn nhiều so với các bộ nén họ LZ. Những lựa chọn này có thể đã cải thiện kết quả đáng kể và thậm chí dẫn tới kết luận ban đầu
Điểm hay của bài báo này là đã trừu tượng hóa thuật toán nén, nhờ đó khiến người ta nghĩ thêm về những gì còn có thể làm với nén trong mối quan hệ p(x) ~ K^(-|x|). Ở đây K là kích thước bảng chữ cái, |x| là độ dài của chuỗi x, giả định mã hóa tối ưu
Ví dụ, tôi chợt nghĩ rằng cũng có thể làm phân loại truyền thống bằng cách gom các yếu tố của từng phản hồi thành các tài liệu riêng, rồi theo cách của bài báo tìm tài liệu nén mẫu tiếp theo tốt nhất để quyết định lớp. Đây là một dạng phân loại có giám sát dùng thuật toán nén
Bộ nén càng gần với mã tối ưu của bộ dữ liệu đó thì sẽ càng hoạt động tốt
Cách dự đoán chuỗi tuần tự cũng đơn giản tương tự để triển khai
Thật là một bất ngờ thú vị
Có thể giải thích tại sao một thuật toán nén lại có thể đánh bại LLM không? Nghe giống như so sánh graffiti với việc nói năng hay hơn
Có vẻ câu trả lời nằm đâu đó, nhưng tôi không quen với AI nên hoàn toàn không hiểu
Vai trò của mô hình là dự đoán điều gì sẽ đến tiếp theo, còn vai trò của bộ mã hóa entropy là mã hóa sự khác biệt giữa dự đoán và giá trị thực sự tiếp theo sao cho các kết quả có xác suất cao dùng ít bit nhất có thể
Mô hình càng chính xác thì chênh lệch giữa thực tế và dự đoán càng nhỏ, số bit mà bộ mã hóa entropy cần cũng giảm, nên khả năng nén càng tốt
Các thuật toán nén đơn giản có những mô hình đơn giản kiểu như “nếu đã thấy cùng một byte 10 lần thì lần thứ 11 cũng có khả năng giống vậy”. Nhưng LLM cũng có thể được dùng làm mô hình, vì việc hoàn thành văn bản bằng từ có vẻ hợp lý nhất chính là điều LLM làm
Ở đây họ làm ngược lại. Thay vì dùng mô hình cho việc nén, họ dùng thuật toán nén như một mô hình bằng vài mẹo nhỏ. Cách hiểu là khi thuật toán nén mã hóa một kết quả bằng ít bit hơn, thì xem đó là kết quả có khả năng cao nhất
Các tác giả bài báo gốc cho thấy ở một số tác vụ, mô hình đơn giản có thể rút ra từ gzip đánh bại các LLM phức tạp hơn rất nhiều
Trong nén, các chuỗi từ có xác suất cao phải được gán mã ngắn hơn, nên có mối liên hệ trực tiếp. Một phương pháp nổi tiếng để tạo ra các mã như vậy từ xác suất là mã hóa Huffman
Điều này đúng cả với mô hình ngôn ngữ thống kê dùng tần suất từ lẫn khi dùng LLM để ước lượng xác suất. Mô hình ngôn ngữ càng tốt, tức perplexity càng thấp, thì kết quả nén càng ngắn
Ngược lại, cũng có thể nói rằng thuật toán nén ngầm định nghĩa một mô hình ngôn ngữ thông qua độ dài mã. Chẳng hạn, nó giả định rằng các chuỗi lặp lại có khả năng xuất hiện cao hơn nhiễu ngẫu nhiên
Nếu nén
ABCthì nó thành X byte. Sau đó nếu nénABCABCthì nó sẽ không thành 2X byte. Hai chuỗi được nối lại càng giống nhau thì số byte cần càng ítABCABDsẽ lớn hơnABCABC, nhưng nhỏ hơnABCXYZBERT theo tiêu chuẩn ngày nay là một LLM rất nhỏ, và ta cũng biết nó yếu hơn các mô hình quy mô hàng tỷ tham số mà chúng ta thường gặp hiện nay
https://mattmahoney.net/dc/rationale.html
Những cách như phát hiện từ khóa cụ thể đôi khi cũng có thể hoạt động khá tốt. Các đối tượng được nén tốt thường xuất hiện nhiều chuỗi con chung
Nếu điều này là thật, tôi muốn xem những người đã nói quá lên về bài báo đó giờ sẽ âm thầm xóa dấu vết của mình như thế nào
Tôi đang nhìn đặc biệt vào các influencer trên LinkedIn và Twitter
Nếu không phải sự thật thì tôi sẽ trông như một kẻ ngốc, nhưng tôi chỉ lướt qua bài viết
Gzip với vai trò bộ phân loại tốt đến mức đáng ngạc nhiên, và nên được dùng làm baseline cho mạng nơ-ron
Nhân tiện, có vẻ blog đã dừng lại ở năm 2022
Ngày bài viết đang hiện là 17 tháng 7 năm 2022