Ordinateurs

Comment créer votre propre système de génération de texte à la pointe de la technologie

Il ne se passe pas un jour sans qu’il n’y ait une histoire de fake news. Cela me rappelle une citation du journaliste de radio préféré de ma jeunesse, « Si vous n’aimez pas les nouvelles, sortez et faites-en vous-même. » Le modèle de langage révolutionnaire d’OpenAI, la version à 1,5 milliard de paramètres de GPT-2, s’est suffisamment rapproché pour que le groupe décide qu’il était trop dangereux de le rendre public, du moins pour le moment. Cependant, OpenAI a maintenant publié deux versions plus petites du modèle, ainsi que des outils pour les affiner sur votre propre texte. Ainsi, sans trop d’efforts et en utilisant considérablement moins de temps GPU qu’il n’en faudrait pour s’entraîner à partir de zéro, vous pouvez créer une version optimisée de GPT-2 qui pourra générer du texte dans le style que vous lui donnez, ou même commencer à répondez à des questions similaires à celles avec lesquelles vous l’entraînez.

Ce qui rend GPT-2 spécial

GPT-2 (Generative Pre-Trained Transformer version 2) est basé sur une version du très puissant Transformer Attention-based Neural Network. Ce qui a tellement enthousiasmé les chercheurs d’OpenAI, c’est de découvrir qu’il pouvait traiter un certain nombre de tâches linguistiques sans être directement formés à celles-ci. Une fois pré-formé avec son corpus massif de données Reddit et ayant reçu les invites appropriées, il a fait un travail passable en répondant aux questions et en traduisant les langues. Ce n’est certainement pas comme Watson en ce qui concerne les connaissances sémantiques, mais ce type d’apprentissage non supervisé est particulièrement excitant car il supprime une grande partie du temps et des dépenses nécessaires pour étiqueter les données pour l’apprentissage supervisé.

Présentation de l’utilisation de GPT-2

Pour un outil aussi puissant, le processus de travail avec GPT-2 est heureusement assez simple, tant que vous êtes au moins un peu familier avec Tensorflow. La plupart des tutoriels que j’ai trouvés reposent également sur Python, donc avoir au moins une connaissance de base de la programmation en Python ou dans un langage similaire est très utile. Actuellement, OpenAI a publié deux versions pré-formées de GPT-2. L’un (117M) a 117 millions de paramètres, tandis que l’autre (345M) en a 345 millions. Comme vous pouvez vous y attendre, la version plus grande nécessite plus de mémoire GPU et prend plus de temps à s’entraîner. Vous pouvez entraîner l’un ou l’autre sur votre CPU, mais cela va être très lent.

La première étape consiste à télécharger un ou les deux modèles. Heureusement, la plupart des didacticiels, y compris ceux que nous allons vous expliquer ci-dessous, ont du code Python pour le faire pour vous. Une fois téléchargé, vous pouvez exécuter le modèle pré-formé pour générer du texte automatiquement ou en réponse à une invite que vous fournissez. Mais il existe également un code qui vous permet de construire sur le modèle pré-formé en l’ajustant avec précision sur une source de données de votre choix. Une fois que vous avez réglé votre modèle à votre satisfaction, il ne vous reste plus qu’à l’exécuter et à fournir des invites appropriées.

Travailler avec GPT-2 sur votre ordinateur local

Il existe un certain nombre de tutoriels à ce sujet, mais mon préféré est celui de Max Woolf. En fait, jusqu’à la sortie d’OpenAI, je travaillais avec son RNN générateur de texte, qu’il a emprunté pour son travail sur GPT-2. Il a fourni un package complet sur GitHub pour télécharger, régler et exécuter un modèle basé sur GPT-2. Vous pouvez même l’obtenir directement sous forme de package à partir de PyPl. Le fichier Lisez-moi vous guide tout au long du processus, avec quelques suggestions sur la façon de modifier divers paramètres. Si vous avez un GPU massif à portée de main, c’est une excellente approche, mais comme le modèle 345M a besoin de la plupart d’un GPU de 16 Go pour la formation ou le réglage, vous devrez peut-être vous tourner vers un GPU cloud.

Travailler avec GPT-2 gratuitement en utilisant Colab de Google

