2 Punkte von GN⁺ 2024-08-20 | 1 Kommentare | Auf WhatsApp teilen
  • Ein Experiment, das die rund 8,4 Millionen PDFs von SafeDocs nicht anhand des Volltexts, sondern über URL-Metadaten klassifiziert, um einen großen Dokumentkorpus zu realistischen Kosten zu taggen
  • Statt der gesamten 8 TB an PDFs werden nur etwa 8 GB Metadaten und von LLMs erzeugte Labels verwendet; damit wird ein FineWeb-artiger Teacher/Student-Ansatz auf die Klassifikation von PDF-URLs angewendet
  • Ein einzelner Deep-Learning-Klassifikator kam mit Alibaba-large-gte-1.5 nur auf 59,14 % Genauigkeit, doch die Kombination aus URL-Embeddings und XGBoost stieg nach Hyperparameter-Suche auf 85,26 %
  • Ein auf TF-IDF basierendes XGBoost- sowie ein LinearRegressor-Ensemble erreichten 67,52 % bzw. 70,68 % und übertrafen damit einfache traditionelle NLP-Methoden bereits die anfängliche Deep-Learning-Basislinie
  • Das finale Label-Dataset, die Embeddings, Informationen zum Original-Download und der Code wurden veröffentlicht und können für PDF-Klassifikation oder Datenpipeline-Experimente für VLM-/Omni-Modelle wiederverwendet werden

SafeDocs-PDF-Korpus und Ziel der Klassifikation

  • Common Crawl ist ein Web-Archiv des Internets und speichert bei PDFs nicht die gesamte Datei, sondern nur die ersten 1 MB und schneidet den Rest ab
  • SafeDocs bzw. CC-MAIN-2021-31-PDF-UNTRUNCATED ist ein Korpus, der die PDFs aus einem Common-Crawl-Snapshot erneut herunterlädt und als ungekürzte Versionen bereitstellt
  • Das Dataset besteht aus etwa 8,4 Millionen PDFs und hat entpackt einen Gesamtumfang von 8 TB
  • Ziel ist es, PDFs nach Themen-Labels zu klassifizieren
    • Beispiel: Ein Linear Algebra-PDF wird als Math eingestuft
    • Beispiel: Ein Lehrbuch zu Anatomy wird als Medicine eingestuft

Labels aus URL-Metadaten erzeugen

  • Statt die gesamten 8 TB Originaldaten direkt zu verarbeiten, werden die Metadaten des ursprünglichen Datasets verwendet
    • Die Metadaten umfassen etwa 8 GB Text
    • Die wichtigste Spalte ist url
  • Der Dateiname in der URL liefert Hinweise auf die Art des Dokuments
    • Beispiel: Introduction_to_Python_Programming_-_WEB.pdf
    • Dieser Dateiname deutet darauf hin, dass es sich um ein Bildungs- oder Technikdokument handeln könnte
  • Die Labeling-Methode stammt aus dem Ansatz von FineWeb
    • Ein LLM fungiert als Teacher, der aus unstrukturiertem Text Labels erzeugt
    • Mit diesen erzeugten Labels wird dann ein kleinerer Klassifikator als Student trainiert
  • Mit dem Prompt und Llama-3-70B über die together-API wurden zunächst 100.000 Labels erzeugt
  • Da die Label-Verteilung unausgeglichen war und es viele kleine Klassen gab, wurden Labels mit weniger als 250 Vorkommen zu other zusammengefasst
  • Anschließend wurden pro Label höchstens 5.000 Samples übernommen, um die Verteilung auszugleichen; so entstand ein Label-Dataset mit insgesamt 59.000 Einträgen

