2 คะแนน โดย GN⁺ 2024-08-20 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เป็นการทดลองของ SafeDocs ที่จัดหมวดหมู่ PDF ประมาณ 8.4 ล้านไฟล์ ด้วยเมทาดาตา URL แทนเนื้อหาต้นฉบับ เพื่อแท็กคลังเอกสารขนาดใหญ่ด้วยต้นทุนที่สมเหตุสมผล
  • ใช้ เมทาดาตาประมาณ 8GB และป้ายกำกับที่สร้างโดย LLM แทน PDF ทั้งหมด 8TB โดยนำแนวทาง teacher/student แบบ FineWeb มาประยุกต์กับการจัดหมวดหมู่ URL ของ PDF
  • ตัวจัดหมวดหมู่แบบดีปเลิร์นนิงเดี่ยวทำได้เพียง ความแม่นยำ 59.14% เมื่อใช้ Alibaba-large-gte-1.5 แต่การผสมผสาน URL embedding กับ XGBoost เพิ่มขึ้นเป็น 85.26% หลังค้นหาไฮเปอร์พารามิเตอร์
  • Ensemble ของ XGBoost และ LinearRegressor ที่ใช้ TF-IDF ก็ทำได้ 67.52% และ 70.68% ตามลำดับ แสดงให้เห็นว่าวิธี NLP ดั้งเดิมแบบง่าย ๆ แซง baseline ดีปเลิร์นนิงช่วงแรกได้
  • เปิดเผยชุดข้อมูลป้ายกำกับสุดท้าย, embedding, ข้อมูลดาวน์โหลดต้นฉบับ และโค้ด เพื่อให้นำไปใช้ซ้ำในการทดลอง pipeline ข้อมูลสำหรับการจัดหมวดหมู่ PDF หรือโมเดล VLM/Omni ได้

คลัง PDF ของ SafeDocs และเป้าหมายการจัดหมวดหมู่

  • Common Crawl เป็นเว็บอาร์ไคฟ์ของอินเทอร์เน็ต และเมื่อพบ PDF จะเก็บเฉพาะ 1MB แรก ไม่ใช่ทั้งไฟล์ แล้วตัดส่วนที่เหลือออก
  • SafeDocs หรือ CC-MAIN-2021-31-PDF-UNTRUNCATED คือคลังข้อมูลที่นำ PDF จากสแนปช็อตของ Common Crawl มาดึงใหม่เป็นเวอร์ชัน ไม่ถูกตัดทอน
  • ชุดข้อมูลนี้ประกอบด้วย PDF ประมาณ 8.4 ล้านไฟล์ และมีขนาดรวม 8TB เมื่อแตกไฟล์แล้ว
  • เป้าหมายคือจัดหมวดหมู่ PDF เป็นป้ายกำกับตามหัวข้อ
    • ตัวอย่าง: PDF Linear Algebra เป็น Math
    • ตัวอย่าง: ตำรา Anatomy เป็น Medicine

สร้างป้ายกำกับจากเมทาดาตา URL

  • ไม่ประมวลผลเนื้อหาต้นฉบับ 8TB โดยตรง แต่ใช้ เมทาดาตา ของชุดข้อมูลต้นฉบับ
    • เมทาดาตาเป็น ข้อความประมาณ 8GB
    • คอลัมน์หลักคือ url
  • ชื่อไฟล์ใน URL เป็นเบาะแสในการคาดเดาลักษณะของเอกสาร
    • ตัวอย่าง: Introduction_to_Python_Programming_-_WEB.pdf
    • ชื่อไฟล์นี้บ่งชี้ว่าเอกสารอาจเกี่ยวข้องกับการศึกษาหรือเทคโนโลยี
  • วิธีติดป้ายกำกับนำมาจากแนวทางของ FineWeb
    • teacher คือ LLM ที่สร้างป้ายกำกับจากข้อความไม่มีโครงสร้าง
    • student คือโมเดลจัดหมวดหมู่ขนาดเล็กกว่าที่เรียนรู้จากป้ายกำกับที่สร้างขึ้น
  • ใช้ พรอมป์ต์ และ Llama-3-70B ผ่าน API ของ together เพื่อสร้าง ป้ายกำกับเริ่มต้น 100,000 รายการ
  • เนื่องจากการกระจายของป้ายกำกับไม่สมดุลและมีคลาสเล็ก ๆ จำนวนมาก จึงรวม ป้ายกำกับที่มีน้อยกว่า 250 รายการ เป็น other
  • จากนั้นนำตัวอย่างสูงสุด 5,000 รายการต่อป้ายกำกับ เพื่อปรับสมดุล และสร้างชุดข้อมูลรวม ป้ายกำกับ 59,000 รายการ

