- Ini adalah eksperimen untuk mengklasifikasikan sekitar 8,4 juta PDF dari SafeDocs menggunakan metadata URL, bukan isi asli dokumen, guna memberi tag pada korpus dokumen berskala besar dengan biaya realistis
- Alih-alih memproses seluruh PDF berukuran 8TB, pendekatan ini menggunakan sekitar 8GB metadata dan label yang dihasilkan LLM, menerapkan pendekatan teacher/student ala FineWeb untuk klasifikasi URL PDF
- Satu classifier deep learning hanya mencapai akurasi 59,14% dengan
Alibaba-large-gte-1.5, tetapi kombinasi embedding URL dan XGBoost naik hingga 85,26% setelah pencarian hyperparameter - Ensemble XGBoost berbasis TF-IDF dan LinearRegressor juga masing-masing mencatat 67,52% dan 70,68%, sehingga metode NLP tradisional yang sederhana melampaui baseline deep learning awal
- Dataset label final, embedding, informasi unduhan asli, dan kode dipublikasikan sehingga dapat digunakan ulang untuk eksperimen klasifikasi PDF atau pipeline data bagi model VLM/Omni
Korpus PDF SafeDocs dan tujuan klasifikasi
- Common Crawl adalah arsip web internet, dan ketika menemukan PDF, ia hanya menyimpan 1MB pertama, bukan seluruh file, lalu memotong sisanya
- SafeDocs atau
CC-MAIN-2021-31-PDF-UNTRUNCATEDadalah korpus yang mengambil kembali PDF dari snapshot Common Crawl dan menjadikannya versi tanpa pemotongan - Dataset ini terdiri dari sekitar 8,4 juta PDF, dengan ukuran total 8TB setelah diekstrak
- Tujuannya adalah mengklasifikasikan PDF ke label topik
- Contoh: PDF Linear Algebra menjadi Math
- Contoh: buku teks Anatomy menjadi Medicine
Membuat label dari metadata URL
- Alih-alih memproses langsung seluruh isi asli berukuran 8TB, pendekatan ini menggunakan metadata dari dataset asli
- Metadata berupa sekitar 8GB teks
- Kolom utamanya adalah
url
- Nama file dalam URL menjadi petunjuk untuk memperkirakan karakter dokumen
- Contoh:
Introduction_to_Python_Programming_-_WEB.pdf - Nama file ini menunjukkan kemungkinan dokumen terkait pendidikan atau teknologi
- Contoh:
- Metode pelabelan diambil dari pendekatan FineWeb
- LLM sebagai teacher yang menghasilkan label dari teks tak terstruktur
- Student berupa classifier yang lebih kecil, dilatih dengan label yang dihasilkan
- Menggunakan prompt dan Llama-3-70B melalui API together untuk menghasilkan 100 ribu label awal
- Karena distribusi label tidak seimbang dan banyak kelas kecil, label dengan jumlah di bawah 250 digabungkan menjadi
other - Setelah menyeimbangkan dengan mengambil maksimal 5.000 sampel dari tiap label, dibuat dataset berisi total 59 ribu label
Percobaan fine-tuning model embedding
- Pendekatan pertama adalah memproses teks URL dengan model embedding lalu melakukan fine-tuning agar sesuai dengan masalah klasifikasi
- FineWeb Edu menggunakan snowflake-arctic-embed-m, tetapi eksperimen ini juga meninjau model-model papan atas di Massive Text Embeddings Benchmark
- Model dengan sekitar 7B parameter dianggap sulit untuk mengklasifikasikan 8 juta PDF dengan cepat, sehingga dicoba kandidat yang lebih kecil
Stella_en_400Mgte-large-1.5- Arctic Embed
all-mpnet-basedistillbertflant-t5-smallbert-base-uncased
- Dengan Hugging Face, model dasar dibekukan dan hanya embedding serta classification head yang dilatih, sehingga dapat dijalankan bahkan di notebook
- Model terbaik dalam pendekatan ini adalah
Alibaba-large-gte-1.5, dengan akurasi 59,14%
Meningkatkan performa dengan XGBoost
- Pendekatan kedua tidak memakai model embedding langsung sebagai classifier, melainkan membuat embedding URL lalu menggunakannya sebagai input XGBoost
- Teks diubah menjadi embedding, kemudian XGBoost dilatih seolah-olah datanya berbentuk tabel
- Embedding untuk seluruh tautan PDF dibuat, dengan ukuran sekitar 40GB setelah diekstrak
- Data embedding dipublikasikan di Kaggle
- Alih-alih satu classifier besar, dilatih binary classifier untuk tiap kelas
- Ide ini diambil dari Kaggle competition lama
- Performa rata-rata model embedding XGBoost adalah sebagai berikut
- accuracy: 0.839750
- precision: 0.859758
- recall: 0.819733
- f1: 0.838937
- Pendekatan ini menghasilkan akurasi 24,83 poin persentase lebih tinggi daripada pendekatan deep learning awal
Hasil TF-IDF dan LinearRegressor
- Pendekatan ketiga adalah membuat fitur teks dengan TF-IDF dan melatih model, tanpa embedding deep learning
- TF-IDF adalah metode yang memberi bobot lebih tinggi pada kata yang sering muncul di dokumen tertentu tetapi jarang di keseluruhan korpus
- Performa XGBoost berbasis TF-IDF adalah sebagai berikut
- accuracy: 0.675200
- precision: 0.683185
- recall: 0.646316
- f1: 0.662497
- Ensemble LinearRegressor berbasis TF-IDF juga dicoba
- accuracy: 0.706802
- precision: 0.723558
- recall: 0.663038
- f1: 0.690286
- Kedua metode menghasilkan akurasi lebih tinggi daripada baseline deep learning awal, yaitu 59,14%
Mencoba lagi deep learning dengan lebih banyak label LLM
- Target satu classifier deep learning ditetapkan pada akurasi 70%, lalu lebih banyak label dibuat
- Label tambahan dibuat sebanyak 400 ribu dengan Llama3.1-7B
- Alasan memakai model yang lebih kecil dari sebelumnya adalah untuk mengurangi biaya inference
- Dalam eksperimen, semakin banyak data menghasilkan performa yang semakin baik
- Dipengaruhi oleh The Llama 3 Herd of Models dari Meta, dilakukan eksperimen dengan
roberta-basedangte-largeyang sudah ada gte-largemencatat hingga akurasi 69,22% pada dataset pelatihan
Performa final per model
- Hasil eksperimennya adalah sebagai berikut
| 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% |
- Pada akhirnya, model terbaik adalah XGBoost embeddings
- Model embedding XGBoost dengan pencarian hyperparameter menghasilkan skor tertinggi, yaitu akurasi 85,26%
Klasifikasi dan visualisasi seluruh korpus
- Kode final memiliki struktur sederhana: memuat embedding ke memori lalu melakukan prediksi
- Prediksi tag untuk seluruh PDF memakan waktu sekitar 1 jam
- GPU tidak digunakan karena konfigurasi eksekusi GPU tidak diaktifkan
- Hasil prediksi dan embedding divisualisasikan dengan PCA dan UMAP
- PCA memvisualisasikan sekitar 8,5 juta titik dari seluruh dataset dalam satu gambar
- UMAP dijalankan dengan menyewa mesin yang lebih besar
- Azure
Standard_E48s_v3 - 48 core
- RAM 384GB
- Disk 768GB
- UMAP dijalankan hingga 6,5 juta titik, dan di atas itu hampir kehabisan memori
- Azure
Data dan kode yang dipublikasikan
- Dataset final dipublikasikan di repo Hugging Face
- Jika hanya membutuhkan embedding, dapat diunduh dari dataset Kaggle
- Informasi unduhan dataset SafeDocs asli tersedia di S3 bucket
- Kode klasifikasi berada di path classify_metadata dalam monorepo GitHub
- Karena PDF merupakan format campuran data dan gambar, PDF diperkirakan dapat lebih sering digunakan dalam pipeline pelatihan model VLM/Omni
1 komentar
Komentar Hacker News
Sekitar tahun 2009, pernah ada visualisasi serupa terhadap sekitar 5,7 juta makalah riset dari penerbit ilmiah seperti Elsevier dan Springer (PDF, korpus tertutup)
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...
Saya adalah penulis pertama
Jika benchmark pada 2009 adalah 13 jam, saya penasaran seberapa cepat komputasinya akan selesai sekarang
Kalau sekarang, mungkin semua orang akan langsung memasukkan data itu ke UMAP
Dan apakah ampersand
&punya makna berbeda dariand, atau itu cuma gaya sitasiSalah satu kelebihan embedding yang belakangan ini kurang dibahas adalah bahwa kita bisa menerapkan teknik pemodelan statistik yang sudah ada hampir apa adanya, sekaligus menghindari kerumitan dan jebakan preprocessing NLP umum seperti stemming
Tulisan ini terutama menunjukkan dengan baik mengapa langsung memakai embedding LLM sebagai langkah pertama NLP untuk dokumen panjang itu praktis
Saya penulisnya. Saya tidak menyangka tulisan ini akan naik ke puncak HN, dan silakan tanya apa saja
Saya sudah melihat kodenya, tetapi banyak hal yang terasa asing, dan sepertinya yang lebih banyak tidak saya kenal adalah teknik analisisnya, bukan Python-nya sendiri
Apakah PDF-nya memang sudah diklasifikasikan sebelumnya?
Tulisan yang menarik dan penuh detail. Namun, saat melakukan pembelajaran biner one-vs-many, menyeimbangkan kelas lalu memakai probabilitas maksimum saat inferensi bisa bermasalah karena probabilitasnya mungkin tidak terkalibrasi dengan baik
Saya penasaran apakah dilakukan kalibrasi probabilitas terpisah sebelum mengambil
argmaxBahkan pada 2006 sudah ada beberapa kumpulan torrent buku teks sebesar 1TB
Sekarang ukuran dan jumlahnya mungkin sudah lebih besar
Saya ingat sampai sekitar 2008, mencari buku teks, buku jawaban, PDF terkait, dan materi lain jauh lebih mudah daripada 6–8 tahun sesudahnya
Perbedaan terbesarnya adalah berbagai situs seperti Chegg mulai menyedot materi itu dan menjualnya kembali dengan satu cara atau lainnya
Kebanyakan terkait elektronika dan rekayasa, dan saya ambil dari torrent sekitar 2 tahun lalu saat ingin mencoba-coba materi GraphQL dan OSR
Saya punya sekitar 20–40TB PDF (sebelum deduplikasi)
8TB memang banyak, tetapi sama sekali belum mendekati total skala semua PDF yang ada di dunia
Saya juga punya koleksi ebook, PDF, dan komik yang saya kumpulkan untuk dibaca, tetapi sulit membayangkan sebesar apa perpustakaan 20TB itu
Jelas ada jauh lebih banyak PDF daripada 8TB. Mungkin memang banyak duplikat di dalamnya, tetapi karena banyak gambar, deduplikasi sepertinya tidak akan berjalan mulus
Tulisan yang menarik dan menyenangkan. Saya pernah bereksperimen dengan berbagai solusi LLM/AI generatif untuk mengekstrak data tabular dari PDF, tetapi hasilnya kurang memuaskan dibanding harapan
Untuk ekstraksi string teks atau ringkasan, misalnya menjawab berapa total nilainya atau kapan dicetak, hasilnya bagus, tetapi untuk mengekstraknya secara andal menjadi CSV masih cukup sering meleset
Mungkin layak mencoba Aryn partitioning service: https://www.aryn.ai/post/announcing-the-aryn-partitioning-se...
Ini baru dirilis, dan ada contoh mengubah data tabel dari PDF menjadi pandas dataframe. Setelah itu bisa dikonversi ke CSV: https://sycamore.readthedocs.io/en/stable/aryn_cloud/get_sta...
Keren. Di Airtrain kami juga mendapati bahwa embedding sangat bernilai untuk membangun model klasifikasi
Jika Anda ingin mengutak-atik banyak teks dan embedding, kami baru-baru ini mendeduplikasi dan membuat embedding untuk seluruh fineweb-edu (juga disebut di tulisan), lalu mengunggah dataset hasilnya ke Hugging Face: https://huggingface.co/datasets/airtrain-ai/fineweb-edu-fort...
Ide yang sangat keren. Akhir-akhir ini saya tidak punya banyak waktu luang, tetapi belum lama ini saya sempat berpikir untuk mengerjakan proyek yang mirip tapi berbeda
Saya ingin membuat alat open-source untuk mengunduh data deret waktu yang berguna bagi ilmu sosial. Misalnya deret waktu komentar media sosial tentang harga bahan makanan
Berkat LLM, sepertinya kini terbuka beberapa sudut penelitian baru yang belum banyak dimanfaatkan orang
Kalau suatu saat saya jadi mengerjakan side project itu, mungkin saya akan meminjam beberapa ide bagus dari sini
Pekerjaan yang hebat. Ini mirip dengan yang kadang dilakukan perpustakaan nasional, yaitu memakai beberapa pendekatan sekaligus. Saya juga pernah mencoba berbagai alur embedding → classifier atau LDA
Saya penasaran dengan prompt-nya: https://github.com/snat-s/m/blob/main/classify_metadata/prom...
Bukankah ini pada dasarnya mirip memberi prompt untuk mengklasifikasikan berdasarkan jenis URL?