การจัดหมวดหมู่ PDF ทั้งหมดบนอินเทอร์เน็ต
(snats.xyz)- เป็นการทดลองของ 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_400Mgte-large-1.5- Arctic Embed
all-mpnet-basedistillbertflant-t5-smallbert-base-uncased
- ใช้ Hugging Face โดยตรึงโมเดลฐานไว้ แล้วฝึกเฉพาะ embedding และหัวจัดหมวดหมู่ ทำให้รันบนโน้ตบุ๊กได้ด้วย
- โมเดลที่ดีที่สุดในวิธีนี้คือ
Alibaba-large-gte-1.5โดยมีความแม่นยำ 59.14%
ดึงประสิทธิภาพขึ้นด้วย XGBoost
- แนวทางที่สองคือไม่ใช้โมเดล embedding เป็นตัวจัดหมวดหมู่โดยตรง แต่สร้าง URL embedding แล้วใช้เป็น อินพุตของ XGBoost
- แปลงข้อความเป็น embedding แล้วฝึก XGBoost เหมือนข้อมูลแบบตาราง
- สร้าง embedding ของลิงก์ PDF ทั้งหมดแล้ว โดยมีขนาดประมาณ 40GB เมื่อแตกไฟล์แล้ว
- ข้อมูล embedding เผยแพร่บน Kaggle
- แทนที่จะใช้ตัวจัดหมวดหมู่ขนาดใหญ่ตัวเดียว ได้ฝึก ตัวจัดหมวดหมู่แบบไบนารี แยกตามคลาส
- ไอเดียนี้นำมาจาก Kaggle competition เก่า
- ประสิทธิภาพเฉลี่ยของโมเดล 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 ล้านจุด และมากกว่านั้นใกล้จะหน่วยความจำไม่พอ
- Azure
ข้อมูลและโค้ดที่เผยแพร่
- ชุดข้อมูลสุดท้ายเผยแพร่ใน Hugging Face repo
- หากต้องการเฉพาะ embedding สามารถรับได้จาก Kaggle dataset
- ข้อมูลดาวน์โหลดของชุดข้อมูล SafeDocs ต้นฉบับอยู่ใน S3 bucket
- โค้ดจัดหมวดหมู่อยู่ในพาธ classify_metadata ของ GitHub monorepo
- เนื่องจาก PDF เป็นรูปแบบที่ผสมทั้งข้อมูลและรูปภาพ จึงมองว่าอาจถูกใช้บ่อยขึ้นใน pipeline การฝึกโมเดล VLM/Omni
1 ความคิดเห็น
ความคิดเห็นบน 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 โดยตรง โดยเฉพาะกับเอกสารยาว ๆ จึงเป็นแนวทางที่ใช้ได้จริง
ผมเป็นผู้เขียนบทความนี้เอง ไม่คิดว่ามันจะขึ้นไปอยู่บนสุดของ HN ถามอะไรก็ได้
ลองดูโค้ดแล้วมีหลายอย่างที่ไม่คุ้น และรู้สึกว่าไม่ใช่ Python เองเท่าไร แต่เป็น เทคนิคการวิเคราะห์ หลายอย่างที่ผมไม่รู้
PDF เหล่านั้นถูกจัดหมวดหมู่ไว้แล้วหรือเปล่า?
เป็นบทความที่น่าสนใจและมีรายละเอียดเยอะมาก แต่เวลาทำ one-vs-many binary learning ถ้าปรับ class balance แล้วใช้ความน่าจะเป็นสูงสุดตอน inference อาจมีปัญหาได้ เพราะ probability อาจไม่ได้ calibrated อย่างถูกต้อง
สงสัยว่ามีการทำ probability calibration แยกต่างหากก่อนจะใช้
argmaxหรือเปล่าในปี 2006 ก็มีคอลเลกชัน torrent หนังสือเรียนขนาด 1TB อยู่หลายชุดแล้ว
ตอนนี้ขนาดและจำนวนคงใหญ่ขึ้นมาก
เท่าที่จำได้ แค่ถึงปี 2008 การหาหนังสือเรียน คู่มือเฉลย PDF ที่เกี่ยวข้อง และทรัพยากรอื่น ๆ ยังง่ายกว่าช่วง 6–8 ปีหลังจากนั้นมาก
ความต่างที่ใหญ่ที่สุดคือเว็บหลายแห่งอย่าง Chegg เริ่มดูดทรัพยากรพวกนั้นไป แล้วนำกลับมาขายต่อไม่ทางใดก็ทางหนึ่ง
ส่วนใหญ่เป็นเอกสารด้านอิเล็กทรอนิกส์และวิศวกรรม และเป็นของที่โหลดจาก torrent เมื่อประมาณ 2 ปีก่อน ตอนที่อยากลองเล่นกับ GraphQL และข้อมูล OSR
ผมมี PDF อยู่ประมาณ 20–40TB (ก่อน dedup)
8TB ก็ถือว่าเยอะ แต่ยังไม่ใกล้เคียงกับขนาด PDF ทั้งหมดที่มีอยู่บนโลกเลย
ผมเองก็มีคอลเลกชัน e-book, PDF, manga ที่เก็บไว้เพื่ออ่านอยู่พอสมควร แต่ยังนึกภาพไม่ออกว่า library ขนาด 20TB ใหญ่แค่ไหน
แน่นอนว่ามี PDF มากกว่า 8TB มาก ๆ อยู่แล้ว อาจมีไฟล์ซ้ำจำนวนมากในนั้น แต่เพราะมีรูปภาพเยอะ dedup น่าจะทำได้ไม่ดีนัก
เป็นบทความที่น่าสนใจและอ่านสนุก ผมลองทดลองโซลูชัน LLM/generative AI หลายแบบเพื่อดึง ข้อมูลแบบตาราง จาก PDF แต่ผลลัพธ์แย่กว่าที่คาด
มันทำได้ดีกับการดึงข้อความหรือสรุป เช่น คำถามว่ายอดรวมเท่าไร หรือพิมพ์ออกมาเมื่อไหร่ แต่พอจะให้ดึงออกมาเป็น CSV อย่างเสถียรแล้วยังมี error อยู่พอสมควร
ลองใช้ Aryn Partitioning Service ดูก็ได้: https://www.aryn.ai/post/announcing-the-aryn-partitioning-se...
เพิ่งเปิดตัวเมื่อไม่นานนี้ และมีตัวอย่างการแปลงข้อมูลตารางใน PDF เป็น pandas dataframe ด้วย จากนั้นค่อยแปลงเป็น CSV ได้: https://sycamore.readthedocs.io/en/stable/aryn_cloud/get_sta...
เจ๋งมาก ที่ 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 ไม่ใช่หรือ?