ความพยายามปรับแต่งโมเดล embedding

  • แนวทางแรกคือประมวลผลข้อความ URL ด้วยโมเดล embedding แล้ว fine-tune ให้เหมาะกับโจทย์การจัดหมวดหมู่
  • FineWeb Edu ใช้ snowflake-arctic-embed-m แต่ในการทดลองนี้ยังพิจารณาโมเดลอันดับต้น ๆ ใน Massive Text Embeddings Benchmark ด้วย
  • มองว่าโมเดลพารามิเตอร์ประมาณ 7B จะจัดหมวดหมู่ PDF 8 ล้านไฟล์ได้รวดเร็วได้ยาก จึงทดลองกับตัวเลือกที่เล็กกว่า
    • Stella_en_400M
    • gte-large-1.5
    • Arctic Embed
    • all-mpnet-base
    • distillbert
    • flant-t5-small
    • bert-base-uncased
  • ใช้ Hugging Face โดยตรึงโมเดลฐานไว้ แล้วฝึกเฉพาะ embedding และหัวจัดหมวดหมู่ ทำให้รันบนโน้ตบุ๊กได้ด้วย
  • โมเดลที่ดีที่สุดในวิธีนี้คือ Alibaba-large-gte-1.5 โดยมีความแม่นยำ 59.14%

ดึงประสิทธิภาพขึ้นด้วย XGBoost

  • แนวทางที่สองคือไม่ใช้โมเดล embedding เป็นตัวจัดหมวดหมู่โดยตรง แต่สร้าง URL embedding แล้วใช้เป็น อินพุตของ XGBoost
  • แปลงข้อความเป็น embedding แล้วฝึก XGBoost เหมือนข้อมูลแบบตาราง
  • สร้าง embedding ของลิงก์ PDF ทั้งหมดแล้ว โดยมีขนาดประมาณ 40GB เมื่อแตกไฟล์แล้ว
    • ข้อมูล embedding เผยแพร่บน Kaggle
  • แทนที่จะใช้ตัวจัดหมวดหมู่ขนาดใหญ่ตัวเดียว ได้ฝึก ตัวจัดหมวดหมู่แบบไบนารี แยกตามคลาส
  • ประสิทธิภาพเฉลี่ยของโมเดล XGBoost embedding เป็นดังนี้
    • accuracy: 0.839750
    • precision: 0.859758
    • recall: 0.819733
    • f1: 0.838937
  • แนวทางนี้ให้ความแม่นยำสูงกว่าแนวทางดีปเลิร์นนิงช่วงแรก 24.83 จุดเปอร์เซ็นต์

ผลลัพธ์ของ TF-IDF และ LinearRegressor

  • แนวทางที่สามคือสร้างฟีเจอร์ข้อความด้วย TF-IDF และฝึกโมเดล โดยไม่ใช้ embedding จากดีปเลิร์นนิง
  • TF-IDF เป็นวิธีที่ให้น้ำหนักสูงขึ้นกับคำที่ปรากฏบ่อยในเอกสารหนึ่ง ๆ แต่พบได้ยากในทั้งคอร์ปัส
  • ประสิทธิภาพของ XGBoost ที่ใช้ TF-IDF เป็นดังนี้
    • accuracy: 0.675200
    • precision: 0.683185
    • recall: 0.646316
    • f1: 0.662497
  • ยังทดลอง ensemble ของ LinearRegressor ที่ใช้ TF-IDF ด้วย
    • accuracy: 0.706802
    • precision: 0.723558
    • recall: 0.663038
    • f1: 0.690286
  • ทั้งสองวิธีให้ความแม่นยำสูงกว่า baseline ดีปเลิร์นนิงช่วงแรกที่ 59.14%

