Réseau neuronal GPT-2 d'OpenAI. Démarrage rapide

image


SitÎt le bruit sur le réseau neuronal BERT de Google, qui a montré des résultats de pointe dans un certain nombre de tùches conversationnelles (NLP) en apprentissage automatique, comme OpenAI a déployé un nouveau développement: GPT-2. Ce réseau de neurones avec un nombre record de paramÚtres à l'heure actuelle (1,5 milliard, contre les 100 à 300 millions couramment utilisés dans de tels cas) a pu générer des pages entiÚres de texte connecté.


Il est si bon de générer qu'OpenAI a refusé de publier la version complÚte, craignant qu'ils n'utilisent ce réseau de neurones pour créer de fausses nouvelles, des commentaires et des critiques indiscernables des vrais.


Cependant, dans OpenAI, une version réduite du réseau neuronal GPT-2 a été partagée avec 117 millions de paramÚtres. Nous allons le lancer via le service Google Colab et l'expérimenter.


Un peu de fond


Pour ceux qui n'ont pas suivi l'évolution des progrÚs du traitement naturel de la parole (PNL).


À l'Ă©tĂ© 2018, OpenAI a prĂ©-formĂ© sur un grand volume de texte un rĂ©seau neuronal GPT basĂ© sur l'architecture Transformer. Il s'est avĂ©rĂ© que si vous remplacez quelques-unes des derniĂšres couches et que vous la reconvertissez pour une tĂąche spĂ©cifique (cette approche est appelĂ©e Fine Tuning et est largement utilisĂ©e dans l'apprentissage automatique), elle bat immĂ©diatement les records prĂ©cĂ©dents sur un large Ă©ventail de tĂąches conversationnelles.


Sur la base de ce développement, Google a créé fin 2018 son propre réseau de neurones BERT . Ils ont sérieusement amélioré le résultat en rendant le réseau neuronal bidirectionnel, contrairement au GPT.


Ne voulant pas abandonner, en février 2019, OpenAI a immédiatement augmenté son GPT de 10 fois et l'a formé sur une quantité de texte encore plus importante - sur 8 millions de pages Web (soit un total de 40 Go de texte). Le réseau GPT-2 qui en résulte est actuellement le plus grand réseau de neurones, avec un nombre sans précédent de paramÚtres de 1,5 milliard (le BERT avait 340 millions dans le plus grand modÚle et 110 millions dans le BERT standard).


En conséquence, GPT-2 a pu générer des pages entiÚres de texte cohérent. Avec des références répétées aux noms des personnages au cours du récit, des citations, des références à des événements connexes, etc. Je ne donnerai pas d'exemples ici, mais référez ceux qui le souhaitent à l'article original sur le blog OpenAI: Better Language Models and Its Implications ou aux liens à la fin de l'article.


Générer un texte cohérent de cette qualité est impressionnant en soi, mais la chose la plus intéressante est différente. Le GPT-2 sans formation supplémentaire a immédiatement montré des résultats proches de l'état de l'art sur un certain nombre de tùches conversationnelles. Je le répÚte, qui a raté l'importance du moment - sans aucune formation supplémentaire pour une tùche spécifique!


Comment ont-ils réussi cela? Il suffit de poser aux réseaux de neurones les bonnes questions.


Architecture GPT-2


GPT-2 est formé pour prédire le mot suivant dans une phrase. Il s'agit d'une approche classique pour générer du texte. Dans un premier temps, les réseaux de récurrence (RNN), en particulier le LSTM, ont tenu la primauté dans ce domaine. Mais aprÚs l'invention de l'architecture Transformer à l'été 2017, elle a progressivement commencé à s'imposer dans les tùches conversationnelles. Bien que le Transformer d'origine ait un problÚme de stockage de longues séquences (les LSTM se souviennent des plus longues), la vitesse de formation et la profondeur du réseau ont plus que compensé cela. Soit dit en passant, un certain nombre de modifications du transformateur sont déjà apparues - avec l'introduction de la récurrence ( Universal Transformers ), une modification pour les séquences plus longues ( Transformer-XL ) et d'autres, mais jusqu'à présent, seul un Transformer original légÚrement réglé est utilisé dans Google et OpenAI.


