Logo Zéphyrnet

Mettre en place un projet de synthèse de texte avec Hugging Face Transformers : Partie 1

Date :

Quand OpenAI a publié la troisième génération de son modèle d'apprentissage automatique (ML) spécialisé dans la génération de texte en juillet 2020, je savais que quelque chose était différent. Ce modèle a touché un nerf comme aucun autre avant lui. Soudain, j'ai entendu des amis et des collègues, qui pourraient être intéressés par la technologie mais qui ne se soucient généralement pas beaucoup des dernières avancées dans le domaine de l'IA/ML, en parler. Même le Guardian a écrit un article à ce sujet. Ou, pour être précis, le modèle a écrit l'article et le Guardian l'a édité et publié. On ne pouvait pas le nier - GPT-3 a changé la donne.

Après la sortie du modèle, les gens ont immédiatement commencé à en proposer des applications potentielles. En quelques semaines, de nombreuses démos impressionnantes ont été créées, qui peuvent être trouvées sur le Site Web GPT-3. Une application particulière qui a attiré mon attention était résumé de texte – la capacité d'un ordinateur à lire un texte donné et à résumer son contenu. C'est l'une des tâches les plus difficiles pour un ordinateur car elle combine deux domaines dans le domaine du traitement du langage naturel (TAL) : la compréhension de la lecture et la génération de texte. C'est pourquoi j'ai été si impressionné par les démos GPT-3 pour la synthèse de texte.

Vous pouvez les essayer sur le Site Web de Hugging Face Spaces. Mon préféré en ce moment est un application qui génère des résumés d'articles de presse avec uniquement l'URL de l'article en entrée.

Dans cette série en deux parties, je propose un guide pratique pour les organisations afin que vous puissiez évaluer la qualité des modèles de résumé de texte pour votre domaine.

Présentation du didacticiel

De nombreuses organisations avec lesquelles je travaille (organisations caritatives, entreprises, ONG) ont d'énormes quantités de textes à lire et à résumer - rapports financiers ou articles de presse, documents de recherche scientifique, demandes de brevet, contrats juridiques, etc. Naturellement, ces organisations sont intéressées par l'automatisation de ces tâches avec la technologie NLP. Pour démontrer l'art du possible, j'utilise souvent les démos de résumé de texte, qui ne manquent presque jamais d'impressionner.

Mais maintenant quoi ?

Le défi pour ces organisations est qu'elles veulent évaluer des modèles de résumé de texte basés sur des résumés pour de nombreux documents, et non un à la fois. Ils ne veulent pas embaucher un stagiaire dont le seul travail est d'ouvrir l'application, de coller un document, d'appuyer sur le Résumer , attendez la sortie, évaluez si le résumé est bon et recommencez pour des milliers de documents.

J'ai écrit ce tutoriel en pensant à mon passé d'il y a quatre semaines - c'est le tutoriel que j'aurais aimé avoir à l'époque quand j'ai commencé ce voyage. En ce sens, le public cible de ce didacticiel est quelqu'un qui connaît l'IA/ML et qui a déjà utilisé des modèles Transformer, mais qui est au début de son parcours de synthèse de texte et souhaite approfondir ce sujet. Parce qu'il est écrit par un "débutant" et pour les débutants, je tiens à souligner le fait que ce tutoriel est a guide pratique – pas le guide pratique. Veuillez le traiter comme si Boîte EP de George avait dit:

En termes de connaissances techniques requises dans ce didacticiel : cela implique un peu de codage en Python, mais la plupart du temps, nous utilisons simplement le code pour appeler des API, donc aucune connaissance approfondie du codage n'est requise non plus. Il est utile de se familiariser avec certains concepts du ML, tels que ce que signifie train ainsi que déployer un modèle, les concepts de Formation, validationet jeux de données de test, etc. Ayant également tâté du Bibliothèque de transformateurs avant pourrait être utile, car nous utilisons beaucoup cette bibliothèque tout au long de ce didacticiel. J'inclus également des liens utiles pour une lecture plus approfondie de ces concepts.

Étant donné que ce didacticiel est écrit par un débutant, je ne m'attends pas à ce que les experts en PNL et les praticiens avancés en apprentissage en profondeur obtiennent une grande partie de ce didacticiel. Du moins pas d'un point de vue technique - vous pourriez toujours apprécier la lecture, alors s'il vous plaît ne partez pas tout de suite ! Mais vous devrez être patient en ce qui concerne mes simplifications - j'ai essayé de vivre selon le concept de rendre tout dans ce tutoriel aussi simple que possible, mais pas plus simple.