J'ai conservé des points de contrôle de mon modèle toutes les 15 000 étapes à des fins de comparaison et au cas où le modèle finirait par s'adapter et que je devais revenir à une version antérieure.Heureusement, il existe un moyen d’utiliser gratuitement un GPU puissant dans le cloud – Colab de Google. Ce n’est pas aussi flexible qu’un compte Google Compute Engine et vous devez tout recharger à chaque session, mais ai-je mentionné que c’est gratuit ? Lors de mes tests, j’ai obtenu un GPU Tesla T4 ou K80 lorsque j’ai initialisé un ordinateur portable, l’un ou l’autre étant suffisamment rapide pour entraîner ces modèles à un rythme raisonnable. La meilleure partie est que Woolf a déjà écrit un Bloc-notes Colab qui fait écho à la version locale du code Python de gpt2-simple. Tout comme la version de bureau, vous pouvez simplement suivre ou modifier les paramètres pour expérimenter. Il y a une complexité supplémentaire à faire entrer et sortir les données de Colab, mais le bloc-notes vous guidera également à travers cela.

Obtenir des données pour votre projet

Maintenant que de puissants modèles de langage ont été publiés sur le Web et que les didacticiels abondent sur la façon de les utiliser, la partie la plus difficile de votre projet pourrait être de créer l’ensemble de données que vous souhaitez utiliser pour le réglage. Si vous souhaitez reproduire les expériences des autres en le faisant générer Shakespeare ou écrire Star Trek dialogue, vous pouvez simplement en accrocher un qui est en ligne. Dans mon cas, je voulais voir comment les modèles se comporteraient lorsqu’on leur demanderait de générer des articles comme ceux trouvés sur High-teK.ca. J’ai eu accès à un catalogue de plus de 12 000 articles des 10 dernières années. J’ai donc pu les rassembler dans un fichier texte et l’utiliser comme base pour les affiner.

Si vous avez d’autres ambitions qui incluent l’imitation d’un site Web, le scraping est certainement une alternative. Il existe des services sophistiqués comme ParseHub, mais ils sont limités à moins que vous ne payiez pour un plan commercial. J’ai trouvé que l’extension Chrome Webscraper.io était suffisamment flexible pour de nombreuses applications, et c’est rapide et gratuit. Une grande mise en garde est de prêter attention aux conditions d’utilisation du site Web auquel vous pensez, ainsi qu’à tout problème de droit d’auteur. En regardant la sortie de divers modèles de langage, on ne leur apprend certainement pas à ne pas plagier.

Alors, peut-il faire du journalisme technologique ?

Une fois que j’ai eu mon corpus de 12 000 articles High-teK.ca, j’ai commencé par essayer de former le GPT-2 simplifié sur le GPU Nvidia 1080 de mon ordinateur de bureau. Malheureusement, les 8 Go de RAM du GPU n’étaient pas suffisants. Je suis donc passé à la formation du modèle 117M sur mon i7 à 4 cœurs. Ce n’était pas incroyablement terrible, mais il aurait fallu plus d’une semaine pour faire une vraie brèche même avec le plus petit des deux modèles. Je suis donc passé à Colab et au modèle 345M. La formation était beaucoup, beaucoup, plus rapide, mais le fait de devoir gérer les réinitialisations de session et l’imprévisibilité du GPU que j’obtiendrais pour chaque session était ennuyeux.

Mise à niveau vers le moteur de calcul de Google

Après cela, j’ai mordu la balle, ouvert un compte Google Compute Engine et décidé de profiter du crédit de 300 $ que Google accorde aux nouveaux clients. Si vous n’êtes pas familiarisé avec la configuration d’une machine virtuelle dans le cloud, cela peut être un peu intimidant, mais il existe de nombreux guides en ligne. C’est plus simple si vous commencez avec l’une des machines virtuelles préconfigurées sur lesquelles Tensorflow est déjà installé. J’ai choisi une version Linux avec 4 vCPU. Même si mon système de bureau est Windows, le même code Python fonctionnait parfaitement sur les deux. Vous devez ensuite ajouter un GPU, qui dans mon cas a demandé l’autorisation au support Google. Je suppose que c’est parce que les machines équipées de GPU sont plus chères et moins flexibles que les machines uniquement CPU, elles ont donc un certain type de processus de vérification. Cela n’a pris que quelques heures et j’ai pu lancer une machine virtuelle avec un Tesla T4. Lorsque je me suis connecté pour la première fois (en utilisant le SSH intégré), cela m’a rappelé que je devais installer les pilotes Nvidia pour le T4 et m’a donné la commande dont j’avais besoin.

Ensuite, vous devez configurer un client de transfert de fichiers comme WinSCP et commencer à travailler avec votre modèle. Une fois que vous avez téléchargé votre code et vos données, créé un environnement virtuel Python (facultatif) et chargé les packages nécessaires, vous pouvez procéder de la même manière que sur votre bureau. J’ai formé mon modèle par incréments de 15 000 étapes et téléchargé les points de contrôle du modèle à chaque fois, donc je les aurais comme référence. Cela peut être particulièrement important si vous avez un petit ensemble de données d’entraînement, car trop d’entraînement peut entraîner un surajustement de votre modèle et même empirer. Il est donc précieux d’avoir des points de contrôle auxquels vous pouvez revenir.

