2 points par GN⁺ 2024-08-20 | 1 commentaires | Partager sur WhatsApp
  • Il s’agit d’une expérimentation visant à classer environ 8,4 millions de PDF de SafeDocs à partir des métadonnées d’URL plutôt que du texte intégral, afin d’étiqueter un vaste corpus documentaire à un coût réaliste
  • Au lieu des 8 To de PDF complets, l’approche utilise environ 8 Go de métadonnées et des labels générés par LLM, en appliquant une approche teacher/student à la FineWeb à la classification d’URL de PDF
  • Un classifieur deep learning unique plafonnait à 59,14 % de précision avec Alibaba-large-gte-1.5, mais la combinaison embeddings d’URL + XGBoost monte à 85,26 % après recherche d’hyperparamètres
  • Un ensemble XGBoost et LinearRegressor basé sur TF-IDF a aussi obtenu respectivement 67,52 % et 70,68 %, montrant que des méthodes NLP traditionnelles simples dépassent la baseline deep learning initiale
  • Le dataset final de labels, les embeddings, les informations de téléchargement d’origine et le code sont publiés pour pouvoir être réutilisés dans des expériences de classification de PDF ou de pipelines de données pour des modèles VLM/Omni

Corpus PDF SafeDocs et objectif de classification

  • Common Crawl est une archive web d’Internet et, lorsqu’il rencontre un PDF, il ne stocke que le premier mégaoctet du fichier complet avant de tronquer le reste
  • SafeDocs ou CC-MAIN-2021-31-PDF-UNTRUNCATED est un corpus constitué en retéléchargeant les PDF d’un snapshot Common Crawl pour en faire une version non tronquée
  • Ce dataset contient environ 8,4 millions de PDF, pour un volume total d’environ 8 To une fois décompressé
  • L’objectif est de classer les PDF par labels thématiques
    • Ex. : un PDF de Linear Algebra relève de Math
    • Ex. : un manuel d’Anatomy relève de Medicine

Créer des labels à partir des métadonnées d’URL

  • Au lieu de traiter directement les 8 To de contenu complet, l’approche utilise les métadonnées du dataset d’origine
    • Les métadonnées représentent environ 8 Go de texte
    • La colonne clé est url
  • Le nom de fichier dans l’URL donne des indices sur la nature du document
    • Ex. : Introduction_to_Python_Programming_-_WEB.pdf
    • Ce nom de fichier suggère qu’il s’agit probablement d’un document pédagogique ou technique
  • La méthode de labellisation reprend l’approche de FineWeb
    • un teacher où un LLM génère des labels à partir de texte non structuré
    • un student entraîné ensuite sur ces labels générés
  • Le prompt et Llama-3-70B via l’API together ont servi à générer un premier lot de 100 000 labels
  • Comme la distribution des labels est déséquilibrée et comporte beaucoup de petites classes, les labels avec moins de 250 occurrences ont été regroupés dans other
  • En prenant ensuite au maximum 5 000 échantillons par label pour rééquilibrer l’ensemble, cela donne un dataset final de 59 000 labels

Tentative de fine-tuning d’un modèle d’embeddings

  • La première approche consiste à traiter le texte des URL avec un modèle d’embeddings, puis à le fine-tuner pour le problème de classification
  • FineWeb Edu utilisait snowflake-arctic-embed-m, mais l’expérimentation a aussi examiné des modèles bien classés dans le Massive Text Embeddings Benchmark
  • Les modèles d’environ 7B de paramètres ont été jugés peu adaptés à une classification rapide de 8 millions de PDF, donc des candidats plus petits ont été testés
    • Stella_en_400M
    • gte-large-1.5
    • Arctic Embed
    • all-mpnet-base
    • distillbert
    • flant-t5-small
    • bert-base-uncased
  • Avec Hugging Face, le modèle de base a été figé et seuls les embeddings et la tête de classification ont été entraînés, afin de pouvoir exécuter le tout même sur notebook
  • Dans cette configuration, le meilleur modèle a été Alibaba-large-gte-1.5, avec une précision de 59,14 %

Faire monter les performances avec XGBoost

  • La deuxième approche n’utilise pas directement le modèle d’embeddings comme classifieur, mais génère des embeddings d’URL pour les donner en entrée à XGBoost
  • Le texte est transformé en embeddings, puis XGBoost est entraîné comme sur des données tabulaires
  • Les embeddings de l’ensemble des liens PDF ont été générés, pour un volume d’environ 40 Go une fois décompressé
    • Les données d’embeddings sont publiées sur Kaggle
  • Plutôt qu’un seul gros classifieur, l’approche entraîne des classifieurs binaires par classe
  • Les performances moyennes du modèle XGBoost sur embeddings sont les suivantes
    • accuracy: 0.839750
    • precision: 0.859758
    • recall: 0.819733
    • f1: 0.838937
  • Cette approche gagne 24,83 points de précision par rapport à l’approche deep learning initiale