Structure de ce tutoriel

Cette série s'étend sur quatre sections divisées en deux articles, dans lesquels nous passons par différentes étapes d'un projet de synthèse de texte. Dans le premier article (section 1), nous commençons par introduire une métrique pour les tâches de résumé de texte - une mesure de performance qui nous permet d'évaluer si un résumé est bon ou mauvais. Nous introduisons également l'ensemble de données que nous voulons résumer et créons une ligne de base à l'aide d'un modèle sans ML - nous utilisons une heuristique simple pour générer un résumé à partir d'un texte donné. La création de cette ligne de base est une étape d'une importance vitale dans tout projet ML, car elle nous permet de quantifier les progrès que nous réalisons en utilisant l'IA à l'avenir. Cela nous permet de répondre à la question « Vaut-il vraiment la peine d'investir dans la technologie de l'IA ?

Dans le second article, nous utilisons un modèle qui a déjà été pré-entraîné pour générer des résumés (section 2). Ceci est possible avec une approche moderne en ML appelée transférer l'apprentissage. C'est une autre étape utile car nous prenons essentiellement un modèle standard et le testons sur notre ensemble de données. Cela nous permet de créer une autre ligne de base, ce qui nous aide à voir ce qui se passe lorsque nous entraînons réellement le modèle sur notre ensemble de données. L'approche s'appelle résumé zéro coup, car le modèle n'a eu aucune exposition à notre ensemble de données.

Après cela, il est temps d'utiliser un modèle pré-formé et de le former sur notre propre ensemble de données (section 3). Cela s'appelle aussi réglage fin. Cela permet au modèle d'apprendre des modèles et des idiosyncrasies de nos données et de s'y adapter lentement. Après avoir formé le modèle, nous l'utilisons pour créer des résumés (section 4).

Pour résumer:

  • 1 partie:
    • Section 1 : Utiliser un modèle sans ML pour établir une ligne de base
  • Partie 2:
    • Section 2 : Générer des résumés avec un modèle zéro coup
    • Section 3 : Entraîner un modèle de synthèse
    • Section 4 : Évaluer le modèle entraîné

L'intégralité du code de ce tutoriel est disponible ci-dessous GitHub repo.

Qu'aurons-nous réalisé à la fin de ce tutoriel ?

