GPT-2

J’ai peaufiné GPT-2 sur 100 000 articles scientifiques. Voici le résultat

La rédaction de contenu par l’IA est courante, mais est-il possible pour une IA d’écrire des essais techniques ?

Les agents artificiels sont largement utilisés de nos jours et sont capables d’ atteindre des performances surhumaines dans de multiples tâches. La génération de texte est l’une des applications émergentes de l’IA et est utilisée dans plusieurs scénarios . La génération de texte libre, les questions-réponses et le résumé abstrait ne sont que quelques-uns d’entre eux.

Pour déterminer si une IA pouvait écrire des essais techniques, j’ai formé un modèle de langage informel sur environ 100 000 articles d’apprentissage automatique .

Quelle est la qualité du résultat ? Quelles sont les limites de l’approche proposée ? Est-il possible d’obtenir que GPT-2 rédige un article complet ? Telles sont les questions auxquelles je vais essayer de répondre.

Le Generative Pre-Trained Transformer (GPT) 2 est une intelligence artificielle développée par OpenAI en 2019 et permet à plusieurs fins : résumé de texte , traduction , question-réponse , et génération de texte . GPT-2 est pré-formé sur un grand corpus de données en anglais , et peut en outre être affiné pour une tâche spécifique .

Dans cet article, j’utiliserai le modèle Huggingface Distilled-GPT2 (DistilGPT2). DistilGPT2 a 82 millions de paramètres et a été développé par distillation des connaissances , de plus il est plus léger et plus rapide que GPT-2.

J’ai commencé par importer tous les outils et bibliothèques nécessaires .

Ensuite, j’ai utilisé TFAutoModelForCasualLMet AutoTokenizerpour charger automatiquement le bon modèle en fonction d’un point de contrôle spécifique . Un point de contrôle contient les pondérations d’un modèle pré-entraîné .

Dans ce cas, j’ai importé le point de contrôle DistilGPT-2. J’ai également défini le jeton de fin de séquence comme jeton de remplissage.

L’ensemble de données pour l’ opération de réglage fin est disponible sur Huggingface Hub , et c’est un sous- ensemble d’un ensemble de données plus grand hébergé sur Kaggle .

L’ensemble de données original, publié par l’Université Cornell , contient les titres et les résumés de plus de 1,7 million d’articles scientifiques appartenant à la catégorie STEM. Le sous-ensemble hébergé sur le Huggingface Hub contient des informations sur environ 100 000 articles relatifs à la catégorie de l’apprentissage automatique .

J’ai décidé d’ affiner DistilGPT-2 uniquement sur les résumés . J’ai commencé par charger le jeu de données à partir du Huggingface Hub.

L’ensemble de données se compose de 117592 lignes et de 4 colonnes (dont deux sont inutiles).

Après cette étape, j’ai décidé de visualiser la distribution de longueur des résumés (en termes de mots) avec un histogramme.

La plupart des résumés comptent entre 100 et 250 mots environ , et seuls quelques-uns dépassent 300 mots . En particulier : mode =150, moyenne =167 et médiane =164.

En plus de donner des informations sur le jeu de données, l’histogramme m’a permis de déterminer la longueur maximale des entrées à alimenter au modèle.

J’ai décidé de fixer la longueur d’ entrée maximale à 300 jetons : les résumés plus longs que cela seront tronqués . Cela est dû au fait que toutes les entrées doivent être complétées à la même longueur et que de longues séquences de texte augmentent considérablement le temps d’apprentissage .

Ensuite, je divise l’ensemble de données en ensembles d’ entraînement et de validation avec . Il est également possible de spécifier les tailles de partition avec le paramètre.train_test_split()test_size

train_test_split()renvoie un dictionnaire de Datasets, anciennement a DatasetDict. Bien qu’il soit possible de travailler avec un DatasetDict, je préfère utiliser deux Datasetstrainet val.

Pour tokeniser les données, j’ai défini une fonction de tokenisation générique , puis j’ai appliqué cette fonction à tous les échantillons en utilisant map(). Dans la fonction de tokenisation, j’ai utilisé le tokenizer importé au début.

Le tokenizer a quelques paramètres importants à définir :

  1. colonne à tokeniser . Dans ce cas « abstrait ».
  2. rembourrage . Dans ce cas = « max_lenght » pour remplir une séquence à la longueur maximale spécifiée par le paramètre max_length.
  3. troncature . Si vrai, tronque les séquences plus longues que la longueur maximale , spécifiée par le paramètre max_length .
  4. longueur_max . Spécifie la longueur maximale d’une séquence.