Résultats TF-IDF et LinearRegressor

  • La troisième approche construit des caractéristiques textuelles avec TF-IDF sans embeddings deep learning, puis entraîne le modèle
  • TF-IDF donne plus de poids aux mots fréquents dans un document donné mais rares dans l’ensemble du corpus
  • Les performances de XGBoost basé sur TF-IDF sont les suivantes
    • accuracy: 0.675200
    • precision: 0.683185
    • recall: 0.646316
    • f1: 0.662497
  • Un ensemble LinearRegressor basé sur TF-IDF a aussi été testé
    • accuracy: 0.706802
    • precision: 0.723558
    • recall: 0.663038
    • f1: 0.690286
  • Les deux méthodes dépassent la baseline deep learning initiale de 59,14 %

Refaire du deep learning avec davantage de labels LLM

  • L’objectif pour le classifieur deep learning unique a été fixé à 70 % de précision, ce qui a conduit à générer davantage de labels
  • 400 000 labels supplémentaires ont été générés avec Llama3.1-7B
    • Ce modèle plus petit a été choisi pour réduire le coût d’inférence
  • Les expériences montrent que les performances augmentent avec la quantité de données
  • Inspiré par l’article de Meta The Llama 3 Herd of Models, l’auteur a testé roberta-base et le gte-large déjà utilisé
  • gte-large a atteint jusqu’à 69,22 % de précision sur le dataset d’entraînement

Performances finales par modèle

  • Les résultats expérimentaux sont les suivants
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%
  • Au final, le meilleur modèle est XGBoost embeddings
  • Le modèle XGBoost sur embeddings avec recherche d’hyperparamètres obtient le meilleur résultat, avec 85,26 % de précision

Classification du corpus complet et visualisation

  • Le code final repose sur une structure simple : charger les embeddings en mémoire puis lancer les prédictions
  • La prédiction des tags sur l’ensemble des PDF prend environ 1 heure
    • Aucun réglage d’exécution GPU n’ayant été activé, le GPU n’a pas été utilisé
  • Les prédictions et embeddings ont été visualisés avec PCA et UMAP
  • La PCA visualise environ 8,5 millions de points du dataset complet dans une seule image
  • UMAP a été exécuté sur une machine plus puissante louée pour l’occasion
    • Azure Standard_E48s_v3
    • 48 cœurs
    • 384 Go de RAM
    • 768 Go de disque
    • UMAP a pu monter jusqu’à 6,5 millions de points, au-delà la mémoire était presque saturée

Données et code publiés

  • Le dataset final est publié dans ce repo Hugging Face
  • Si seuls les embeddings sont nécessaires, ils peuvent être récupérés depuis ce dataset Kaggle
  • Les informations de téléchargement du dataset SafeDocs d’origine sont disponibles dans ce bucket S3
  • Le code de classification se trouve dans le chemin classify_metadata du monorepo GitHub
  • Comme les PDF mélangent données et images, ils pourraient être davantage utilisés dans les pipelines d’entraînement de modèles VLM/Omni