ทดลองดีปเลิร์นนิงอีกครั้งด้วยป้ายกำกับจาก LLM ที่มากขึ้น

  • ตั้งเป้าหมายของตัวจัดหมวดหมู่ดีปเลิร์นนิงเดี่ยวไว้ที่ ความแม่นยำ 70% และสร้างป้ายกำกับเพิ่มขึ้น
  • ป้ายกำกับเพิ่มเติมสร้างด้วย Llama3.1-7B จำนวน 400,000 รายการ
    • เหตุผลที่ใช้โมเดลเล็กกว่าเดิมคือเพื่อลดต้นทุน inference
  • ในการทดลองพบว่ายิ่งมีข้อมูลมาก ประสิทธิภาพก็ยิ่งดีขึ้น
  • ได้รับอิทธิพลจาก The Llama 3 Herd of Models ของ Meta จึงทดลอง roberta-base และ gte-large เดิม
  • gte-large ทำความแม่นยำสูงสุด 69.22% บนชุดข้อมูลฝึก

ประสิทธิภาพสุดท้ายตามโมเดล

  • ผลการทดลองเป็นดังนี้
Model Name Accuracy
gte-large naïve (59k labels) 59.14%
XGBoost embeddings 83.97%
XGBoost Tf-Idf 67.52%
LinearRegressor Tf-Idf 70.68%
gte-large naïve (400k labels) 69.22%
XGBoost Embeddings HyperParameter Sweep 85.26%
  • สุดท้ายโมเดลที่ดีที่สุดคือ XGBoost embeddings
  • โมเดล XGBoost embedding ที่ใช้การค้นหาไฮเปอร์พารามิเตอร์ให้ผลลัพธ์สูงสุดด้วย ความแม่นยำ 85.26%

การจัดหมวดหมู่ทั้งคอร์ปัสและการทำ Visualization

  • โค้ดสุดท้ายมีโครงสร้างเรียบง่าย คือโหลด embedding เข้าหน่วยความจำแล้วทำการพยากรณ์
  • การทำนายแท็กของ PDF ทั้งหมดใช้เวลาประมาณ 1 ชั่วโมง
    • ไม่ได้ใช้ GPU เพราะไม่ได้ตั้งค่าการรันบน GPU
  • ใช้ PCA และ UMAP เพื่อทำ visualization ของผลการทำนายและ embedding
  • PCA แสดงจุดประมาณ 8.5 ล้านจุด ของชุดข้อมูลทั้งหมดในภาพเดียว
  • UMAP รันโดยเช่าเครื่องที่ใหญ่กว่า
    • Azure Standard_E48s_v3
    • 48 คอร์
    • RAM 384GB
    • ดิสก์ 768GB
    • UMAP รันได้ถึง 6.5 ล้านจุด และมากกว่านั้นใกล้จะหน่วยความจำไม่พอ