Je me souviens que le BERT de Google a appris un peu diffĂ©remment: prĂ©dire non pas le mot suivant dans une phrase, mais les mots (masquĂ©s) manquĂ©s dans une phrase. Et aussi pour dĂ©terminer si deux phrases consĂ©cutives sont une continuation logique l'une de l'autre, ou si elles ne sont en aucun cas liĂ©es par le sens. Cela a permis au BERT d'ĂȘtre un modĂšle de langage qui comprend la signification des mots en fonction de leur environnement (contexte). Ce qui a dĂ©terminĂ© le succĂšs du BERT dans les tĂąches NPL. Mais seulement aprĂšs un recyclage (rĂ©glage fin) pour une tĂąche spĂ©cifique. La simple prĂ©diction de mots dans le modĂšle de base ne fonctionne pas trĂšs bien. Vous pouvez jouer avec BERT dans votre navigateur (via Google Colab): https://habr.com/en/post/436878 .


GPT-2 n'est pas nécessaire pour se recycler. Ce n'est pas seulement un modÚle de langage comme BERT, c'est un générateur de texte. Donnez-lui simplement le début de la phrase, puis elle complétera son mot à mot.


Un détail intéressant: la recherche OpenAI a montré que les tableaux de textes Wikipédia et de livres littéraires (que le BERT a étudiés en particulier) ont un style biaisé. Par conséquent, formés uniquement sur eux, les réseaux de neurones ne génÚrent pas trÚs bien le texte. Pour diversifier les données et les styles d'entrée, OpenAI a utilisé GPT-2 pour la formation sur des pages Web réguliÚres collectées sur 8 millions de sites (un total de 40 Go de texte). Et afin d'éliminer les sites de publicité et de spammeurs, ils ont inclus dans les exemples de sites les liens vers lesquels dans le reddit ont une bonne note. Autrement dit, les sites que les utilisateurs en direct ont trouvé contiennent des informations utiles.


La bonne question contient la moitié de la réponse.


Ainsi, GPT-2, grùce à sa taille sans précédent, a pu générer des pages de texte cohérent. Mais le plus étonnant, c'est qu'en lui posant la bonne question (c'est-à-dire le début correct d'une phrase), elle a pu répondre à diverses questions! Tout simplement parce que la poursuite d'un tel début est la plus naturelle.


Par exemple, pour obtenir une réponse à la question «Qu'est-ce que la Terre?», Vous pouvez appliquer à l'entrée de ce réseau neuronal le début de la phrase: «La Terre est ...». Et elle terminera cette phrase jusqu'au bout. Parce que la réponse sera une continuation naturelle de ce début.


De plus, en formant correctement le début de la phrase, vous pouvez obtenir des explications pour différents publics cibles, en tenant compte de leur intelligence, de leur ùge et de leur éducation. Imaginez des phrases continues: "Moi, en tant que scientifique, je crois que la Terre est ...". Ou: "Moi, en tant que laboureur, je prétends que la Terre est ...". Ou: "Moi, en tant que professeur dans un jardin d'enfants, je vais maintenant vous expliquer, mes enfants, que la Terre est ...".