Versuch eines Fine-Tunings von Embedding-Modellen

  • Der erste Ansatz bestand darin, den URL-Text mit einem Embedding-Modell zu verarbeiten und es für die Klassifikationsaufgabe feinzutunen
  • FineWeb Edu verwendete snowflake-arctic-embed-m, im Experiment wurden jedoch auch Spitzenmodelle aus dem Massive Text Embeddings Benchmark betrachtet
  • Modelle mit rund 7B Parametern wurden als ungeeignet für eine schnelle Klassifikation von 8 Millionen PDFs eingeschätzt, daher wurden kleinere Kandidaten getestet
    • Stella_en_400M
    • gte-large-1.5
    • Arctic Embed
    • all-mpnet-base
    • distillbert
    • flant-t5-small
    • bert-base-uncased
  • Mit Hugging Face wurde das Basismodell eingefroren und nur Embeddings sowie der Klassifikationskopf trainiert, sodass alles auch in einem Notebook ausführbar war
  • Das beste Modell in diesem Ansatz war Alibaba-large-gte-1.5 mit einer Genauigkeit von 59,14 %

Leistung mit XGBoost steigern

  • Der zweite Ansatz nutzte das Embedding-Modell nicht direkt als Klassifikator, sondern erzeugte zunächst URL-Embeddings und verwendete diese dann als Eingabe für XGBoost
  • Der Text wurde in Embeddings umgewandelt und XGBoost anschließend wie auf tabellarischen Daten trainiert
  • Für alle PDF-Links wurden Embeddings erzeugt; entpackt umfassen sie etwa 40 GB
    • Die Embedding-Daten sind auf Kaggle veröffentlicht
  • Statt eines großen Klassifikators wurden binäre Klassifikatoren pro Klasse trainiert
  • Die durchschnittliche Leistung des XGBoost-Embedding-Modells war wie folgt
    • accuracy: 0.839750
    • precision: 0.859758
    • recall: 0.819733
    • f1: 0.838937
  • Dieser Ansatz erzielte eine um 24,83 Prozentpunkte höhere Genauigkeit als der anfängliche Deep-Learning-Ansatz

Ergebnisse mit TF-IDF und LinearRegressor

  • Der dritte Ansatz erzeugte Textmerkmale mit TF-IDF statt mit Deep-Learning-Embeddings und trainierte darauf ein Modell
  • TF-IDF gewichtet Wörter höher, die in einem bestimmten Dokument häufig vorkommen, im Gesamtkorpus aber selten sind
  • Die Leistung des TF-IDF-basierten XGBoost war wie folgt
    • accuracy: 0.675200
    • precision: 0.683185
    • recall: 0.646316
    • f1: 0.662497
  • Zusätzlich wurde ein auf TF-IDF basierendes LinearRegressor-Ensemble getestet
    • accuracy: 0.706802
    • precision: 0.723558
    • recall: 0.663038
    • f1: 0.690286
  • Beide Verfahren lagen bei der Genauigkeit über der anfänglichen Deep-Learning-Basislinie von 59,14 %

Deep Learning mit mehr LLM-Labels erneut versuchen

  • Für den einzelnen Deep-Learning-Klassifikator wurde ein Ziel von 70 % Genauigkeit gesetzt und es wurden mehr Labels erzeugt
  • Mit Llama3.1-7B wurden zusätzlich 400.000 Labels erstellt
    • Ein kleineres Modell wurde gewählt, um die Inferenzkosten zu senken
  • In den Experimenten zeigte sich, dass mehr Daten zu besserer Leistung führten
  • Beeinflusst von Metas The Llama 3 Herd of Models wurden roberta-base und das bestehende gte-large getestet
  • gte-large erreichte auf dem Trainings-Dataset maximal 69,22 % Genauigkeit

Endergebnisse nach Modell

  • Die Versuchsergebnisse sehen wie folgt aus
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%
  • Das insgesamt beste Modell war XGBoost embeddings
  • Das XGBoost-Embedding-Modell mit Hyperparameter-Suche erzielte mit 85,26 % Genauigkeit das beste Ergebnis

