ทำไมตัวเลขในบทความ “gzip beats BERT” ถึงคลาดเคลื่อน?
(kenschutte.com)- ประสิทธิภาพของ ตัวจำแนกแบบ kNN ที่ใช้ gzip ซึ่งได้รับความสนใจจากบทความ “Low-Resource” Text Classification ของ Jiang et al. อาจไม่ได้คำนวณเป็นความแม่นยำแบบ kNN ทั่วไป แต่เป็นวิธีที่ใกล้เคียงกับ top-2 เมื่อ k=2
calc_accในexperiments.pyของรีโพซิทอรีทางการปฏิบัติต่อกรณีเสมอว่า ถ้ามีป้ายกำกับคำตอบที่ถูกต้องอยู่ในผู้สมัครแม้เพียงหนึ่งรายการ ก็ถือว่าถูกต้อง ดังนั้นหากหนึ่งในสองตัวอย่างฝึกที่ใกล้ที่สุดถูกต้อง ก็จะนับว่าสำเร็จ- เมื่อลองคำนวณคอลัมน์ “Full” ของ 4 ชุดข้อมูลแรกใหม่ ตัวเลขหลายค่าจะเปลี่ยนไป และใน KirundiNews วิธีของ gzip ลดจากประสิทธิภาพดีที่สุดลงมาเป็นแย่ที่สุด
- ผลจากการ reimplement แยกต่างหากพบว่าเอาต์พุตของโค้ดทางการเท่ากับ
top2เสมอ และถ้าแก้กรณีเสมอของ k=2 โดยให้ตัวอย่างที่ใกล้กว่าเป็นหลัก ผลลัพธ์ก็แทบจะเท่ากับ k=1 - ออปชัน
rand==Trueใช้random.choiceเพื่อแก้กรณีเสมอ แต่ดูเหมือนว่าไม่ได้ถูกใช้ในผลลัพธ์ของบทความ ส่วน SogouNews ยังไม่ได้รันเพราะขนาดข้อมูลใหญ่
ปัญหาการคำนวณความแม่นยำที่พบระหว่างทำซ้ำผลลัพธ์ของบทความ
- เป้าหมายคือบทความ “Low-Resource” Text Classification: A Parameter-Free Classification Method with Compressors ของ Jiang et al. ซึ่งตารางที่แสดงว่าวิธีที่ใช้
gzipทำผลงานได้ดีกว่าวิธีที่ใช้โครงข่ายประสาทหลายแบบได้รับความสนใจบน Twitter - ระหว่างทำซ้ำผลลัพธ์จาก ซอร์สโค้ด ทางการ พบจุดที่วิธีคำนวณ ความแม่นยำ ของตัวจำแนก kNN ทำงานต่างจากวิธีทั่วไป
- โดยเฉพาะเมื่อ k=2 มันใกล้เคียงกับ ความแม่นยำแบบ top-2 มากกว่าจะเป็นความแม่นยำของ kNN(k=2) ตามปกติ จึงอาจทำให้ประสิทธิภาพของวิธีในบทความถูกประเมินสูงเกินจริง
ทำไมกรณีเสมอใน kNN ที่ k=2 จึงเป็นปัญหา
- วิธีในบทความใช้ kNN classifier และตาม Appendix C ทุกการทดลองใช้ k=2
- การจำแนกแบบ k=2 จะหาตัวอย่างฝึกที่ใกล้กับตัวอย่างทดสอบที่สุด 2 รายการ ทำให้สถานะของป้ายกำกับค่อนข้างเรียบง่าย
- ถ้าป้ายกำกับทั้งสองเหมือนกัน ก็ทำนายเป็นป้ายกำกับนั้น และผลลัพธ์จะเหมือนกับ k=1
- ถ้าป้ายกำกับทั้งสองต่างกัน จะเกิดการเสมอ 1:1 จึงต้องมีกฎแก้เสมอเพิ่มเติม เช่น ให้ตัวอย่างที่ใกล้กว่าเป็นหลัก
- หากแก้เสมอแบบสุ่ม ในครึ่งหนึ่งของกรณีเสมอ 1:1 จะเลือกตัวอย่างที่ไกลกว่า จึงยากที่จะทำได้ดีกว่า k=1
calc_acc จัดการกรณีเสมออย่างไร
- จุดที่เป็นปัญหาคือเมธอด
calc_accในexperiments.py - ลำดับการทำงานของโค้ดคือรวบรวมป้ายกำกับและจำนวนของตัวอย่าง top-k ไว้ใน
sorted_pred_labจากนั้นจัดกลุ่มตามป้ายกำกับ แล้วเรียงตามจำนวน - เมื่อตรวจป้ายกำกับที่เสมอกับจำนวนสูงสุด หากมีรายการใดรายการหนึ่งตรงกับป้ายกำกับทดสอบ จะตั้งค่า
if_right = 1และ ถือว่าตอบถูก - เมื่อ k=2 และป้ายกำกับสองตัวต่างกัน โดยแต่ละตัวได้ 1 คะแนน ก็เท่ากับตรวจเพียงว่าหนึ่งในสองผู้สมัครเป็นคำตอบที่ถูกต้องหรือไม่
- ผลลัพธ์นี้คล้ายกับความแม่นยำแบบ top-k ที่พูดถึงใน ImageNet แต่ต่างกันตรงที่ที่นี่อิงจาก ตัวอย่างฝึก k รายการ ไม่ใช่ป้ายกำกับ k รายการที่ถูกเลือก
- เมธอดนี้รับค่า k ใดก็ได้ แต่ไม่ได้คำนวณ top-k สำหรับทุกค่า k และเมื่อ k=2 จะเกิดสถานการณ์พิเศษที่ผู้สมัครทั้งหมดถูกจัดเป็นกลุ่มที่มีจำนวนสูงสุด 1
calc_accมีแฟล็กrandและเมื่อrand==Trueจะใช้random.choiceเพื่อแก้เสมอ แต่ดูเหมือนว่าไม่ได้ใช้ในผลลัพธ์ของบทความ
การเปลี่ยนแปลงของความแม่นยำหลังคำนวณใหม่
- ตัวเลขในบทความและตัวเลข
knn2dที่แก้ไขแล้วสำหรับคอลัมน์ “Full” ของ 4 ชุดข้อมูลแรกเป็นดังนี้
| ประเภท | KinyarwandaNews | KirundiNews | DengueFilipino | SwahiliNews |
|---|---|---|---|---|
| บทความ | 0.891 | 0.905 | 0.998 | 0.927 |
knn2d ที่แก้ไข |
0.835 | 0.858 | 0.999 | 0.850 |
- ชุดข้อมูลที่ห้า SogouNews ยังไม่ได้รันเพราะมีขนาดใหญ่
- ความแตกต่างนี้เปลี่ยนการตีความการทดลองไปอย่างมาก และใน KirundiNews วิธี
gzipลดจากประสิทธิภาพดีที่สุดลงมาเป็นแย่ที่สุด
ผลลัพธ์ที่ยืนยันด้วยการ implement แยกต่างหาก
- การ implement แยกต่างหากใช้กลยุทธ์แก้เสมอ 2 แบบ
r: เลือกแบบสุ่มd: ลดค่า k ลงจนกว่าจะไม่เสมอ
- ผลจากการ reimplement เป็นดังนี้
| วิธี | kinnews | kirnews | filipino | swahili | คำอธิบาย |
|---|---|---|---|---|---|
table5 |
0.891 | 0.905 | 0.998 | 0.927 | ตัวเลขในตารางของบทความ |
code |
0.891 | 0.906 | 1.000 | 0.927 | ใช้รีโพซิทอรี 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, แก้เสมอแบบสุ่ม |
knn1d |
0.835 | 0.858 | 0.999 | 0.850 | kNN, k=1, ลด k เมื่อเสมอ |
knn2r |
0.828 | 0.807 | 0.851 | 0.842 | kNN, k=2, แก้เสมอแบบสุ่ม |
knn3r |
0.838 | 0.791 | 0.851 | 0.881 | kNN, k=3, แก้เสมอแบบสุ่ม |
knn2d |
0.835 | 0.858 | 0.999 | 0.850 | kNN, k=2, ลด k เมื่อเสมอ |
knn3d |
0.843 | 0.794 | 0.904 | 0.883 | kNN, k=3, ลด k เมื่อเสมอ |
- ผลการตรวจสอบแสดงให้เห็นว่าโค้ดทางการคำนวณอะไร
table5ใกล้เคียงกับcodeภายใน 0.001 หรือ 0.002 จึงสามารถทำซ้ำตัวเลขในบทความได้codeเท่ากับtop2เสมอ แสดงว่าผลลัพธ์จากโค้ดทางการตรงกับผลลัพธ์ top-2 ที่ implement แยกต่างหากknn1r == knn1dและเมื่อ k=1 จะไม่เกิดกรณีเสมอknn2d == knn1dและเมื่อ k=2 หากแก้เสมอด้วยตัวอย่างแรก ผลลัพธ์จะเท่ากับ k=1knn2r < knn2dและในการเสมอ 1:1 ของ k=2 การเลือกแบบสุ่มจะเลือกตัวอย่างที่ไกลกว่าในครึ่งหนึ่งของกรณี
ประเด็นที่ยังต้องตรวจสอบ
- การ reimplement ใหม่ที่รวมค่า k มากขึ้นอยู่ที่ gzip-knn
- เหตุผลที่ DengueFilipino สูงมาก เช่น 1.0 ในบางกรณี จะกล่าวถึงในบทความต่อเนื่อง Part 2
- เหตุผลที่
table5กับcodeต่างกันเล็กน้อยในสองกรณียังเป็นประเด็นที่ต้องตรวจสอบต่อไป
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
อาจน่าผิดหวังสำหรับผู้เขียน แต่ผมมองว่านี่เป็น การโต้แย้งหักล้าง ที่ยอดเยี่ยม
ในแมชชีนเลิร์นนิง การทำพลาดแบบนี้เกิดขึ้นได้ง่ายมาก และที่แย่กว่านั้นคือข้อผิดพลาดเชิงวิธีวิทยาแบบละเอียดอ่อนมักไม่ปรากฏเป็นความล้มเหลวร้ายแรงเหมือนในสาขาวิศวกรรมหรือวิทยาศาสตร์อื่น ๆ แต่จะแสดงออกเป็นการเปลี่ยนแปลงประสิทธิภาพแบบละเอียดอ่อน
ต่อให้ข้อมูลไม่ดีปะปนเข้าไปในชุดฝึก หรือข้อมูลของค่าเป้าหมายรั่วไหลเข้าไป ระบบก็ยังพอทำงานได้ ผลลัพธ์แค่ปนเปื้อนเล็กน้อย
การนำ อัลกอริทึมบีบอัด ที่มีอยู่มาใช้กับแมชชีนเลิร์นนิงนั้น รู้สึกเหมือนเป็นมื้อกลางวันฟรีเกินไป ไม่เหมือนที่หวังไว้ ถ้าอัลกอริทึมบีบอัดมีเวทมนตร์พิเศษจริง เราคงใช้อัลกอริทึมบีบอัดเป็นเอนโค้ดเดอร์ แทนที่จะใช้ทรานส์ฟอร์เมอร์เป็นตัวบีบอัด
ดังนั้นจึงมักมีการโต้แย้งว่า การเผยแพร่แบบเปิดเป็นรูปแบบ peer review ที่ดีกว่าการประชุมวิชาการหรือวารสาร Peer review คือการที่เพื่อนร่วมวงการตรวจงานของเรา ไม่ใช่เรื่องเกณฑ์ที่ตามอำเภอใจและมี noise สูงซึ่งการประชุมหรือวารสารยกขึ้นมาเป็นหลัก
ตลอดช่วงเวลาส่วนใหญ่ของประวัติศาสตร์ ระบบก็ทำงานแบบนี้ และ peer review ในความหมายสมัยใหม่เป็นแนวคิดที่ค่อนข้างใหม่จากช่วงกลางทศวรรษ 1970 วารสารในอดีตมีภารกิจใกล้เคียงกับการเผยแพร่งานวิจัยแบบที่ arxiv ทำในปัจจุบันมากกว่า
https://mitcommlab.mit.edu/broad/commkit/peer-review-a-histo...
อีกเหตุผลหนึ่งที่สนับสนุนให้เลิกใช้การประชุมและวารสาร คือการทำเช่นนั้นจะช่วยส่งเสริมงานสำคัญอย่างบทความทำซ้ำผล และบทความรายงานความล้มเหลวได้อย่างจริงจัง ไม่ต้องถูกผูกไว้กับเกณฑ์เรื่อง “ความใหม่” และในความเป็นจริง งานวิจัยแทบทั้งหมดก็เป็นการต่อยอดทีละขั้น
“การตีพิมพ์” คือการส่งต่องานของเราไปให้เพื่อนร่วมวงการ และให้พวกเขาตรวจสอบหรือหักล้างผลลัพธ์
อย่างไรก็ตาม ข้อดีของการประชุมคือการพาผู้คนมารวมกันและส่งเสริมความร่วมมือ สิ่งที่พูดถึงตรงนี้คือการวิจารณ์การใช้การประชุมและวารสารเป็นเครื่องมือตัดสินความถูกต้องของงานวิจัย
ถ้าระบบการประชุมเป็นเพียงพื้นที่เชิญชวนงานวิจัยและชุมชน ก็ไม่มีปัญหาเลย วารสารเองในเชิงทฤษฎีก็ดีตรงที่มีบทสนทนาระหว่างผู้เขียนกับผู้รีวิว แต่ผมมองว่าสิ่งนี้ทำได้ง่ายด้วย arxiv + github หรือ OpenReview เช่นกัน
ประสิทธิภาพไม่ดีนัก แต่มีอยู่จริงและเผยแพร่ได้ง่ายมาก ข้อความที่คล้ายกันมักบีบอัดได้ดีกว่า ผมเคยเห็นการใช้ gzip เพื่อตรวจจับการลอกเลียน
ยังสามารถใช้สัดส่วนการบีบอัดเป็นน้ำหนักของโมเดลสปริงเพื่อทำ visualization ได้ และประยุกต์กับ metadata ของการสื่อสารเครือข่ายได้ด้วย
โดยเฉพาะเมื่อผลลัพธ์นั้นยืนยันความคิดเดิม
ถ้าลืมเซมิโคลอนไปตัวเดียว ก็เกิดข้อผิดพลาดทันที
แต่ถ้าคำนวณ gradient ของหนึ่งชั้นจากสามชั้นผิด บางครั้งระบบก็ยังรันได้ เพียงแต่ผลลัพธ์จะแปลกไป
โลกที่มีบทความวิทยาศาสตร์ลดลงครึ่งหนึ่งและมีความรอบคอบเพิ่มขึ้นสองเท่าคงสร้างคุณค่าได้มากกว่านี้มาก แต่ทั้งระบบถูกทำให้เป็นเกมอย่างสิ้นหวัง
ผมคือคนเขียนบล็อกโพสต์นี้ ผมค่อนข้างมั่นใจในสิ่งที่เขียนไว้ตรงนี้ แต่ถ้ามีอะไรที่ผมพลาดไป ผู้เขียนอาจต้องมาอธิบายเอง
ผมเพิ่งเปิด issue บน GitHub: https://github.com/bazingagin/npc_gzip/issues/3
ตัวบทความเองยังถือว่าแข็งแรงอยู่
แต่ก็จริงที่ว่าการเลือกแบบนี้ค่อนข้างแปลก อย่างที่พูดไว้ในบทความและบน Twitter เมื่อค่า k ต่างกัน ผลลัพธ์ก็เปลี่ยนไป และสิ่งที่รายงานคือผลลัพธ์สูงสุดที่ทำได้ จึงหมายถึงสถานการณ์อุดมคติที่การทำนายถูกต้องเสมอ
ผมใช้กลยุทธ์เดียวกันกับ W2V และ SentBERT ด้วย อย่างไรก็ตาม นี่ไม่ได้หมายความว่าเป็นความแม่นยำแบบ top-2 เท่าที่ผมทราบ top-2 accuracy คือการให้คะแนนเมื่อหนึ่งใน 2 คลาสอันดับบนสุดที่ทำนายออกมาถูกต้อง
แต่ตามที่ชี้ไว้ ใน kNN เมื่อ k=2 มีกรณีที่เพื่อนบ้านใกล้ที่สุด 2 ตัวชี้ไปยังคลาสเดียวกัน และถ้ารายงาน top-2 accuracy ในกรณีนี้ ก็จะพลาดตัวเลือกคลาสอื่นไปหนึ่งคลาส
ถ้ามีเวลาและได้อัปโหลดเวอร์ชันใหม่ขึ้น arxiv ผมอยากเพิ่มผลลัพธ์สำหรับกลยุทธ์อื่นและค่า k อื่น ๆ ด้วย กลยุทธ์ decrement ที่พูดถึงในบล็อกนั้นดีมากจริง ๆ และถ้าต้องการ ผมก็อยากเพิ่มเข้าไปในรีโป
ขอโทษที่ตอบสั้นและช้า ผมยังไม่ได้ตรวจสอบรีโป ตอนนี้กำลังเตรียมการรีวิวบทความวันพรุ่งนี้ พอเสร็จแล้วจะไปตอบและแก้ issue
อยากทราบว่าได้ลองทำซ้ำผลของตารางผลลัพธ์อื่นอย่าง Table 3 ด้วยหรือไม่
ถ้าผมเข้าใจถูกต้อง เมื่อมีเพียง 2 คลาส top-2 accuracy จะเป็น 1 แต่เมื่อจำนวนคลาสเพิ่มขึ้น ความต่างจากความแม่นยำ “ปกติ” โดยเฉลี่ยจะค่อย ๆ ลดลง ดังนั้นถ้าชุดข้อมูลมีหลายคลาส ผลของ Table 3 ก็คงไม่เปลี่ยนไปมากขนาดนั้น
อย่างไรก็ตาม top-2 accuracy 0.685 บนชุดข้อมูล 20-newsgroups นั้นค่อนข้างน่าประทับใจสำหรับวิธีที่ไม่แม้แต่จะมองอักขระเป็นอักขระ[1] ยังไม่ต้องพูดถึงเครื่องมือดี ๆ ที่นักวิจัย NLP ทุ่มเทกันมาหลายปี เช่น token, n-gram และ embedding
[1] เท่าที่ผมเข้าใจ gzip จัดการแค่ลำดับบิต ซึ่งไม่ได้จำเป็นต้อง align กับคำ หรือก็คือขอบเขตของไบต์
ตอนทำการทดลองเรื่องความเกี่ยวข้องของการค้นหาที่ Shopify ก็ทำพลาดไปเยอะ และเข้าใจความรู้สึกของผู้เขียนดี ผมเองก็มีความผิดพลาดที่ทำให้อับอายต่อสาธารณะอยู่พอสมควร
ช่วงท้าย ๆ ที่ Shopify ผมได้เรียนรู้ว่า วิทยาศาสตร์ที่ดีต้องมีวิศวกรรมซอฟต์แวร์ที่ดี เพราะมีจุดในสแต็กมากเกินไปที่ทำพลาดได้ง่าย
ดังนั้นเพื่อให้เชื่อถือกับตัวเลขและทำซ้ำการทดลองของกันและกันได้ เราจึงใช้เวลาไปมากกับการสร้างซอฟต์แวร์สำหรับการทดลองที่เข้มงวด มีการทดสอบมาก และมีคุณภาพสูง
เราพยายามหลีกเลี่ยงวิธีประเมินแบบใช้ครั้งเดียวแล้วทิ้ง และเมื่อสร้างวิธีใหม่ขึ้นมา ก็จะเพิ่มเข้าไปในชุดเครื่องมือประเมิน แล้วทดสอบเพื่อทำความเข้าใจว่าตัวชี้วัดนั้นหมายถึงอะไร
ฟังดูเหมือนเป็นเรื่องธรรมดา แต่จากประสบการณ์ที่ผมเคยทำการทดลองแบบนี้มา น่าเสียดายที่มันไม่ได้พบได้บ่อยเท่าที่หวัง บริษัทต้องการความเร็ว และการคิดเชิงสถิติอย่างลึกซึ้งหรือการสร้างเครื่องมือภายใน ส่วนใหญ่ไม่ค่อยสอดคล้องกับผลประโยชน์ของผู้บริหารระดับบน
อย่างแรกคือสามารถใช้ ความเชี่ยวชาญด้านวิศวกรรมซอฟต์แวร์ ได้มากกว่า และอย่างที่สองคือมีแรงจูงใจให้กล่าวอ้างเกินจริงน้อยลง เพราะถ้าบอกว่ามันทำงานได้ ก็จะถูกคาดหวังให้นำไปใส่ในสภาพแวดล้อมปฏิบัติการจริง
ดีใจที่บล็อกโพสต์นี้ถูกเผยแพร่ออกมา
ผมเองก็ทำโปรเจกต์เล็ก ๆ แบบนี้เยอะมาก และแม้แต่งานแบบนี้ที่แสดงปัญหาในงานวิจัยก็มักไม่ได้เห็นแสงวัน โดยปกติก็แค่ส่งเสียงอยู่ครู่หนึ่ง แล้วจบลงด้วยการถูกฝังไว้ในฮาร์ดดิสก์
เพราะงั้นขอบคุณที่เอามันออกมาให้ดู
หลังจากใช้เวลาหนึ่งวันกับงานแบบนี้แล้ว ปกติก็ไม่มีแรงพอจะเขียนบล็อกจริง ๆ เลยรู้สึกเสียดาย แต่โดยทั่วไปยังพอเขียนเธรด Twitter สั้น ๆ ได้
ดีใจมากที่ได้เห็นผลลัพธ์นี้ kNN + งานจำแนกประเภท + การจำแนกจากความคล้ายคลึงของข้อความล้วน ๆ เป็นชุดผสมที่ผลลัพธ์มักจะเอนเอียงไปในทางได้เปรียบได้ง่าย
ปฏิกิริยาที่สะใจใส่บทความนี้เข้าใจผิดในจุดที่ว่าองค์ประกอบภาษาธรรมชาติมีความสำคัญอย่างยิ่งใน embedding วลีที่ใช้คำร่วมกันมักจำแนกได้ดีและ GZIP ก็ทำได้ดีด้วย ดังนั้นจึงใช้ GZIP เป็นตัวจำแนกทดแทนได้
ความมหัศจรรย์ของ BERT หรือ embedding อยู่ตรงที่ไม่จำเป็นต้องใช้คำร่วมกันก็ได้ ตัวอย่างเช่น “what is my safe passcode?” จะจับคู่ได้แน่นกับ “my lockbox pin is 1234” แต่ไม่ใช่กับ “my jewelry is stored safely in the safe”
เรื่องนี้สำคัญใน LLM ด้วย หลายคนใช้ embedding สำหรับความคล้ายคลึงของข้อความ แต่จริง ๆ แล้วควรใช้ โมเดล SBERT ที่ถูกฝึกให้คำถามสัมพันธ์กับเอกสารที่มีคำตอบของคำถามนั้น
โพรงกระต่ายทั้งหมดดูได้ที่ https://www.sbert.net/
บทความก่อนหน้า: Should you use OpenAI's embeddings? Probably not, and here's why. https://iamnotarobot.substack.com/p/should-you-use-openais-e...
การถกเถียงบน HN: https://news.ycombinator.com/item?id=35377935
ภายใต้เงื่อนไขแบบนี้ อินพุตสำหรับการฝึกมีความเบาบางเกินไป จนโมเดลที่มีพารามิเตอร์จำนวนมากอาจเรียนรู้ embedding ที่ดีได้ยาก
ในการตั้งค่าการจำแนกข้อมูลขนาดใหญ่ภายในโดเมนแบบดั้งเดิม วิธีไม่อิงพารามิเตอร์ อย่างการบีบอัดไม่มีทางมีโอกาสชนะ representation ที่เรียนรู้มาได้
ยังไม่ชัดเจนว่าทำไมผู้เขียนถึงเลือก kNN เป็นตัวจำแนก ถ้าสร้างเมทริกซ์ระยะทางแล้ว ก็สามารถใช้ multidimensional scaling แปลงเมทริกซ์ให้เป็นแฟกเตอร์ แล้วใช้ tree algorithm อย่าง xgboost ได้ และแบบนั้นก็น่าจะใช้ข้อมูลได้มากกว่า kNN และให้ผลลัพธ์ดีกว่ามาก
ยังสามารถใช้อัลกอริทึมบีบอัด PAQ ซึ่งดีกว่า compressor ตระกูล LZ มากได้ด้วย ตัวเลือกเหล่านี้อาจปรับปรุงผลลัพธ์ได้มากจนไปถึงข้อสรุปดั้งเดิมก็ได้
สิ่งที่ผมชอบในบทความนี้คือการทำให้อัลกอริทึมบีบอัดเป็นนามธรรม และด้วยเหตุนี้จึงทำให้คิดต่อได้ว่าเราจะใช้การบีบอัดทำอะไรได้อีกจากความสัมพันธ์ p(x) ~ K^(-|x|) โดยที่ K คือขนาดของอัลฟาเบต, |x| คือความยาวของสตริง x และสมมติให้เป็นการเข้ารหัสที่เหมาะที่สุด
ตัวอย่างเช่น ผมนึกได้ว่าอาจทำการจำแนกแบบดั้งเดิมได้ด้วยการรวมแฟกเตอร์ของแต่ละคำตอบเป็นเอกสารแยกกัน แล้วหาว่าเอกสารใดบีบอัดตัวอย่างถัดไปได้ดีที่สุดในแบบเดียวกับบทความ จากนั้นใช้กำหนดคลาส เป็น การจำแนกแบบมีผู้สอน ชนิดหนึ่งที่ใช้อัลกอริทึมบีบอัด
ยิ่ง compressor ใกล้เคียงกับรหัสที่เหมาะที่สุดสำหรับชุดข้อมูลนั้นมากเท่าไร ก็น่าจะทำงานได้ดีขึ้นเท่านั้น
วิธีพยากรณ์ลำดับก็ implement ได้ง่ายเช่นเดียวกัน
เป็นเรื่องน่าประหลาดใจในทางที่ดี
ช่วยอธิบายได้ไหมว่าอัลกอริทึมบีบอัดจะเอาชนะ LLM ได้อย่างไร? ฟังเหมือนเอาม้าไปเทียบกับกราฟฟิตี้เพื่อบอกว่าอะไรดีกว่ากัน
คิดว่าคำตอบน่าจะอยู่ที่ไหนสักแห่ง แต่ไม่คุ้นกับ AI เลยไม่เข้าใจเอาเสียเลย
บทบาทของโมเดลคือการทำนายสิ่งที่จะตามมา ส่วนบทบาทของตัวเข้ารหัสเอนโทรปีคือเข้ารหัสความแตกต่างระหว่างค่าที่ทำนายกับค่าถัดไปจริง โดยทำให้ผลลัพธ์ที่มีความเป็นไปได้สูงใช้บิตให้น้อยที่สุด
ยิ่งโมเดลแม่นยำ ความต่างระหว่างความจริงกับการทำนายก็ยิ่งเล็กลง และจำนวนบิตที่ตัวเข้ารหัสเอนโทรปีต้องใช้ก็ลดลง ทำให้บีบอัดได้ดีขึ้น
อัลกอริทึมบีบอัดแบบง่ายมีโมเดลง่าย ๆ เช่น “ถ้าเห็นไบต์เดียวกัน 10 ครั้ง ครั้งที่ 11 ก็น่าจะเหมือนกันด้วย” แต่ LLM ก็ใช้เป็นโมเดลได้เหมือนกัน เพราะสิ่งที่ LLM ทำคือเติมข้อความให้สมบูรณ์ด้วยคำที่น่าจะเป็นไปได้ที่สุด
ในกรณีนี้ทำกลับกัน แทนที่จะใช้โมเดลในการบีบอัด ก็ใช้เทคนิคบางอย่างทำให้อัลกอริทึมบีบอัดทำหน้าที่เหมือนโมเดล กล่าวคือเมื่ออัลกอริทึมบีบอัดเข้ารหัสผลลัพธ์ได้ด้วยบิตน้อยกว่า ก็ถือว่าผลลัพธ์นั้นมีความเป็นไปได้สูงกว่า
ผู้เขียนบทความต้นฉบับแสดงให้เห็นว่า ในบางงาน โมเดลง่าย ๆ ที่ดึงออกมาจาก gzip เอาชนะ LLM ที่ซับซ้อนกว่ามากได้
ในการบีบอัด เราต้องกำหนดโค้ดที่สั้นกว่าให้กับลำดับคำที่มีความน่าจะเป็นสูงกว่า จึงมีความสัมพันธ์กันโดยตรง วิธีที่รู้จักกันดีในการสร้างโค้ดแบบนี้จากความน่าจะเป็นคือ การเข้ารหัส Huffman
หลักการนี้ใช้ได้ไม่ว่าจะเป็นโมเดลภาษาทางสถิติที่ใช้ความถี่คำ หรือใช้ LLM ในการประมาณความน่าจะเป็น ยิ่งโมเดลภาษาดี หรืออีกนัยหนึ่งคือมี perplexity ต่ำ ผลลัพธ์การบีบอัดก็ยิ่งสั้นลง
ในทางกลับกัน ก็พูดได้ว่าอัลกอริทึมบีบอัดกำหนดโมเดลภาษาโดยนัยผ่านความยาวของโค้ด เช่น ถือว่าสตริงที่ซ้ำกันมีความเป็นไปได้สูงกว่า noise แบบสุ่ม
ถ้าบีบอัด
ABCจะได้ X ไบต์ จากนั้นถ้าบีบอัดABCABCต่อกัน ก็จะไม่ได้กลายเป็น 2X ไบต์ ยิ่งสตริงสองชุดที่นำมาต่อกันคล้ายกันเท่าไร จำนวนไบต์ที่ต้องใช้ก็ยิ่งน้อยลงABCABDน่าจะใหญ่กว่าABCABCแต่เล็กกว่าABCXYZBERT เป็น LLM ที่เล็กมากตามมาตรฐานปัจจุบัน และเราก็รู้ว่าประสิทธิภาพอ่อนกว่ารุ่นระดับหลายพันล้านพารามิเตอร์ที่เราเห็นกันมากในช่วงนี้
https://mattmahoney.net/dc/rationale.html
วิธีอย่างการตรวจจับคำเฉพาะก็อาจทำได้ค่อนข้างดีในบางกรณี สิ่งที่บีบอัดได้ดีมักมีสตริงย่อยร่วมกันปรากฏบ่อย
ถ้าเรื่องนี้จริง ก็อยากเห็นว่าคนที่เคยพูดคำใหญ่คำโตเกี่ยวกับบทความนั้นจะค่อย ๆ ลบหลักฐานเงียบ ๆ อย่างไร
โดยเฉพาะพวกอินฟลูเอนเซอร์บน LinkedIn กับ Twitter
ถ้าไม่จริงผมก็คงดูโง่เอง แต่ผมแค่อ่านบทความแบบผ่าน ๆ
Gzip ในฐานะตัวจำแนกประเภท ดีจนน่าประหลาดใจ และควรถูกใช้เป็น baseline ของโครงข่ายประสาท
อ้างอิง: ดูเหมือนบล็อกจะหยุดอยู่ที่ปี 2022
วันที่ของบทความระบุเป็น 17 กรกฎาคม 2022