Comme vous pouvez le voir, en formant les bonnes questions (le bon début de la phrase), vous pouvez obtenir des réponses de niveaux et de détails complÚtement différents. D'une certaine maniÚre, une chose similaire se produit chez les gens. Le médecin doit expliquer au patient l'évolution de la maladie afin qu'il comprenne. Au niveau du patient. Si vous demandez à un enfant de cinq ans pourquoi il a fait cela, alors il ne peut pas répondre immédiatement (ce qui, naturellement, les enfants vivent avec des sentiments et des émotions). Mais pour donner la réponse que l'on attend de lui, l'enfant commence à l'inventer - à générer du texte. Basé sur le fait que la réponse convient au parent et qu'elle correspond au moins en quelque sorte à ce qui s'est passé. Au début, comme de nombreux parents le savent, ce seront des réponses ridicules. Mais en encourageant et en punissant ("dites-moi plus", "ne trouvez pas d'excuses"), l'enfant apprendra à donner des réponses détaillées et complÚtes.


Ce développement d'OpenAI et la capacité du réseau GPT-2 à fournir des réponses aux tùches conversationnelles sans formation supplémentaire spéciale pour une tùche spécifique, ouvrent deux questions intéressantes:


1) L'interprĂ©tabilitĂ© des rĂ©seaux de neurones peut-elle ĂȘtre obtenue par un tel gĂ©nĂ©rateur de texte Ă©lĂ©mentaire et le dĂ©but correct d'une phrase. OĂč la rĂ©ponse sera une extension naturelle. Supposons, par exemple, qu'un rĂ©seau de neurones n'indique pas les sceaux dans une photographie par les nombres de coordonnĂ©es x-y, mais explique sa position en texte clair. Puis, au cours de la clarification, en lui posant la bonne question, par exemple: "Je suis arrivĂ© Ă  cette conclusion parce que ...", vous pouvez en thĂ©orie avoir une explication sur la façon dont elle a trouvĂ© le chat sur la photo. Et cette explication dans le cas extrĂȘme ne peut ĂȘtre pire qu'humaine. Ce qui rĂ©sout le problĂšme global d'interprĂ©tabilitĂ© des rĂ©seaux de neurones.


2) Un rĂ©seau neuronal prĂ©-formĂ© sur de gros volumes de texte peut-il ĂȘtre universel, avoir du bon sens et ne pas nĂ©cessiter de formation supplĂ©mentaire pour des tĂąches spĂ©cifiques. Cela signifie qu'en essayant d'imiter la parole humaine (rĂ©ponses humaines aux questions), le rĂ©seau neuronal doit inĂ©vitablement apprendre le bon sens afin de donner ces rĂ©ponses trĂšs similaires aux rĂ©ponses humaines. Donner des rĂ©ponses fictives monosyllabiques, en gĂ©nĂ©ral, n'est pas typique des gens. Pour la plupart, les gens donnent des rĂ©ponses adĂ©quates et dĂ©taillĂ©es, ce qui signifie que le rĂ©seau doit apprendre Ă  faire de mĂȘme.


Ces deux questions restent ouvertes, mais la premiÚre étape de leur approbation a définitivement été franchie.


Ou plutĂŽt?


Si vous vous tenez maintenant, il vaut mieux vous asseoir. Parce que c'est ainsi qu'OpenAI utilisant le réseau neuronal GPT-2 a obtenu ses résultats dans des tùches conversationnelles pour différents domaines:


Réponses aux questions sur le texte


Eh bien, c'est facile. Ou a alimenté le réseau quelques paragraphes avec une description qui comprenait quelque part au milieu, par exemple, "la pomme est sur la table", et à la fin, il a été attribué: "la pomme est sur ..." et le réseau a été ajouté à la "table". Parce qu'il est capable de se souvenir du contexte de plusieurs paragraphes.


Ou alimenté le réseau en tant que phrase initiale quelques exemples du type "Question: une question, Réponse: une réponse", et à la fin aprÚs la vraie question, ils ont ajouté: "Réponse:". Et le réseau neuronal a ajouté la réponse! Puisqu'il a révélé la structure du document sur la question-réponse précédente. C'est incroyable.


Version courte (résumé) du texte