ข้อมูลและโค้ดที่เผยแพร่

  • ชุดข้อมูลสุดท้ายเผยแพร่ใน Hugging Face repo
  • หากต้องการเฉพาะ embedding สามารถรับได้จาก Kaggle dataset
  • ข้อมูลดาวน์โหลดของชุดข้อมูล SafeDocs ต้นฉบับอยู่ใน S3 bucket
  • โค้ดจัดหมวดหมู่อยู่ในพาธ classify_metadata ของ GitHub monorepo
  • เนื่องจาก PDF เป็นรูปแบบที่ผสมทั้งข้อมูลและรูปภาพ จึงมองว่าอาจถูกใช้บ่อยขึ้นใน pipeline การฝึกโมเดล VLM/Omni

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

 
GN⁺ 2024-08-20
ความคิดเห็นบน Hacker News
  • ราวปี 2009 เคยทำงานด้าน visualization คล้าย ๆ กันกับ บทความวิจัยประมาณ 5.7 ล้านชิ้น (PDF, corpus แบบไม่เปิดเผย) ของสำนักพิมพ์วิทยาศาสตร์อย่าง Elsevier, Springer
    Newton, G., A. Callahan & M. Dumontier. 2009. Semantic Journal Mapping for Search Visualization in a Large Scale Article Digital Library. Second Workshop on Very Large Digital Libraries at the European Conference on Digital Libraries (ECDL) 2009. https://lekythos.library.ucy.ac.cy/bitstream/handle/10797/14...
    ผมเป็นผู้เขียนคนแรก

    • คิดว่าการขุดค้นบทความทั้งหมดนี้คงเป็นงานมหาศาลมาก
      ถ้า benchmark ในปี 2009 ใช้เวลา 13 ชั่วโมง ก็อยากรู้ว่าตอนนี้การคำนวณจะเสร็จเร็วแค่ไหน
      ถ้าเป็นยุคนี้ ทุกคนน่าจะยัดข้อมูลนั้นเข้า UMAP กันหมด
    • สงสัยว่าลำดับผู้เขียนเขากำหนดกันอย่างไร
      แล้วก็สงสัยว่า ampersand & มีความหมายต่างจาก and หรือเปล่า หรือเป็นแค่ รูปแบบการอ้างอิง เฉย ๆ
  • ข้อดีอย่างหนึ่งของ embedding ที่ช่วงนี้ไม่ค่อยถูกพูดถึง คือสามารถนำ เทคนิค statistical modeling แบบเดิม ๆ มาใช้ได้แทบจะตรง ๆ และยังช่วยหลีกเลี่ยงรายละเอียดปลีกย่อยกับกับดักของการ preprocess ภาษาใน NLP ที่พบบ่อย เช่น stemming ได้ด้วย
    บทความนี้แสดงให้เห็นได้ดีว่าทำไมการใช้ LLM embedding เป็นขั้นแรกของ NLP โดยตรง โดยเฉพาะกับเอกสารยาว ๆ จึงเป็นแนวทางที่ใช้ได้จริง

    • หมายถึงสามารถเอาเทคนิคทางสถิติมาใช้กับ embedding เองได้ใช่ไหม? อยากรู้ว่ามันทำงานอย่างไร
  • ผมเป็นผู้เขียนบทความนี้เอง ไม่คิดว่ามันจะขึ้นไปอยู่บนสุดของ HN ถามอะไรก็ได้

    • ถ้าอยากเรียนการวิเคราะห์แบบนี้ มีแหล่งข้อมูลแนะนำไหม
      ลองดูโค้ดแล้วมีหลายอย่างที่ไม่คุ้น และรู้สึกว่าไม่ใช่ Python เองเท่าไร แต่เป็น เทคนิคการวิเคราะห์ หลายอย่างที่ผมไม่รู้
    • คุณพูดถึง ความแม่นยำ ของเทคนิคหลายแบบที่ใช้ อยากให้ช่วยอธิบายเพิ่มเติมได้ไหมว่าคำนวณความแม่นยำนั้นอย่างไร
      PDF เหล่านั้นถูกจัดหมวดหมู่ไว้แล้วหรือเปล่า?
  • เป็นบทความที่น่าสนใจและมีรายละเอียดเยอะมาก แต่เวลาทำ one-vs-many binary learning ถ้าปรับ class balance แล้วใช้ความน่าจะเป็นสูงสุดตอน inference อาจมีปัญหาได้ เพราะ probability อาจไม่ได้ calibrated อย่างถูกต้อง
    สงสัยว่ามีการทำ probability calibration แยกต่างหากก่อนจะใช้ argmax หรือเปล่า

  • ในปี 2006 ก็มีคอลเลกชัน torrent หนังสือเรียนขนาด 1TB อยู่หลายชุดแล้ว
    ตอนนี้ขนาดและจำนวนคงใหญ่ขึ้นมาก

    • นั่นเป็นช่วงก่อนที่การสะสมเนื้อหาพวกนั้นแล้วเอาไปทำธุรกิจคลุมเครือจะเริ่มจริงจัง
      เท่าที่จำได้ แค่ถึงปี 2008 การหาหนังสือเรียน คู่มือเฉลย PDF ที่เกี่ยวข้อง และทรัพยากรอื่น ๆ ยังง่ายกว่าช่วง 6–8 ปีหลังจากนั้นมาก
      ความต่างที่ใหญ่ที่สุดคือเว็บหลายแห่งอย่าง Chegg เริ่มดูดทรัพยากรพวกนั้นไป แล้วนำกลับมาขายต่อไม่ทางใดก็ทางหนึ่ง
    • ส่วนตัวผมมี service manual, datasheet, catalog, periodical เก่า ๆ อยู่ประมาณ 350GB
      ส่วนใหญ่เป็นเอกสารด้านอิเล็กทรอนิกส์และวิศวกรรม และเป็นของที่โหลดจาก torrent เมื่อประมาณ 2 ปีก่อน ตอนที่อยากลองเล่นกับ GraphQL และข้อมูล OSR
    • ถ้าต้องการ Anna's Archive มี torrent ขนาด หลายสิบ TB อยู่มากมาย
  • ผมมี PDF อยู่ประมาณ 20–40TB (ก่อน dedup)
    8TB ก็ถือว่าเยอะ แต่ยังไม่ใกล้เคียงกับขนาด PDF ทั้งหมดที่มีอยู่บนโลกเลย

    • สงสัยว่าคุณเก็บอะไรอยู่ ส่วนใหญ่เป็นการ mirror อย่าง LibGen หรือเปล่า?
      ผมเองก็มีคอลเลกชัน e-book, PDF, manga ที่เก็บไว้เพื่ออ่านอยู่พอสมควร แต่ยังนึกภาพไม่ออกว่า library ขนาด 20TB ใหญ่แค่ไหน
    • สงสัยว่ามีแผนจะเปิดเผยไหม หรือ dataset นั้นไม่อนุญาต?
      แน่นอนว่ามี PDF มากกว่า 8TB มาก ๆ อยู่แล้ว อาจมีไฟล์ซ้ำจำนวนมากในนั้น แต่เพราะมีรูปภาพเยอะ dedup น่าจะทำได้ไม่ดีนัก
  • เป็นบทความที่น่าสนใจและอ่านสนุก ผมลองทดลองโซลูชัน LLM/generative AI หลายแบบเพื่อดึง ข้อมูลแบบตาราง จาก PDF แต่ผลลัพธ์แย่กว่าที่คาด
    มันทำได้ดีกับการดึงข้อความหรือสรุป เช่น คำถามว่ายอดรวมเท่าไร หรือพิมพ์ออกมาเมื่อไหร่ แต่พอจะให้ดึงออกมาเป็น CSV อย่างเสถียรแล้วยังมี error อยู่พอสมควร

  • เจ๋งมาก ที่ Airtrain เราก็พบว่า embedding มีคุณค่ามากในการสร้าง classification model
    ถ้าอยากลองจัดการข้อความและ embedding จำนวนมาก เมื่อเร็ว ๆ นี้เราได้ dedup และทำ embedding ให้ fineweb-edu ทั้งชุด (มีพูดถึงในบทความด้วย) แล้วอัปโหลด dataset ผลลัพธ์ไว้บน Hugging Face: https://huggingface.co/datasets/airtrain-ai/fineweb-edu-fort...

  • เป็นไอเดียที่ยอดเยี่ยมมาก ช่วงนี้ไม่ค่อยมีเวลาว่าง แต่ไม่นานมานี้ผมคิดว่าจะลองทำโปรเจกต์ที่คล้ายกันแต่ต่างออกไป
    อยากทำเครื่องมือโอเพนซอร์สสำหรับดาวน์โหลด ข้อมูล time series ที่มีประโยชน์ต่อสังคมศาสตร์ เช่น time series ของคอมเมนต์บนโซเชียลมีเดียเกี่ยวกับราคาของชำ
    LLM ดูเหมือนจะเปิดมุมมองการวิจัยใหม่ ๆ หลายอย่างที่คนยังไม่ค่อยใช้กัน
    ถ้าวันหนึ่งได้ทำ side project นั้นจริง ๆ อาจหยิบไอเดียบางอย่างดี ๆ จากที่นี่ไปใช้ได้

  • งานยอดเยี่ยมมาก ใช้หลายแนวทางร่วมกัน คล้ายกับวิธีที่หอสมุดแห่งชาติทำเป็นครั้งคราว ผมเองก็เคยลองทั้ง embedding → classifier และ LDA สารพัดแบบ
    อยากรู้ prompt นี้: https://github.com/snat-s/m/blob/main/classify_metadata/prom...
    อันนี้แทบจะเหมือนการ prompt ให้จัดหมวดหมู่ตาม ประเภท URL ไม่ใช่หรือ?