İnternetteki Tüm PDF’leri Sınıflandırmak
(snats.xyz)- SafeDocs’un yaklaşık 8,4 milyon PDF’ini, içerik yerine URL meta verileriyle sınıflandırarak büyük bir belge korpusunu gerçekçi bir maliyetle etiketlemeyi amaçlayan bir deney
- Tüm 8 TB’lık PDF içeriği yerine yaklaşık 8 GB meta veri ve LLM tarafından üretilen etiketler kullanılarak, FineWeb tarzı teacher/student yaklaşımı PDF URL sınıflandırmasına uygulanıyor
- Tek bir derin öğrenme sınıflandırıcısı
Alibaba-large-gte-1.5ile %59,14 doğrulukta kalırken, URL embedding’leri ile XGBoost birleşimi hiperparametre taramasından sonra %85,26 seviyesine çıkıyor - TF-IDF tabanlı XGBoost ve LinearRegressor ensemble’ı da sırasıyla %67,52 ve %70,68 elde ederek, basit geleneksel NLP yöntemlerinin ilk derin öğrenme taban çizgisini geçtiğini gösteriyor
- Nihai etiket veri seti, embedding’ler, özgün indirme bilgileri ve kodlar açıklandı; böylece PDF sınıflandırması veya VLM/Omni model veri hattı deneylerinde yeniden kullanılabiliyor
SafeDocs PDF korpusu ve sınıflandırma hedefi
- Common Crawl, internetin bir web arşividir ve PDF ile karşılaştığında tüm dosya yerine yalnızca ilk 1 MB’ı saklayıp geri kalanını keser
- SafeDocs veya
CC-MAIN-2021-31-PDF-UNTRUNCATED, Common Crawl anlık görüntüsündeki PDF’leri yeniden indirip kesilmemiş sürümlerden oluşturulan bir korpustur - Bu veri seti yaklaşık 8,4 milyon PDF’ten oluşur ve sıkıştırma açıldığında toplam boyutu 8 TB’tır
- Amaç, PDF’leri konu etiketlerine göre sınıflandırmaktır
- Örnek: Linear Algebra PDF’i → Math
- Örnek: Anatomy ders kitabı → Medicine
URL meta verisiyle etiket oluşturma
- Tüm 8 TB’lık içerik doğrudan işlenmiyor; bunun yerine özgün veri setinin meta verileri kullanılıyor
- Meta verinin boyutu yaklaşık 8 GB metin
- Ana sütun
url
- URL içindeki dosya adı, belgenin niteliğini tahmin etmek için ipucu sağlıyor
- Örnek:
Introduction_to_Python_Programming_-_WEB.pdf - Bu dosya adı, belgenin eğitim veya teknik içerikli olabileceğini düşündürüyor
- Örnek:
- Etiketleme yöntemi FineWeb yaklaşımından alınıyor
- LLM, yapılandırılmamış metinden etiket üreten teacher rolünde
- Üretilen etiketlerle daha küçük bir sınıflandırıcı eğitilen student rolünde
- Prompt ve Llama-3-70B, together API üzerinden kullanılarak ilk 100 bin etiket üretildi
- Etiket dağılımı dengesiz olduğu ve küçük sınıf sayısı fazla olduğu için, 250’den az örneğe sahip etiketler
otheraltında birleştirildi - Denge sağlamak için her etiketten en fazla 5.000 örnek alındı ve toplam 59 bin etiketli bir veri seti oluşturuldu
Embedding modelini fine-tune etme denemesi
- İlk yaklaşım, URL metnini bir embedding modeliyle işleyip bunu sınıflandırma problemine göre fine-tune etmekti
- FineWeb Edu, snowflake-arctic-embed-m kullanmıştı; ancak deneylerde Massive Text Embeddings Benchmark üzerindeki üst sıralardaki modeller de incelendi
- Yaklaşık 7B parametreli modellerin 8 milyon PDF’i hızlıca sınıflandırmak için uygun olmayacağı düşünüldü ve daha küçük adaylar denendi
Stella_en_400Mgte-large-1.5- Arctic Embed
all-mpnet-basedistillbertflant-t5-smallbert-base-uncased
- Hugging Face kullanılarak temel model sabit tutuldu, yalnızca embedding ve sınıflandırma head’i eğitildi; böylece notebook üzerinde de çalıştırılabildi
- Bu yaklaşımda en iyi model
Alibaba-large-gte-1.5oldu ve doğruluk %59,14 olarak kaldı
XGBoost ile performansı artırmak
- İkinci yaklaşım, embedding modelini doğrudan sınıflandırıcı olarak kullanmak yerine URL embedding’leri üretip bunları XGBoost girdisi olarak kullanmaktı
- Metin embedding’e dönüştürüldükten sonra, XGBoost tablo biçimli veri gibi eğitildi
- Tüm PDF bağlantıları için embedding üretildi; sıkıştırma açılmış haliyle boyut yaklaşık 40 GB
- Embedding verisi Kaggle üzerinde yayınlandı
- Tek büyük bir sınıflandırıcı yerine, sınıf bazında ikili sınıflandırıcılar eğitildi
- Bu fikir eski bir Kaggle competition’dan alındı
- XGBoost embedding modelinin ortalama performansı şöyle
- accuracy: 0.839750
- precision: 0.859758
- recall: 0.819733
- f1: 0.838937
- Bu yaklaşım, ilk derin öğrenme yaklaşımına göre doğrulukta 24,83 yüzde puan artış sağladı
TF-IDF ve LinearRegressor sonuçları
- Üçüncü yaklaşım, derin öğrenme embedding’leri olmadan TF-IDF ile metin özellikleri üretip model eğitmekti
- TF-IDF, belirli bir belgede sık görülen ama tüm korpus genelinde nadir olan kelimelere daha yüksek ağırlık verir
- TF-IDF tabanlı XGBoost performansı şöyle
- accuracy: 0.675200
- precision: 0.683185
- recall: 0.646316
- f1: 0.662497
- TF-IDF tabanlı LinearRegressor ensemble’ı da denendi
- accuracy: 0.706802
- precision: 0.723558
- recall: 0.663038
- f1: 0.690286
- Her iki yöntem de ilk derin öğrenme taban çizgisi olan %59,14’ün üstüne çıktı
Daha fazla LLM etiketiyle derin öğrenmeyi yeniden denemek
- Tekli derin öğrenme sınıflandırıcısı için hedef %70 doğruluk olarak belirlendi ve daha fazla etiket üretildi
- Ek etiketler Llama3.1-7B ile 400 bin adet üretildi
- Öncekine göre daha küçük bir model kullanılmasının nedeni çıkarım maliyetini azaltmaktı
- Deneylerde veri miktarı arttıkça performansın da iyileştiği görüldü
- Meta’nın The Llama 3 Herd of Models makalesinden etkilenilerek
roberta-baseve mevcutgte-largedenendi gte-large, eğitim veri setinde en fazla %69,22 doğruluk elde etti
Modellere göre nihai performans
- Deney sonuçları şöyle
| 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% |
- Sonuç olarak en iyi model XGBoost embeddings oldu
- Hiperparametre taraması uygulanan XGBoost embedding modeli, %85,26 doğrulukla en yüksek sonuca ulaştı
Tüm korpusu sınıflandırma ve görselleştirme
- Nihai kod, embedding’leri belleğe yükleyip tahmin yapan basit bir yapıya sahip
- Tüm PDF’ler için etiket tahmini yaklaşık 1 saat sürdü
- GPU çalıştırma ayarı yapılmadığı için GPU kullanılmadı
- Tahmin sonuçları ve embedding’ler PCA ve UMAP ile görselleştirildi
- PCA, tüm veri setindeki yaklaşık 8,5 milyon noktayı tek bir görselde gösteriyor
- UMAP daha büyük bir makine kiralanarak çalıştırıldı
- Azure
Standard_E48s_v3 - 48 çekirdek
- 384 GB RAM
- 768 GB disk
- UMAP, 6,5 milyon noktaya kadar çalıştırıldı; bunun ötesinde bellek sınırına çok yaklaşıldı
- Azure
Açık yayınlanan veri ve kod
- Nihai veri seti Hugging Face repo üzerinde yayınlandı
- Yalnızca embedding gerekiyorsa Kaggle dataset üzerinden indirilebilir
- Özgün SafeDocs veri setinin indirme bilgileri S3 bucket içinde yer alıyor
- Sınıflandırma kodu, GitHub monorepo içindeki classify_metadata yolunda bulunuyor
- PDF’ler veri ve görselleri birlikte barındırdığı için, VLM/Omni model eğitim veri hattında daha sık kullanılabilecek bir format olarak görülüyor
1 yorum
Hacker News yorumları
2009 civarında Elsevier, Springer gibi bilimsel yayıncıların yaklaşık 5,7 milyon araştırma makalesi (PDF, kapalı korpus) üzerinde benzer bir görselleştirme çalışması yapmıştık
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...
Birinci yazar bendim
2009'daki benchmark 13 saat idiyse, şimdi hesaplamanın ne kadar hızlı biteceğini merak ediyorum
Bugün olsa herkes o veriyi UMAP'e atardı sanırım
Ayrıca ampersand
&işaretininandden farklı bir anlamı olup olmadığını, yoksa sadece atıf biçimi mi olduğunu merak ediyorumEmbedding'lerin bugünlerde daha az konuşulan avantajlarından biri, mevcut istatistiksel modelleme tekniklerinin neredeyse aynen uygulanabilmesi ve bonus olarak kök bulma gibi yaygın doğal dil işleme ön işlemlerinin inceliklerinden ve tuzaklarından kaçınmayı sağlaması
Bu yazı, özellikle uzun belgeler için doğal dil işlemenin ilk adımı olarak doğrudan LLM embedding'leri kullanmanın neden pratik olduğunu iyi gösteriyor
Yazının yazarıyım. Bunun HN'in en tepesine çıkacağını beklemiyordum; istediğinizi sorabilirsiniz
Koda baktım ama bana yabancı gelen çok şey vardı; sorun Python'ın kendisinden ziyade bilmediğim çok sayıda analiz tekniği gibi göründü
PDF'ler zaten sınıflandırılmış mıydı?
İlginç ve ayrıntısı bol bir yazıydı. Ancak bire-çok ikili öğrenme yaparken sınıf dengesini sağlamak ve çıkarımda en yüksek olasılığı kullanmak, olasılıkların düzgün kalibre edilmemesine yol açıp sorun yaratabilir
argmaxalmadan önce ayrıca olasılık kalibrasyonu yapıp yapmadığınızı merak ediyorum2006'da bile ders kitaplarından oluşan birkaç 1TB'lık torrent koleksiyonu vardı
Şimdi boyut ve sayı olarak daha da büyümüş olmalı
2008'e kadar ders kitabı, çözüm kitabı, ilgili PDF ve diğer materyalleri bulmanın 6–8 yıl sonrasına kıyasla çok daha kolay olduğunu hatırlıyorum
En büyük fark, Chegg gibi çeşitli sitelerin bu materyalleri emip bir şekilde yeniden satmaya başlamasıydı
Çoğu elektronik ve mühendislikle ilgili; yaklaşık 2 yıl önce GraphQL ve OSR materyalleriyle oynamak istediğimde torrentlerden indirmiştim
Bende yaklaşık 20–40TB PDF var (tekilleştirme öncesi)
8TB elbette çok ama dünyadaki tüm PDF'lerin ölçeğine hiç yaklaşmıyor
Benim de okumak için topladığım e-kitap, PDF ve çizgi roman koleksiyonum epey var ama 20TB'lık bir kütüphanenin ne kadar büyük olduğunu hayal etmekte zorlanıyorum
8TB'den çok daha fazla PDF olduğu kesin. Muhtemelen içinde çok fazla tekrar vardır ama çok görüntü olduğu için tekilleştirmenin iyi çalışmayacağını düşünüyorum
İlginç ve eğlenceli bir yazı. PDF'lerden tablo biçimli veri çıkarmak için çeşitli LLM/üretken yapay zeka çözümlerini denedim ama sonuçlar beklediğimden daha kötüydü
Metin dizgelerini çıkarmada veya özetlemede, örneğin toplam tutarın ne olduğu ya da ne zaman yazdırıldığı gibi sorularda iyi; ancak CSV'ye güvenilir biçimde çıkarmada epey hata var
Aryn partitioning service'i bir deneyebilirsiniz: https://www.aryn.ai/post/announcing-the-aryn-partitioning-se...
Kısa süre önce yayınlandı ve PDF'lerdeki tablo verilerini pandas dataframe'e dönüştüren bir örneği de var. Sonrasında CSV'ye çevirebilirsiniz: https://sycamore.readthedocs.io/en/stable/aryn_cloud/get_sta...
Harika. Airtrain'de de embedding'lerin sınıflandırma modeli oluşturmada çok değerli olduğunu gördük
Çok miktarda metin ve embedding ile çalışmak istiyorsanız, yakın zamanda fineweb-edu'nun (yazıda da bahsediliyor) tamamını tekilleştirip embedding'lerini çıkararak sonuç veri kümesini Hugging Face'e yükledik: https://huggingface.co/datasets/airtrain-ai/fineweb-edu-fort...
Çok güzel bir fikir. Şu sıralar çok boş vaktim yok ama bir süre önce benzer ama farklı bir proje yapmayı düşünmüştüm
Sosyal bilimler için faydalı zaman serisi verilerini indiren açık kaynaklı bir araç yapmak istiyordum. Örneğin gıda fiyatlarına ilişkin sosyal medya yorumlarının zaman serisi gibi
LLM'ler sayesinde insanların henüz pek kullanmadığı birkaç yeni araştırma açısı açılmış gibi görünüyor
Bir gün o yan projeyi yaparsam buradan birkaç iyi fikir ödünç alabilirim
Harika iş. Ulusal kütüphanelerin ara sıra yaptığına benzer şekilde, birden fazla yaklaşımı birlikte kullanmışsınız. Ben de her tür embedding → sınıflandırıcı ve LDA denedim
Prompt'u merak ediyorum: https://github.com/snat-s/m/blob/main/classify_metadata/prom...
Bu aslında URL türüne göre sınıflandırmasını isteyen bir prompt vermeye benzemiyor mu?