Veuillez noter que par défaut la map()méthode envoie des lots de 1000 échantillons.

Dans Casual Language Modeling, les étiquettes sont les jetons d’entrée (input_ids) décalés vers la droite . Cette opération est automatiquement effectuée par le transformateur Huggingface, j’ai donc créé une colonne d’ étiquettes dans les jeux de données avec une copie des jetons (input_ids).

Après cette opération, les ensembles d’entraînement et de validation avaient trois colonnes : input_idset attention_maskdu processus de tokenisation , et labelsdu create_labels()processus.

Ensuite, j’ai converti les jeux de données en tf.data.Dataset, que Keras peut comprendre nativement ; à cet effet j’ai utilisé Model.prepare_tf_dataset().

En ce qui concerne la Dataset.to_tf_dataset()méthode, Model.prepare_tf_dataset()peut déterminer automatiquement les noms de colonne à utiliser en entrée et fournit un assembleur de données par défaut.

Notez que j’ai seulement mélangé les données du train . Après quelques expériences, j’ai trouvé que la taille de lot optimale = 16 .

Avant d’adapter le modèle, j’ai mis en place un ordonnanceur de taux d’apprentissage et un optimiseur . J’ai utilisé le ExponentialDecayplanificateur de Keras et l’ AdamWeightDecayoptimiseur de Huggingface .

La décroissance du taux d’apprentissage est une technique visant à réduire le taux d’apprentissage au fil du temps . Avec une décroissance exponentielle , le taux d’apprentissage est réduit de façon exponentielle .

Ensuite, j’ai compilé le modèle . Les modèles de transformateurs calculent généralement la perte en interne et il n’est pas nécessaire de spécifier un paramètre de perte. Pour la modélisation du langage, la perte sélectionnée est l’entropie croisée .

À ce stade, j’ai configuré un rappel vers le hub Huggingface pour enregistrer le modèle affiné .

J’ai également mis en place un callback vers Tensorboard .

Enfin, j’ai ajusté le modèle en appelant la fit()méthode. J’ai spécifié les ensembles de train et de validation et le nombre d’époques .

Après l’étape de formation, j’ai évalué le modèle et obtenu sa perte d’entropie croisée sur l’ensemble de validation.

Perte=2.2371 . Généralement, la qualité d’un modèle de langage se mesure en « perplexité ». Pour convertir l’entropie croisée en perplexité, j’ai simplement élevé e à la puissance de la perte d’entropie croisée.

Dans ce cas perplexité=9.37 .

À ce stade, j’ai tiré parti de la pipelinefonctionnalité fournie par Huggingface pour voir le modèle en action .

J’ai mis en place un pipeline de génération de texte et spécifié le modèle affiné , le tokenizer et le framework à utiliser permet de spécifier le nombre maximum de jetons (mots) à générer en plus de l’invite initiale fournie.max_new_tokens

Deux lignes de code suffisent pour générer du texte avec un pipeline :

Ce pipelinen’est pas la seule façon d’utiliser un modèle : il est possible de segmenter manuellement l’invite , de générer de nouveaux jetons et de décoder les jetons en langage naturel. Voici un exemple :

Après avoir peaufiné le modèle, j’ai voulu comprendre ce que le modèle a appris et comment le texte généré est influencé par le fait que des résumés papier ont été utilisés pour la formation .

Tout d’abord, j’ai généré un exemple de texte en utilisant « le rôle des systèmes de recommandation » comme invite. Voici la sortie générée par le modèle :