1 commentaires

 
GN⁺ 2024-08-20
Avis de Hacker News
  • Vers 2009, j’ai réalisé un travail de visualisation similaire sur environ 5,7 millions d’articles de recherche (PDF, corpus privé) d’éditeurs scientifiques comme Elsevier et Springer
    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...
    J’en suis le premier auteur

    • Extraire tout le contenu de ces articles a dû demander un travail énorme
      Si le benchmark de 2009 était de 13 heures, je me demande à quelle vitesse le calcul se terminerait aujourd’hui
      De nos jours, tout le monde aurait probablement envoyé ces données dans UMAP
    • Je me demande comment l’ordre des auteurs est déterminé
      Et si l’esperluette & a un sens différent de and, ou si c’est simplement un format de citation
  • L’un des avantages des embeddings dont on parle moins aujourd’hui, c’est qu’on peut leur appliquer presque tels quels les méthodes de modélisation statistique classiques, avec en prime l’évitement des subtilités et pièges des prétraitements NLP courants comme la racinisation
    Cet article montre particulièrement bien pourquoi il est pratique d’utiliser directement des embeddings LLM comme première étape de traitement du langage naturel, surtout pour les documents longs

    • Tu veux dire qu’on peut appliquer des méthodes statistiques aux embeddings eux-mêmes ? Je me demande comment cela fonctionne
  • Je suis l’auteur. Je ne pensais pas que cet article arriverait en tête de HN, vous pouvez me poser n’importe quelle question

    • Je me demande s’il existe des ressources à recommander pour apprendre ce type d’analyse
      J’ai regardé le code et beaucoup de choses m’étaient inconnues ; ce ne semble pas être Python lui-même, mais plutôt de nombreuses techniques d’analyse que je ne connais pas
    • Tu mentionnes la précision des différentes techniques utilisées ; pourrais-tu expliquer davantage comment cette précision a été calculée ?
      Les PDF étaient-ils déjà classés ?
  • Article intéressant et très détaillé. Cela dit, lorsqu’on fait de l’apprentissage binaire un-contre-tous, équilibrer les classes puis utiliser la probabilité maximale à l’inférence peut poser problème, car les probabilités risquent de ne pas être correctement calibrées
    Je me demande si une calibration des probabilités est effectuée séparément avant de prendre l’argmax

  • En 2006 déjà, il existait plusieurs collections de torrents d’1 To de manuels scolaires
    Aujourd’hui, elles doivent être plus grosses et plus nombreuses

    • C’était avant que l’accumulation de ce type de ressources et la création de business ambigus autour d’elles ne prennent vraiment de l’ampleur
      Je me souviens qu’en 2008 encore, il était beaucoup plus facile de trouver des manuels, corrigés, PDF liés et autres ressources que 6 à 8 ans plus tard
      La plus grande différence, c’est que plusieurs sites comme Chegg ont commencé à aspirer ces ressources et à les revendre d’une manière ou d’une autre
    • Personnellement, j’ai environ 350 Go d’anciens manuels de service, fiches techniques, catalogues et périodiques
      Ce sont surtout des ressources liées à l’électronique et à l’ingénierie, récupérées sur des torrents il y a environ deux ans quand je voulais tester GraphQL et des ressources OSR
    • Si vous voulez, il y a beaucoup de torrents de dizaines de To sur Anna’s Archive
  • J’ai environ 20 à 40 To de PDF (avant déduplication)
    8 To, c’est déjà beaucoup, mais on est très loin de l’ensemble des PDF existant dans le monde

    • Je me demande ce que tu collectionnes. Est-ce surtout un miroir de choses comme LibGen ?
      J’ai moi aussi une collection assez conséquente d’ebooks, de PDF et de mangas accumulés pour les lire, mais j’ai du mal à imaginer à quel point une bibliothèque de 20 To est grande
    • Je me demande si tu envisages de la rendre publique. Ou bien ce n’est pas autorisé pour ce dataset ?
      Il y a clairement beaucoup plus de PDF que 8 To. Il y a sans doute beaucoup de doublons dedans, mais comme il y a beaucoup d’images, la déduplication risque de ne pas bien fonctionner
  • Article intéressant et amusant. J’ai testé plusieurs solutions LLM/IA générative pour extraire des données tabulaires depuis des PDF, mais les résultats ont été moins bons qu’espéré
    Elles sont bonnes pour extraire des chaînes de texte ou résumer, par exemple répondre à des questions comme le montant total ou la date d’impression, mais il y a encore pas mal d’erreurs pour produire du CSV de manière fiable

  • Super. Chez Airtrain aussi, nous avons constaté que les embeddings sont très précieux pour créer des modèles de classification
    Si vous voulez manipuler beaucoup de texte et d’embeddings, nous avons récemment dédupliqué et généré des embeddings pour l’intégralité de fineweb-edu (mentionné aussi dans l’article), puis publié le dataset résultant sur Hugging Face : https://huggingface.co/datasets/airtrain-ai/fineweb-edu-fort...

  • Très belle idée. Je n’ai pas beaucoup de temps libre ces jours-ci, mais j’ai récemment envisagé un projet similaire tout en étant différent
    Je voulais créer un outil open source pour télécharger des données de séries temporelles utiles aux sciences sociales. Par exemple, des séries temporelles de commentaires sur les réseaux sociaux à propos du prix des produits alimentaires
    Grâce aux LLM, j’ai l’impression que plusieurs nouveaux angles de recherche encore peu exploités s’ouvrent
    Si je finis un jour par faire ce side project, je pourrai peut-être reprendre quelques bonnes idées

  • Excellent travail. Vous avez combiné plusieurs approches, un peu comme le font parfois les bibliothèques nationales. J’ai moi aussi essayé toutes sortes de pipelines embeddings → classifieur ou LDA
    Le prompt m’intrigue : https://github.com/snat-s/m/blob/main/classify_metadata/prom...
    N’est-ce pas en pratique assez proche d’un prompt qui demande de classer par type d’URL ?