En parlant de points de contrôle, comme les modèles, ils sont grands. Vous voudrez donc probablement ajouter un disque à votre VM. En séparant le disque, vous pouvez toujours l’utiliser pour d’autres projets. Le processus de montage automatique est un peu ennuyeux (il semble que ce pourrait être une case à cocher, mais ce n’est pas le cas). Heureusement, vous n’avez à le faire qu’une seule fois. Une fois que j’ai eu ma machine virtuelle opérationnelle avec le code, le modèle et les données de formation nécessaires, je l’ai lâchée. Le T4 était capable d’exécuter environ une étape toutes les 1,5 seconde. La machine virtuelle que j’avais configurée coûtait environ 25 $/jour (rappelez-vous que les machines virtuelles ne s’éteignent pas ; vous devez les arrêter si vous ne voulez pas être facturé, et le disque persistant continue d’être facturé même dans ce cas).

Pour économiser de l’argent, j’ai transféré les points de contrôle du modèle (sous forme de fichier .zip) sur mon bureau. Je pourrais alors arrêter la machine virtuelle (économiser un dollar ou deux par heure) et interagir avec le modèle localement. Vous obtenez la même sortie dans les deux sens car le modèle et le point de contrôle sont identiques. La manière traditionnelle d’évaluer le succès de votre formation consiste à conserver une partie de vos données de formation sous forme d’ensemble de validation. Si la perte continue de diminuer mais que la précision (que vous obtenez en calculant la perte lorsque vous exécutez votre modèle sur les données que vous avez conservées pour validation) diminue, il est probable que vous ayez commencé à surajuster vos données et votre modèle consiste simplement à « mémoriser » votre entrée et à vous la renvoyer. Cela réduit sa capacité à traiter de nouvelles informations.

Voici le boeuf : quelques exemples de résultats après des jours de formation

Après avoir expérimenté différents types d’invites, j’ai décidé d’alimenter le modèle (que j’ai surnommé l’Oracle) des premières phrases d’articles réels d’High-teK.ca et de voir ce qu’il en était. Après 48 heures (106 000 pas dans ce cas) d’entraînement sur un T4, voici un exemple :

Sortie de notre modèle après deux jours d'entraînement sur un T4 lorsqu'il a alimenté la première phrase de l'article Titan de Ryan Whitwam.

La sortie de notre modèle après deux jours d’entraînement sur un T4 quand alimenté la première phrase de l’article Titan de Ryan Whitwam. De toute évidence, cela ne trompera personne, mais le modèle commence à faire un travail décent en reliant des concepts similaires à ce stade.

Plus le modèle contient d’informations sur un sujet, plus il commence à générer du texte plausible. Nous écrivons beaucoup sur Windows Update, alors j’ai pensé que je laisserais le modèle essayer:

La réponse du modèle à une invite concernant Windows Update après quelques jours de formation.

La réponse du modèle à une invite concernant Windows Update après quelques jours de formation.

Avec quelque chose d’aussi subjectif que la génération de texte, il est difficile de savoir jusqu’où aller avec la formation d’un modèle. C’est particulièrement vrai car chaque fois qu’une invite est soumise, vous obtenez une réponse différente. Si vous voulez obtenir des réponses plausibles ou amusantes, votre meilleur pari est de générer plusieurs échantillons pour chaque invite et de les parcourir vous-même. Dans le cas de l’invite de mise à jour Windows, nous avons alimenté le modèle avec la même invite après quelques heures de formation supplémentaires, et il semblait que le travail supplémentaire aurait pu être utile :

Après encore quelques heures de formation, voici le meilleur des exemples lorsqu'on vous donne la même invite à propos de Microsoft Windows.

Après quelques heures de formation supplémentaires, voici le meilleur des exemples lorsque vous recevez la même invite à propos de Microsoft Windows.

Voici pourquoi les modèles non supervisés sont si cool

J’ai été impressionné, mais pas époustouflé, par les performances prédictives brutes de GPT-2 (au moins la version publique) par rapport à des solutions plus simples comme textgenrnn. Ce que je n’ai compris que plus tard, c’est la polyvalence. GPT-2 est suffisamment polyvalent pour répondre à une grande variété de cas d’utilisation. Par exemple, si vous lui donnez des paires de phrases en français et en anglais comme invite, suivies uniquement d’une phrase en français, il fait un travail plausible de génération de traductions. Ou si vous lui donnez des paires de questions et réponses, suivies d’une question, il fait un travail décent pour trouver une réponse plausible. Si vous générez des textes ou des articles intéressants, pensez à les partager, car il s’agit définitivement d’une expérience d’apprentissage pour nous tous.

Maintenant lis:

Bouton retour en haut de la page