L'entrĂ©e est un long texte de plusieurs paragraphes ou mĂȘme des pages, et le rĂ©seau neuronal doit Ă©crire un court contenu. Comment avez-vous obtenu ce comportement de GPT-2? Juste aprĂšs le texte, ils ont ajoutĂ© "TL; DR". Et c'est tout! Cela s'est avĂ©rĂ© suffisant pour que le GPT-2 ajoute un rĂ©sumĂ© de l'article aprĂšs ces caractĂšres! Parce que ces symboles sur Internet dĂ©signent souvent le rĂ©sumĂ© de la publication.


Traduction de texte


L'entrée GPT-2 a reçu le texte sous la forme: "bonjour = bonjour, chien = chien, vent = vent, chat = ...". Et le réseau neuronal a ajouté la traduction du dernier mot: "chat" (dans l'original en français). Parce qu'il révélait la structure du document et le complétait simplement par la suite la plus logique. Si votre mùchoire n'est toujours pas tombée de tout cela, alors j'ai deux nouvelles pour vous, et les deux sont mauvaises =).


Lancement de GPT-2 via Google Colab


Malheureusement, la version complĂšte de GPT-2 dans OpenAI a Ă©tĂ© refusĂ©e Ă  ĂȘtre partagĂ©e. Motiver cela par le fait qu'en utilisant ce rĂ©seau de neurones, il sera trop facile de gĂ©nĂ©rer de fausses nouvelles et des critiques dans les magasins. À en juger par leur dĂ©claration, la discussion sur l'opportunitĂ© de prĂ©senter ce modĂšle se poursuivra pendant les 6 prochains mois, Ă  la suite de l'OpenAI, ils dĂ©cideront de le tĂ©lĂ©charger ou non. Cependant, pour une grande organisation, il n'est pas difficile de rĂ©pĂ©ter le modĂšle (il semble qu'ils l'ont formĂ© pour 256 TPU pendant plusieurs jours, et selon les estimations prĂ©liminaires, cela leur a coĂ»tĂ© environ 45 000 $)


Cependant, ils ont publié une version réduite de GPT-2 avec 117 millions de paramÚtres (au lieu de 1,5 milliard, comme dans le modÚle complet): https://github.com/openai/gpt-2 . Essayons de l'exécuter et de jouer avec ce modÚle.


Mise à jour du 9 novembre 2019: enfin, toute la gamme de modÚles a été présentée, dont 1,5 milliard, les fichiers et les instructions de lancement ont été mis à jour.


La façon la plus simple de le faire est d'utiliser Google Colab:


  1. Ouvrez le lien

http://colab.research.google.com/github/blade1780/bert/blob/master/Gpt-2.ipynb


  1. Dans le menu Runtime , sélectionnez Exécuter tout , de sorte que pour la premiÚre fois toutes les cellules démarrent, les téléchargements de modÚle et les bibliothÚques nécessaires sont connectés. Acceptez de réinitialiser tout le Runtime si nécessaire. Saisissez le texte aprÚs l'apparition de "Invite de modÚle >>>" et appuyez sur Entrée.

Faites attention à la ligne au tout début:


model_name = '117M'


Ici, vous pouvez spécifier la taille du modÚle GPT-2 à utiliser. Les modÚles suivants sont disponibles (sous réserve de mise à jour):


117M
124M
355M
774M
1558M


Ici, 117M est le plus petit modÚle qui était le seul disponible au moment d'écrire ces lignes. OpenAI a ensuite présenté des modÚles toujours croissants, jusqu'au 5 novembre 2019, a défini le maximum de 1558 millions (avec 1,5 milliard de paramÚtres).


En cas de problĂšme ...

Assurez-vous que GPU et Python 3 sont sélectionnés dans le menu Runtime -> Change runtime type


Si le bouton de connexion n'est pas actif, cliquez dessus pour devenir connecté.


Ou créez tout le code manuellement:


  1. Accédez à https://colab.research.google.com
  2. Appuyez sur le bouton bleu NEW PYTHON 3 NOTEBOOK
  3. Dans le menu Runtime -> Change runtime type, sélectionnez Python 3 et le GPU (ce dernier pour exécuter le réseau neuronal sur le GPU)
  4. Dans la premiĂšre cellule, saisissez:

model_name = '117M' !git clone https://github.com/openai/gpt-2 %cd gpt-2 !pip3 install -r requirements.txt !python3 download_model.py $model_name 

Au lieu de 117M (le plus petit), vous pouvez spécifier n'importe quel modÚle intermédiaire ou plus grand: 1558M.


Et cliquez sur l'icÎne de lecture noire à gauche de la cellule. Cela va télécharger le réseau neuronal GPT-2 sélectionné et installer les dépendances nécessaires.


Dans la deuxiĂšme cellule (vous pouvez l'ajouter via le menu Insertion -> Cellule Code ou en passant la souris sous le centre de la cellule courante, les boutons d'ajout apparaĂźtront):


 !python3 src/interactive_conditional_samples.py --model_name=$model_name 

Cela lancera le mode interactif. Attendez que le rĂ©seau de neurones dĂ©marre et qu'une fenĂȘtre s'affiche pour saisir du texte avec l'inscription "" ModĂšle d'invite >>> ". Entrez le dĂ©but de la phrase et appuyez sur EntrĂ©e. AprĂšs un certain temps, le texte gĂ©nĂ©rĂ© apparaĂźt sous l'en-tĂȘte SAMPLE.


Vous pouvez Ă©galement dĂ©marrer le mode de gĂ©nĂ©ration de texte complĂštement alĂ©atoire. Le texte sera gĂ©nĂ©rĂ© Ă  l'infini en petits morceaux de SAMPLE 1, SAMPLE 2, etc. jusqu'Ă  ce que vous cliquiez sur le bouton ArrĂȘter de la cellule. Pour ce faire, crĂ©ez une nouvelle cellule avec le code:


 !python3 src/generate_unconditional_samples.py --model_name=$model_name | tee samples.txt 

Le rĂ©sultat sera enregistrĂ© dans le fichier samples.txt. Il peut ĂȘtre tĂ©lĂ©chargĂ© avec les commandes suivantes (crĂ©ez Ă  nouveau une nouvelle cellule et exĂ©cutez-la aprĂšs avoir gĂ©nĂ©rĂ© le texte):


 from google.colab import files files.download('samples.txt') 

Vous pouvez modifier les paramÚtres de génération du texte (coefficient d'aléatoire, etc., voir la description dans l' oeuvre originale ):


 !python3 src/generate_unconditional_samples.py --model_name=$model_name --top_k 40 --temperature 0.7 | tee samples.txt 

Étant donnĂ© que le 117M est un modĂšle considĂ©rablement rĂ©duit, ne vous attendez pas Ă  des miracles (mise Ă  jour: au moment de la rĂ©daction de ce document, seul il Ă©tait disponible. Maintenant, tout est disponible, y compris le plus grand 1558M d'origine, voir ci-dessus). La plupart des Ă©chantillons gĂ©nĂ©rĂ©s seront absurdes. Mais il y a aussi des sections significatives. Le texte doit ĂȘtre en anglais, tandis que dans d'autres langues, GPT-2 n'est pas encore en mesure de fonctionner.


Exemples de texte généré


Échantillons du texte gĂ©nĂ©rĂ© par le modĂšle complet : https://blog.openai.com/better-language-models/#sample1 (en haut de la barre pour 8 histoires).


Il existe également un énorme fichier texte de 2,4 Mo avec des échantillons générés de maniÚre aléatoire: https://raw.githubusercontent.com/openai/gpt-2/master/gpt2-samples.txt


Et un de plus, 2,27 Mo, avec d'autres paramÚtres de caractÚre aléatoire: https://raw.githubusercontent.com/openai/gpt-2/master/gpt2-topk40-samples.txt


Les références


Source: https://habr.com/ru/post/fr440564/


All Articles