« Le rôle des systèmes de recommandation dans le monde réel doit encore largement être démontré par le manque de données et le besoin de données. Par conséquent, pour de nombreux systèmes de recommandation tels qu'Amazon ou Spotify, il est nécessaire de fournir à l'utilisateur une connaissance du contenu qui a été cliqué lors de la recommandation et de fournir une connaissance de l'utilisateur des préférences de l'utilisateur. Les travaux précédents tentent d'exploiter les données liées aux éléments sur lesquels ils ont cliqué pendant un laps de temps approprié. Mais peu d'attention a été accordée au problème de la classification des éléments lorsqu'un délai approprié est disponible pour la prédiction de l'utilisateur. Dans cet article, nous proposons une approche d'apprentissage multi-tâches pour résoudre le problème de la classification des items. Pour chaque tâche, nous appliquons les indices contextuels introduits par l'utilisateur, puis apprenons à prédire les intérêts des articles achetés par l'utilisateur. Depuis les contextes des préférences de l'utilisateur, nous considérons la caractéristique que la préférence de l'utilisateur (la période) est présente au moment de la recommandation. En particulier, nous proposons une méthode alternative pour l'apprentissage sensible aux attributs qui utilise les indices contextuels dans la séquence et les préférences de l'utilisateur pour apprendre un classificateur qui classe l'utilisateur en fonction des indices contextuels. Cela se fait en maximisant les informations mutuelles entre la note de l'utilisateur et la tâche de prédiction sensible au contenu. Les résultats expérimentaux montrent que notre modèle atteint une meilleure précision que les méthodes de pointe existantes, atteignant jusqu'à 33,6 % de précision en plus sur les tâches de recommandation du monde réel par rapport aux méthodes de pointe. Notre code source est disponible sur La préférence de s (le délai) est présente au moment de la recommandation. En particulier, nous proposons une méthode alternative pour l'apprentissage sensible aux attributs qui utilise les indices contextuels dans la séquence et les préférences de l'utilisateur pour apprendre un classificateur qui classe l'utilisateur en fonction des indices contextuels. Cela se fait en maximisant les informations mutuelles entre la note de l'utilisateur et la tâche de prédiction sensible au contenu. Les résultats expérimentaux montrent que notre modèle atteint une meilleure précision que les méthodes de pointe existantes, atteignant jusqu'à 33,6 % de précision en plus sur les tâches de recommandation du monde réel par rapport aux méthodes de pointe. Notre code source est disponible sur La préférence de s (le délai) est présente au moment de la recommandation. En particulier, nous proposons une méthode alternative pour l'apprentissage sensible aux attributs qui utilise les indices contextuels dans la séquence et les préférences de l'utilisateur pour apprendre un classificateur qui classe l'utilisateur en fonction des indices contextuels. Cela se fait en maximisant les informations mutuelles entre la note de l'utilisateur et la tâche de prédiction sensible au contenu. Les résultats expérimentaux montrent que notre modèle atteint une meilleure précision que les méthodes de pointe existantes, atteignant jusqu'à 33,6 % de précision en plus sur les tâches de recommandation du monde réel par rapport aux méthodes de pointe. Notre code source est disponible sur nous proposons une méthode alternative pour l'apprentissage sensible aux attributs qui utilise les indices contextuels dans la séquence et les préférences de l'utilisateur pour apprendre un classificateur qui classe l'utilisateur en fonction des indices contextuels. Cela se fait en maximisant les informations mutuelles entre la note de l'utilisateur et la tâche de prédiction sensible au contenu. Les résultats expérimentaux montrent que notre modèle atteint une meilleure précision que les méthodes de pointe existantes, atteignant jusqu'à 33,6 % de précision en plus sur les tâches de recommandation du monde réel par rapport aux méthodes de pointe. Notre code source est disponible sur nous proposons une méthode alternative pour l'apprentissage sensible aux attributs qui utilise les indices contextuels dans la séquence et les préférences de l'utilisateur pour apprendre un classificateur qui classe l'utilisateur en fonction des indices contextuels. Cela se fait en maximisant les informations mutuelles entre la note de l'utilisateur et la tâche de prédiction sensible au contenu. Les résultats expérimentaux montrent que notre modèle atteint une meilleure précision que les méthodes de pointe existantes, atteignant jusqu'à 33,6 % de précision en plus sur les tâches de recommandation du monde réel par rapport aux méthodes de pointe. Notre code source est disponible sur Les résultats expérimentaux montrent que notre modèle atteint une meilleure précision que les méthodes de pointe existantes, atteignant jusqu'à 33,6 % de précision en plus sur les tâches de recommandation du monde réel par rapport aux méthodes de pointe. Notre code source est disponible sur Les résultats expérimentaux montrent que notre modèle atteint une meilleure précision que les méthodes de pointe existantes, atteignant jusqu'à 33,6 % de précision en plus sur les tâches de recommandation du monde réel par rapport aux méthodes de pointe. Notre code source est disponible surhttp://github.com/J-medylerFashion/jmedian.github.'

Ce résultat semblait en quelque sorte copié-collé à partir de l’un des résumés existants, mais après une vérification avec des solutions anti-plagiat , j’ai réalisé qu’il était 100% unique .

Au cours de l’apprentissage, le modèle a capturé les caractéristiques communes des résumés et a appris à les reproduire tout en générant du texte frais . Fait intéressant, le modèle utilisait un langage scientifique et des expressions courantes : Les travaux précédents… , Dans cet article… , Nous proposons…, Le résultat expérimental… .