Klassifikation des Gesamtkorpus und Visualisierung

  • Der finale Code ist einfach aufgebaut: Er lädt die Embeddings in den Speicher und führt anschließend die Vorhersagen aus
  • Die Vorhersage der Tags für den gesamten PDF-Korpus dauerte etwa 1 Stunde
    • Es wurde keine GPU verwendet, da keine GPU-Ausführung konfiguriert war
  • Die Vorhersagen und Embeddings wurden mit PCA und UMAP visualisiert
  • Mit PCA wurden etwa 8,5 Millionen Punkte des gesamten Datasets in einem einzigen Bild visualisiert
  • UMAP wurde auf einer größeren gemieteten Maschine ausgeführt
    • Azure Standard_E48s_v3
    • 48 Kerne
    • 384 GB RAM
    • 768 GB Festplattenspeicher
    • UMAP lief bis zu 6,5 Millionen Punkten; darüber hinaus wurde der Speicher knapp

Veröffentlichte Daten und Code

  • Das finale Dataset ist im Hugging Face repo veröffentlicht
  • Wer nur die Embeddings braucht, kann sie aus dem Kaggle dataset herunterladen
  • Download-Informationen für das ursprüngliche SafeDocs-Dataset finden sich im S3 bucket
  • Der Klassifikationscode liegt im GitHub-Monorepo unter classify_metadata
  • PDFs enthalten eine Mischung aus Daten und Bildern und könnten daher in Trainingspipelines für VLM-/Omni-Modelle noch häufiger genutzt werden

