1 คะแนน โดย GN⁺ 2023-07-18 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ประสิทธิภาพของ ตัวจำแนกแบบ 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=1
    • knn2r < knn2d และในการเสมอ 1:1 ของ k=2 การเลือกแบบสุ่มจะเลือกตัวอย่างที่ไกลกว่าในครึ่งหนึ่งของกรณี

ประเด็นที่ยังต้องตรวจสอบ

  • การ reimplement ใหม่ที่รวมค่า k มากขึ้นอยู่ที่ gzip-knn
  • เหตุผลที่ DengueFilipino สูงมาก เช่น 1.0 ในบางกรณี จะกล่าวถึงในบทความต่อเนื่อง Part 2
  • เหตุผลที่ table5 กับ code ต่างกันเล็กน้อยในสองกรณียังเป็นประเด็นที่ต้องตรวจสอบต่อไป

1 ความคิดเห็น

 
GN⁺ 2023-07-18
ความคิดเห็นจาก Hacker News
  • อาจน่าผิดหวังสำหรับผู้เขียน แต่ผมมองว่านี่เป็น การโต้แย้งหักล้าง ที่ยอดเยี่ยม
    ในแมชชีนเลิร์นนิง การทำพลาดแบบนี้เกิดขึ้นได้ง่ายมาก และที่แย่กว่านั้นคือข้อผิดพลาดเชิงวิธีวิทยาแบบละเอียดอ่อนมักไม่ปรากฏเป็นความล้มเหลวร้ายแรงเหมือนในสาขาวิศวกรรมหรือวิทยาศาสตร์อื่น ๆ แต่จะแสดงออกเป็นการเปลี่ยนแปลงประสิทธิภาพแบบละเอียดอ่อน
    ต่อให้ข้อมูลไม่ดีปะปนเข้าไปในชุดฝึก หรือข้อมูลของค่าเป้าหมายรั่วไหลเข้าไป ระบบก็ยังพอทำงานได้ ผลลัพธ์แค่ปนเปื้อนเล็กน้อย
    การนำ อัลกอริทึมบีบอัด ที่มีอยู่มาใช้กับแมชชีนเลิร์นนิงนั้น รู้สึกเหมือนเป็นมื้อกลางวันฟรีเกินไป ไม่เหมือนที่หวังไว้ ถ้าอัลกอริทึมบีบอัดมีเวทมนตร์พิเศษจริง เราคงใช้อัลกอริทึมบีบอัดเป็นเอนโค้ดเดอร์ แทนที่จะใช้ทรานส์ฟอร์เมอร์เป็นตัวบีบอัด

    • ต้องจำประเด็นนี้ไว้ให้ดี ความผิดพลาดเกิดขึ้นได้ง่ายจึงพบได้บ่อย และวิทยาศาสตร์เป็นกระบวนการที่มี noise มาก แต่ในนั้นก็มี signal อยู่ด้วย และสิ่งที่เห็นอยู่ตอนนี้ก็คือแก่นแท้ของ peer review
      ดังนั้นจึงมักมีการโต้แย้งว่า การเผยแพร่แบบเปิดเป็นรูปแบบ 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 ของหนึ่งชั้นจากสามชั้นผิด บางครั้งระบบก็ยังรันได้ เพียงแต่ผลลัพธ์จะแปลกไป
    • โค้ดงานวิจัยเชิงวิชาการโดยทั่วไปเป็นโค้ดเละเทะที่มือสมัครเล่นเขียนให้เร็วที่สุด แทบไม่มีการทดสอบ และผลผลิตหลักของโค้ดแบบนั้นคือการสะสม citation ของบทความ
      โลกที่มีบทความวิทยาศาสตร์ลดลงครึ่งหนึ่งและมีความรอบคอบเพิ่มขึ้นสองเท่าคงสร้างคุณค่าได้มากกว่านี้มาก แต่ทั้งระบบถูกทำให้เป็นเกมอย่างสิ้นหวัง
  • ผมคือคนเขียนบล็อกโพสต์นี้ ผมค่อนข้างมั่นใจในสิ่งที่เขียนไว้ตรงนี้ แต่ถ้ามีอะไรที่ผมพลาดไป ผู้เขียนอาจต้องมาอธิบายเอง
    ผมเพิ่งเปิด issue บน GitHub: https://github.com/bazingagin/npc_gzip/issues/3

    • น่าพิจารณาเพิ่มหมายเหตุไว้ด้านบนสุดของบทความ หลายคนดูเหมือนจะอ่านแค่หัวข้อผ่าน ๆ แล้วรับไปว่า “บทความ gzip มั่ว และแนวทาง gzip ไม่ค่อยดี” แต่จริง ๆ แล้วดูใกล้เคียงกับว่า “แนวทาง gzip ไม่ได้ดีกว่าโมเดล deep neural network แต่โดยรวมแข่งขันได้ และมีต้นทุนการรันถูกกว่ามาก”
      ตัวบทความเองยังถือว่าแข็งแรงอยู่
    • ผมเป็นผู้เขียนคนแรกของบทความวิจัยและได้อ่านบล็อกโพสต์แล้ว เหตุผลที่เลือก k=2 คือมีคำแนะนำให้ใช้ n^{1/2} และผมอยากเลือกค่า k ที่สอดคล้องกับการตั้งค่าแบบ 5-shot
      แต่ก็จริงที่ว่าการเลือกแบบนี้ค่อนข้างแปลก อย่างที่พูดไว้ในบทความและบน 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 เหมือนเป็น บล็อกราคาถูก
      หลังจากใช้เวลาหนึ่งวันกับงานแบบนี้แล้ว ปกติก็ไม่มีแรงพอจะเขียนบล็อกจริง ๆ เลยรู้สึกเสียดาย แต่โดยทั่วไปยังพอเขียนเธรด 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

    • ถ้าพูดให้ยุติธรรม งานดั้งเดิมตั้งใจเลือกสภาพแวดล้อมที่วิธีอย่าง kNN+compression มีโอกาสทำได้ดี นั่นคือ นอกโดเมน + ทรัพยากรต่ำ
      ภายใต้เงื่อนไขแบบนี้ อินพุตสำหรับการฝึกมีความเบาบางเกินไป จนโมเดลที่มีพารามิเตอร์จำนวนมากอาจเรียนรู้ 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 ที่ซับซ้อนกว่ามากได้
    • โมเดลภาษาประมาณค่าความน่าจะเป็นของลำดับคำ P(w_1, ..., w_n) หรือเทียบเท่ากับ P(word | context)
      ในการบีบอัด เราต้องกำหนดโค้ดที่สั้นกว่าให้กับลำดับคำที่มีความน่าจะเป็นสูงกว่า จึงมีความสัมพันธ์กันโดยตรง วิธีที่รู้จักกันดีในการสร้างโค้ดแบบนี้จากความน่าจะเป็นคือ การเข้ารหัส Huffman
      หลักการนี้ใช้ได้ไม่ว่าจะเป็นโมเดลภาษาทางสถิติที่ใช้ความถี่คำ หรือใช้ LLM ในการประมาณความน่าจะเป็น ยิ่งโมเดลภาษาดี หรืออีกนัยหนึ่งคือมี perplexity ต่ำ ผลลัพธ์การบีบอัดก็ยิ่งสั้นลง
      ในทางกลับกัน ก็พูดได้ว่าอัลกอริทึมบีบอัดกำหนดโมเดลภาษาโดยนัยผ่านความยาวของโค้ด เช่น ถือว่าสตริงที่ซ้ำกันมีความเป็นไปได้สูงกว่า noise แบบสุ่ม
    • สัญชาตญาณของวิธีแบบ gzip เป็นแบบนี้
      ถ้าบีบอัด ABC จะได้ X ไบต์ จากนั้นถ้าบีบอัด ABCABC ต่อกัน ก็จะไม่ได้กลายเป็น 2X ไบต์ ยิ่งสตริงสองชุดที่นำมาต่อกันคล้ายกันเท่าไร จำนวนไบต์ที่ต้องใช้ก็ยิ่งน้อยลง
      ABCABD น่าจะใหญ่กว่า ABCABC แต่เล็กกว่า ABCXYZ
      BERT เป็น LLM ที่เล็กมากตามมาตรฐานปัจจุบัน และเราก็รู้ว่าประสิทธิภาพอ่อนกว่ารุ่นระดับหลายพันล้านพารามิเตอร์ที่เราเห็นกันมากในช่วงนี้
    • การบีบอัดเทียบเท่ากับสติปัญญา
      https://mattmahoney.net/dc/rationale.html
    • เป็นงานที่จำกัดมาก คือรับเอกสารหนึ่งชิ้นแล้วจัดเข้าหนึ่งในหมวดหมู่ เช่น ราว ๆ 10 หมวด
      วิธีอย่างการตรวจจับคำเฉพาะก็อาจทำได้ค่อนข้างดีในบางกรณี สิ่งที่บีบอัดได้ดีมักมีสตริงย่อยร่วมกันปรากฏบ่อย
  • ถ้าเรื่องนี้จริง ก็อยากเห็นว่าคนที่เคยพูดคำใหญ่คำโตเกี่ยวกับบทความนั้นจะค่อย ๆ ลบหลักฐานเงียบ ๆ อย่างไร
    โดยเฉพาะพวกอินฟลูเอนเซอร์บน LinkedIn กับ Twitter
    ถ้าไม่จริงผมก็คงดูโง่เอง แต่ผมแค่อ่านบทความแบบผ่าน ๆ

  • Gzip ในฐานะตัวจำแนกประเภท ดีจนน่าประหลาดใจ และควรถูกใช้เป็น baseline ของโครงข่ายประสาท

  • อ้างอิง: ดูเหมือนบล็อกจะหยุดอยู่ที่ปี 2022
    วันที่ของบทความระบุเป็น 17 กรกฎาคม 2022

    • ขอบคุณ เดี๋ยวจะแก้ให้เร็ว ๆ นี้ พอเขียนวันที่ด้วยมือก็เป็นแบบนี้แหละ...