A la fin de ce tutoriel, nous ne sera pas disposer d'un modèle de synthèse de texte pouvant être utilisé en production. Nous n'aurons même pas de Bien modèle de résumé (insérez l'emoji du cri ici) !

Ce que nous aurons à la place est un point de départ pour la prochaine phase du projet, qui est l'e
phase d'expérimentation. C'est là qu'intervient la « science » de la science des données, car il s'agit désormais d'expérimenter différents modèles et différents paramètres pour comprendre si un modèle de synthèse suffisamment bon peut être formé avec les données de formation disponibles.

Et, pour être totalement transparent, il y a de fortes chances que la conclusion soit que la technologie n'est tout simplement pas encore mûre et que le projet ne sera pas mis en œuvre. Et vous devez préparer les parties prenantes de votre entreprise à cette éventualité. Mais c'est un sujet pour un autre post.

Section 1 : Utiliser un modèle sans ML pour établir une ligne de base

Il s'agit de la première section de notre didacticiel sur la configuration d'un projet de synthèse de texte. Dans cette section, nous établissons une ligne de base à l'aide d'un modèle très simple, sans réellement utiliser ML. Il s'agit d'une étape très importante dans tout projet de ML, car elle nous permet de comprendre la valeur que le ML ajoute au cours de la durée du projet et s'il vaut la peine d'y investir.

Le code du didacticiel se trouve dans ce qui suit GitHub repo.

Données, données, données

Chaque projet ML commence avec des données ! Si possible, nous devons toujours utiliser des données liées à ce que nous voulons réaliser avec un projet de synthèse de texte. Par exemple, si notre objectif est de résumer les demandes de brevet, nous devons également utiliser les demandes de brevet pour former le modèle. Une grande mise en garde pour un projet ML est que les données de formation doivent généralement être étiquetées. Dans le cadre du résumé de texte, cela signifie que nous devons fournir le texte à résumer ainsi que le résumé (l'étiquette). Ce n'est qu'en fournissant les deux que le modèle peut apprendre à quoi ressemble un bon résumé.

Dans ce didacticiel, nous utilisons un ensemble de données accessible au public, mais les étapes et le code restent exactement les mêmes si nous utilisons un ensemble de données personnalisé ou privé. Et encore une fois, si vous avez un objectif en tête pour votre modèle de résumé de texte et que vous disposez des données correspondantes, veuillez utiliser vos données à la place pour en tirer le meilleur parti.

Les données que nous utilisons sont les jeu de données arXiv, qui contient des résumés d'articles arXiv ainsi que leurs titres. Pour notre propos, nous utilisons le résumé comme texte que nous voulons résumer et le titre comme résumé de référence. Toutes les étapes de téléchargement et de prétraitement des données sont disponibles dans la suite cahier. Nous exigeons un Gestion des identités et des accès AWS (IAM) rôle qui permet de charger des données vers et depuis Service de stockage simple Amazon (Amazon S3) afin d'exécuter ce bloc-notes avec succès. L'ensemble de données a été développé dans le cadre de l'article Sur l'utilisation d'ArXiv comme jeu de données et est titulaire d'une licence en vertu de la Creative Commons CC0 1.0 Dédicace au domaine public universel.

Les données sont divisées en trois ensembles de données : données d'entraînement, de validation et de test. Si vous souhaitez utiliser vos propres données, assurez-vous que c'est également le cas. Le diagramme suivant illustre comment nous utilisons les différents ensembles de données.

Naturellement, une question courante à ce stade est : de combien de données avons-nous besoin ? Comme vous pouvez probablement déjà le deviner, la réponse est : cela dépend. Cela dépend de la spécialisation du domaine (résumer les demandes de brevet est assez différent de résumer les articles de presse), de la précision du modèle pour être utile, du coût de la formation du modèle, etc. Nous revenons à cette question plus tard lorsque nous formons réellement le modèle, mais en bref, nous devons essayer différentes tailles d'ensembles de données lorsque nous sommes dans la phase d'expérimentation du projet.

Qu'est-ce qui fait un bon modèle ?

Dans de nombreux projets ML, il est assez simple de mesurer les performances d'un modèle. C'est parce qu'il y a généralement peu d'ambiguïté quant à savoir si le résultat du modèle est correct. Les étiquettes du jeu de données sont souvent binaires (vrai/faux, oui/non) ou catégorielles. Dans tous les cas, il est facile dans ce scénario de comparer la sortie du modèle à l'étiquette et de la marquer comme correcte ou incorrecte.

Lors de la génération de texte, cela devient plus difficile. Les résumés (les étiquettes) que nous fournissons dans notre ensemble de données ne sont qu'une façon de résumer le texte. Mais il existe de nombreuses possibilités pour résumer un texte donné. Ainsi, même si le modèle ne correspond pas à notre étiquette 1:1, la sortie peut toujours être un résumé valide et utile. Alors, comment comparer le résumé du modèle avec celui que nous fournissons ? La métrique la plus souvent utilisée dans le résumé de texte pour mesurer la qualité d'un modèle est la Score ROUGE. Pour comprendre les mécanismes de cette métrique, reportez-vous à La mesure de performance ultime en PNL. En résumé, le score ROUGE mesure le chevauchement des n-grammes (séquence contiguë de n éléments) entre le résumé du modèle (résumé du candidat) et le résumé de référence (l'étiquette que nous fournissons dans notre jeu de données). Mais, bien sûr, ce n'est pas une mesure parfaite. Pour comprendre ses limites, consultez ROUGE ou pas ROUGE ?

Alors, comment calcule-t-on le score ROUGE ? Il existe de nombreux packages Python pour calculer cette métrique. Pour assurer la cohérence, nous devons utiliser la même méthode tout au long de notre projet. Parce que nous allons, plus tard dans ce tutoriel, utiliser un script de formation de la bibliothèque Transformers au lieu d'écrire le nôtre, nous pouvons simplement jeter un coup d'œil dans le code source du script et copiez le code qui calcule le score ROUGE :

from datasets import load_metric
metric = load_metric("rouge") def calc_rouge_scores(candidates, references): result = metric.compute(predictions=candidates, references=references, use_stemmer=True) result = {key: round(value.mid.fmeasure * 100, 1) for key, value in result.items()} return result

En utilisant cette méthode pour calculer le score, nous nous assurons de toujours comparer des pommes avec des pommes tout au long du projet.

Cette fonction calcule plusieurs scores ROUGE : rouge1, rouge2, rougeLet rougeLsum. La « somme » dans rougeLsum fait référence au fait que cette métrique est calculée sur tout un résumé, alors que rougeL est calculé comme la moyenne des phrases individuelles. Alors, quel score ROUGE devrions-nous utiliser pour notre projet ? Encore une fois, nous devons essayer différentes approches dans la phase d'expérimentation. Pour ce que ça vaut, le papier ROUGE d'origine déclare que "ROUGE-2 et ROUGE-L ont bien fonctionné dans les tâches de résumé de document unique" tandis que "ROUGE-1 et ROUGE-L fonctionnent très bien dans l'évaluation de courts résumés".

Créer la ligne de base

Ensuite, nous voulons créer la ligne de base en utilisant un modèle simple, sans ML. Qu'est-ce que ça veut dire? Dans le domaine du résumé de texte, de nombreuses études utilisent une approche très simple : elles prennent la première n phrases du texte et le déclarer le résumé du candidat. Ils comparent ensuite le résumé du candidat avec le résumé de référence et calculent le score ROUGE. Il s'agit d'une approche simple mais puissante que nous pouvons implémenter en quelques lignes de code (l'intégralité du code de cette partie se trouve dans ce qui suit cahier):

import re ref_summaries = list(df_test['summary']) for i in range (3): candidate_summaries = list(df_test['text'].apply(lambda x: ' '.join(re.split(r'(?<=[.:;])s', x)[:i+1]))) print(f"First {i+1} senctences: Scores {calc_rouge_scores(candidate_summaries, ref_summaries)}")

Nous utilisons le jeu de données de test pour cette évaluation. Cela a du sens car après avoir entraîné le modèle, nous utilisons également le même ensemble de données de test pour l'évaluation finale. Nous essayons également différents nombres pour n: nous commençons avec seulement la première phrase comme résumé candidat, puis les deux premières phrases, et enfin les trois premières phrases.

La capture d'écran suivante montre les résultats de notre premier modèle.

Les scores ROUGE sont les plus élevés, avec seulement la première phrase comme résumé du candidat. Cela signifie que prendre plus d'une phrase rend le résumé trop verbeux et conduit à un score inférieur. Cela signifie donc que nous utiliserons les scores des résumés d'une phrase comme base de référence.

Il est important de noter que, pour une approche aussi simple, ces chiffres sont en fait assez bons, surtout pour le rouge1 But. Pour mettre ces chiffres en contexte, nous pouvons nous référer à Modèles Pegasus, qui affiche les scores d'un modèle de pointe pour différents ensembles de données.

Conclusion et la suite

Dans la partie 1 de notre série, nous avons présenté l'ensemble de données que nous utilisons tout au long du projet de synthèse ainsi qu'une métrique pour évaluer les résumés. Nous avons ensuite créé la ligne de base suivante avec un modèle simple, sans ML.

Dans le prochain post, nous utilisons un modèle zéro-shot - plus précisément, un modèle qui a été spécifiquement formé pour le résumé de texte sur les articles de presse publics. Cependant, ce modèle ne sera pas du tout formé sur notre ensemble de données (d'où le nom « zero-shot »).

Je vous laisse comme devoir de deviner comment ce modèle zéro coup fonctionnera par rapport à notre base de référence très simple. D'une part, ce sera un modèle beaucoup plus sophistiqué (il s'agit en fait d'un réseau de neurones). D'un autre côté, il n'est utilisé que pour résumer des articles de presse, il peut donc avoir du mal avec les modèles inhérents à l'ensemble de données arXiv.


À propos de l’auteur

Heiko Hotz est architecte de solutions senior pour l'IA et l'apprentissage automatique et dirige la communauté de traitement du langage naturel (NLP) au sein d'AWS. Avant d'occuper ce poste, il était responsable de la science des données pour le service client européen d'Amazon. Heiko aide nos clients à réussir leur parcours IA/ML sur AWS et a travaillé avec des organisations de nombreux secteurs, notamment l'assurance, les services financiers, les médias et le divertissement, la santé, les services publics et la fabrication. Pendant son temps libre, Heiko voyage autant que possible.

spot_img

Dernières informations

spot_img

Discutez avec nous

Salut! Comment puis-je t'aider?