1 Kommentare

 
GN⁺ 2024-08-20
Hacker-News-Kommentare
  • Um 2009 herum habe ich eine ähnliche Visualisierung für etwa 5,7 Millionen Forschungsarbeiten (PDFs, privater Korpus) von wissenschaftlichen Verlagen wie Elsevier und Springer gemacht.
    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...
    Ich bin der Erstautor.

    • Es muss enorm viel Arbeit gewesen sein, all diese Papers zu minen.
      Wenn der Benchmark 2009 13 Stunden betrug, frage ich mich, wie schnell die Berechnung heute abgeschlossen wäre.
      Heutzutage würde vermutlich jeder diese Daten in UMAP kippen.
    • Ich frage mich, wie die Autorenreihenfolge festgelegt wird.
      Und ob das Ampersand & eine andere Bedeutung als and hat oder einfach nur das Zitierformat ist.
  • Einer der Vorteile von Embeddings, über den heute weniger gesprochen wird, ist, dass man bestehende statistische Modellierungsmethoden fast unverändert anwenden kann und nebenbei die Feinheiten und Fallstricke üblicher NLP-Vorverarbeitung wie Stemming vermeidet.
    Dieser Artikel zeigt besonders gut, warum es praktisch ist, gerade bei langen Dokumenten direkt LLM-Embeddings als ersten Schritt der NLP-Pipeline zu verwenden.

    • Heißt das, dass man statistische Methoden auf die Embeddings selbst anwenden kann? Ich frage mich, wie das funktioniert.
  • Ich bin der Autor. Ich hätte nicht erwartet, dass dieser Beitrag ganz oben auf HN landet; fragt mich alles.

    • Ich frage mich, ob es empfehlenswerte Materialien gibt, um diese Art von Analyse zu lernen.
      Ich habe mir den Code angesehen, aber vieles war mir unbekannt; weniger wegen Python selbst, sondern eher wegen der vielen Analysemethoden, die ich nicht kenne.
    • Du erwähnst die Genauigkeit mehrerer verwendeter Methoden. Kannst du genauer erklären, wie du diese Genauigkeit berechnet hast?
      Waren die PDFs bereits klassifiziert?
  • Ein interessanter und detailreicher Artikel. Allerdings kann es problematisch sein, bei One-vs-Rest-Binärtraining die Klassenbalance herzustellen und bei der Inferenz die höchste Wahrscheinlichkeit zu verwenden, weil die Wahrscheinlichkeiten dann möglicherweise nicht richtig kalibriert sind.
    Ich frage mich, ob vor dem argmax eine separate Wahrscheinlichkeitskalibrierung vorgenommen wird.

  • Schon 2006 gab es mehrere 1-TB-Torrent-Sammlungen mit Lehrbüchern.
    Heute dürften Umfang und Anzahl größer sein.

    • Das war noch, bevor es richtig losging, solche Materialien zu horten und fragwürdige Geschäftsmodelle darum zu bauen.
      Ich erinnere mich, dass es bis 2008 viel einfacher war, Lehrbücher, Lösungshefte, zugehörige PDFs und anderes Material zu finden als 6 bis 8 Jahre später.
      Der größte Unterschied war, dass mehrere Sites wie Chegg anfingen, solche Materialien aufzusaugen und auf irgendeine Weise weiterzuverkaufen.
    • Ich persönlich habe etwa 350 GB an alten Service-Handbüchern, Datenblättern, Katalogen und Periodika.
      Das meiste sind Unterlagen zu Elektronik und Ingenieurwesen, die ich vor etwa zwei Jahren aus Torrents geladen habe, als ich mit GraphQL- und OSR-Materialien herumspielen wollte.
    • Wenn du willst, gibt es in Anna's Archive viele Torrents im Umfang von Dutzenden TB.
  • Ich habe etwa 20–40 TB PDFs (vor Deduplizierung).
    8 TB sind zwar viel, kommen aber bei Weitem nicht an die Gesamtmenge aller PDFs auf der Welt heran.

    • Ich frage mich, was du sammelst. Spiegelst du hauptsächlich Dinge wie LibGen?
      Ich habe auch eine ziemlich große Sammlung von E-Books, PDFs und Comics zum Lesen, aber ich kann mir kaum vorstellen, wie groß eine 20-TB-Bibliothek ist.
    • Ich frage mich, ob du vorhast, sie zu veröffentlichen. Oder ist das bei diesem Dataset nicht erlaubt?
      Es ist klar, dass es weit mehr PDFs als 8 TB gibt. Vermutlich sind darin viele Duplikate, aber wegen vieler Bilder dürfte Deduplizierung nicht besonders gut funktionieren.
  • Ein interessanter und unterhaltsamer Artikel. Ich habe mehrere LLM-/generative-AI-Lösungen ausprobiert, um tabellarische Daten aus PDFs zu extrahieren, aber die Ergebnisse waren schlechter als erwartet.
    Bei Textextraktion oder Zusammenfassungen – etwa Fragen danach, wie hoch der Gesamtbetrag ist oder wann etwas ausgedruckt wurde – funktionieren sie gut, aber beim zuverlässigen Export nach CSV gibt es ziemlich viele Fehler.

  • Cool. Auch bei Airtrain haben wir festgestellt, dass Embeddings sehr wertvoll sind, um Klassifikationsmodelle zu erstellen.
    Wenn du mit viel Text und Embeddings arbeiten möchtest: Wir haben kürzlich das komplette fineweb-edu (auch im Artikel erwähnt) dedupliziert, eingebettet und das resultierende Dataset auf Hugging Face hochgeladen: https://huggingface.co/datasets/airtrain-ai/fineweb-edu-fort...

  • Eine sehr coole Idee. Ich habe derzeit nicht viel freie Zeit, aber vor Kurzem habe ich über ein ähnliches, wenn auch anderes Projekt nachgedacht.
    Ich wollte ein Open-Source-Tool bauen, das Zeitreihendaten herunterlädt, die für die Sozialwissenschaften nützlich sind – zum Beispiel Zeitreihen von Social-Media-Kommentaren zu Lebensmittelpreisen.
    Durch LLMs scheinen sich mehrere neue Forschungsansätze zu eröffnen, die noch nicht viele Leute nutzen.
    Wenn ich dieses Side Project irgendwann angehe, könnte ich mir ein paar gute Ideen daraus nehmen.

  • Tolle Arbeit. Ähnlich wie es Nationalbibliotheken manchmal machen, wurden mehrere Ansätze kombiniert. Ich habe auch alle möglichen Embedding → Klassifikator-Ansätze oder LDA ausprobiert.
    Der Prompt interessiert mich: https://github.com/snat-s/m/blob/main/classify_metadata/prom...
    Ist das nicht im Grunde ähnlich, als würde man per Prompt nach URL-Typen klassifizieren lassen?