Le modèle a également appris qu’un référentiel est parfois ajouté au résumé : dans cet exemple, le texte généré contient une URL vers un référentiel GitHub . L’URL et le référentiel n’existent pas, ont donc été générés par le modèle (et non copiés).

Dans une deuxième expérience, j’ai généré un exemple de texte en utilisant le  » clustering  » comme invite. Dans ce cas, l’invite se composait d’ un seul mot , de sorte que la génération de texte n’est pas pilotée par un contexte supplémentaire . Voici la sortie :

'Le clustering peut être utilisé pour extraire des clusters à partir de points de données. Cependant, dans de nombreux scénarios du monde réel, les points de données apparaissent souvent dans des relaxations non euclidiennes, ce qui permet de découvrir simultanément différents clusters sans nécessiter d'optimisation spécifique. Dans cet article, nous considérons une classe d'applications où les méthodes de clustering sont appliquées. Un exemple courant est que dans les problèmes de sélection d'images, on montre à l'optimiseur que l'amélioration attendue sera obtenue en minimisant les performances moyennes de la méthode de clustering. Notre principale contribution est une caractérisation des problèmes d'optimisation par rapport aux méthodes de clustering. Plus précisément, nous présentons une généralisation de la méthode de transport optimale pour laquelle nos bornes spéciales en termes de nombre maximum de clusters sont dérivées. Nous appliquons cet algorithme à la classification des tumeurs cérébrales humaines, montrant qu'il est efficace sur le plan informatique. Nous montrons que sur la base de notre analyse d'un type particulier de tumeur, notre analyse conduit à une convergence plus rapide vers la solution optimale.

Dans ce cas également, le texte est signalé comme unique et il existe des expressions courantes : Dans cet article… , Notre contribution principale… , Nous présentons… .

Pour la troisième expérience, j’ai utilisé des « transformateurs pour la génération de texte » . Voici le résultat :

"Les transformateurs pour la génération de texte deviennent de plus en plus populaires dans la vision par ordinateur, tout comme les ensembles de données courants qui contiennent des représentations de grande dimension sans ingénierie manuelle des caractéristiques. Nous proposons deux algorithmes de génération d'images à partir de réseaux convolutifs. Nous donnons la première procédure pour supprimer des parties importantes de cette architecture et proposons une nouvelle architecture appelée Multi-scale Text Generation Network (MTVGNet). Notre architecture de type MTVGNet produit un ensemble compact de représentations sans modifier l'architecture du modèle ou le réseau convolutif pré-entraîné. La représentation résultante est compacte et peut être utilisée à la fois comme exemples de formation dans la formation et comme inférence dans l'inférence.

Même dans le troisième exemple, il existe de multiples éléments communs aux résumés scientifiques, et la qualité globale est légèrement meilleure que le précédent .

Le Multi-scale Text Generation Network (MTVGNet) cité semble être une « invention » du modèle puisque je ne trouve pas de références dans la littérature.

J’aimerais conclure cette section avec quelques nuages ​​de mots . Le premier représente les mots les plus fréquents dans tous les résumés du jeu de données . Les autres représentent les mots les plus courants dans 10 échantillons de texte générés à partir de différentes invites .

Il est possible de remarquer immédiatement la similarité des mots entre les résumés des ensembles de données et les échantillons générés .

Dans cet article, j’ai peaufiné un transformateur sur des résumés d’articles scientifiques. Quelle est la qualité du résultat ? Quelles sont les limites de cette approche ? Est-il possible d’obtenir que GPT-2 rédige un article complet ?

Le modèle a appris comment les résumés sont généralement écrits et essaie de reproduire le même style . Les résultats ne sont pas mauvais compte tenu des données disponibles et d’une seule époque d’entraînement .

Le modèle semble être capable de générer du texte technique sur différents sujets d’apprentissage automatique , mais le résultat n’a pas toujours un sens complet et il y a parfois des erreurs .

Certes, cette approche a quelques limites , dont l’une est la longueur du texte généré . Bien qu’il soit possible de contourner le problème en générant plusieurs blocs de texte , à un moment donné, il serait difficile de relier logiquement les différentes sections générées.

En conclusion, même si le modèle ne peut pas écrire un article technique complet , je suis toujours surpris et convaincu que certains des résultats réalisables peuvent encore être inspirants ou révélateurs .

Merci d’avoir lu!

Retour en haut