2 poin oleh GN⁺ 2024-08-20 | 1 komentar | Bagikan ke WhatsApp
  • 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-UNTRUNCATED adalah 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
  • 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_400M
    • gte-large-1.5
    • Arctic Embed
    • all-mpnet-base
    • distillbert
    • flant-t5-small
    • bert-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
  • 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-base dan gte-large yang sudah ada
  • gte-large mencatat 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

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

 
GN⁺ 2024-08-20
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

    • Sepertinya butuh kerja luar biasa besar untuk menambang semua makalah itu
      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
    • Saya penasaran bagaimana urutan penulis ditentukan
      Dan apakah ampersand & punya makna berbeda dari and, atau itu cuma gaya sitasi
  • Salah 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

    • Maksudnya teknik statistik diterapkan pada embedding itu sendiri? Saya penasaran bagaimana cara kerjanya
  • Saya penulisnya. Saya tidak menyangka tulisan ini akan naik ke puncak HN, dan silakan tanya apa saja

    • Saya penasaran apakah ada materi yang direkomendasikan untuk mempelajari analisis semacam ini
      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
    • Anda menyebut akurasi dari beberapa teknik yang dipakai; saya ingin tahu apakah bisa dijelaskan lebih lanjut bagaimana akurasi itu dihitung
      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 argmax

  • Bahkan pada 2006 sudah ada beberapa kumpulan torrent buku teks sebesar 1TB
    Sekarang ukuran dan jumlahnya mungkin sudah lebih besar

    • Itu sebelum praktik menimbun materi seperti itu lalu membangun bisnis abu-abu di atasnya benar-benar marak
      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
    • Secara pribadi saya punya sekitar 350GB manual servis lama, datasheet, katalog, dan terbitan berkala
      Kebanyakan terkait elektronika dan rekayasa, dan saya ambil dari torrent sekitar 2 tahun lalu saat ingin mencoba-coba materi GraphQL dan OSR
    • Kalau mau, di Anna's Archive ada banyak torrent berskala puluhan TB
  • 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 penasaran apa yang Anda kumpulkan. Apakah terutama mirror hal-hal seperti LibGen?
      Saya juga punya koleksi ebook, PDF, dan komik yang saya kumpulkan untuk dibaca, tetapi sulit membayangkan sebesar apa perpustakaan 20TB itu
    • Saya penasaran apakah ada rencana untuk merilisnya. Atau apakah itu memang tidak diizinkan untuk dataset tersebut?
      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

  • 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?