2 puan yazan GN⁺ 2024-08-20 | 1 yorum | WhatsApp'ta paylaş
  • 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.5 ile %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
  • 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 other altı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_400M
    • gte-large-1.5
    • Arctic Embed
    • all-mpnet-base
    • distillbert
    • flant-t5-small
    • bert-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.5 oldu 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
  • 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-base ve mevcut gte-large denendi
  • 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ı

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

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

    • Bu makalelerin tamamını kazımak için muazzam bir iş gerekmiş olmalı
      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
    • Yazar sırasının nasıl belirlendiğini merak ediyorum
      Ayrıca ampersand & işaretinin andden farklı bir anlamı olup olmadığını, yoksa sadece atıf biçimi mi olduğunu merak ediyorum
  • Embedding'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

    • İstatistiksel tekniklerin embedding'lerin kendisine uygulanabildiği mi kastediliyor? Bunun nasıl çalıştığını merak ediyorum
  • Yazının yazarıyım. Bunun HN'in en tepesine çıkacağını beklemiyordum; istediğinizi sorabilirsiniz

    • Bu tür analizleri öğrenmek için önerebileceğiniz kaynaklar var mı merak ediyorum
      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ü
    • Kullanılan çeşitli tekniklerin doğruluğundan bahsetmişsiniz; bu doğruluğu nasıl hesapladığınızı biraz daha açıklayabilir misiniz merak ediyorum
      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
    argmax almadan önce ayrıca olasılık kalibrasyonu yapıp yapmadığınızı merak ediyorum

  • 2006'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ı

    • Bu, bu tür materyalleri biriktirip belirsiz iş modelleri kurma işi ciddileşmeden önceydi
      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ı
    • Kişisel olarak yaklaşık 350GB eski servis kılavuzu, veri sayfası, katalog ve süreli yayınım var
      Çoğu elektronik ve mühendislikle ilgili; yaklaşık 2 yıl önce GraphQL ve OSR materyalleriyle oynamak istediğimde torrentlerden indirmiştim
    • İsterseniz Anna's Archive'da onlarca TB ölçeğinde torrent çok var
  • 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

    • Ne topladığınızı merak ediyorum. Ağırlıklı olarak LibGen gibi şeyleri mi aynalıyorsunuz?
      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
    • Yayınlamayı düşünüyor musunuz merak ediyorum. Yoksa o veri kümesinde buna izin verilmiyor mu?
      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

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