[PYTHON] J'ai essayé la génération de phrases avec GPT-2

La dernière fois, [Failure] je voulais générer des phrases en utilisant TextRegressor de Flair, mais cela a échoué, j'ai donc utilisé GPT-2 cette fois. Je vais essayer de générer un document.

Quand j'ai commencé à écrire, j'ai remarqué qu'il y avait une bibliothèque de dieu appelée gpt-2-simple, alors je l'ai empruntée et je l'ai fait. Aller.

Essayez d'abord l'exemple

Puisque gpt-2-simple est basé sur openai GPT-2, il ne fonctionne pas avec la série tensorflow 2.x. Donc, si vous voulez utiliser l'image Docker, utilisez tensorflow / tensorflow: 1.15.2-py3 (pour le processeur). <détails>

Lors de l'utilisation du GPU </ summary>
Lors de l'utilisation d'une image Docker (mais ne fonctionne pas avec docker sous Windows Il semble...)

docker run --runtime=nvidia -it tensorflow/tensorflow:1.15.2-gpu-py3 bash

Lors de la construction rapide d'un environnement avec Conda

conda create -n gpt-2 python=3.6
conda activate gpt-2
pip install tensorflow-gpu==1.15

Alors, installez-le avec pip3 install gpt-2-simple, et apprenons le texte de Shakespeare et sortons-le comme indiqué dans Utilisation. Le résultat de l'apprentissage et de l'exécution d'une seule époque est le suivant.

1 Résultat de l'apprentissage uniquement des époques
>>> gpt2.generate(sess)
Cells in the body of a whale are often used as a means to induce sleep in some whales. But in the case of a whale, this particular type of whale is known as a cusps whale because it is usually about the size of a human hair.

The, or humpback whale, is one of the largest cusps whales in the world. It is an extremely large, highly muscled, and highly territorial mammal, with a very large mouth and, in some sections, white, skinned head.

...

Le contenu qui sort est-il une baleine? Cela ressemble à une histoire, mais il semble que vous puissiez apprendre 1 époque et enregistrer le modèle pour le moment, alors passons à la suivante.

Apprenons votre propre corpus

Dans l'exemple ci-dessus, le modèle 124 Mo de GPT-2 est affiné. Entrez une chaîne de caractères japonais ici et vérifiez si vous pouvez bien l'ajuster.

Un exemple de lancement de phrases japonaises séparées par des espaces et d'apprentissage de 200 époques
«Northeast Regional» 188 (United Station) à destination du nord qui exploite le corridor(Washington D. C .)Départ de la gare Pennsylvania(New York)To) a quitté la 30th Street Station de Philadelphie. Le train est ACS, qui a fabriqué 7 voitures particulières il y a un an.-Locomotive électrique type 64( No . 601 )Remorquait.

Environ 11 minutes plus tard, le train circule sur la ligne principale de plusieurs lignes au sud-est de, près de l'intersection de Frank Ford Avenue et Wheatseef Lane dans le district de Port Richmond, à 4 degrés (environ 440 m de rayon). ) Entré dans la courbe de gauche.
Accident de déraillement d'Amtrack 2015

La sortie est belle!

Livrables

https://github.com/ochiba0227/gpt2-simple/blob/master/gpt2_simple.py

Impressions

Quand j'ai essayé de peaufiner uniquement avec le référentiel GPT-2, c'était une tâche très difficile et j'ai été déçu au milieu ... A cette époque, j'ai eu la chance de rencontrer gpt-2-simple. C'est incroyable de pouvoir affiner GPT-2 et générer des documents avec un code aussi court. J'apprécie vraiment les gens qui font la bibliothèque! Maintenant que je sais comment faire des réglages fins, j'aimerais apprendre et jouer avec les phrases que je veux générer personnellement.

Ce que j'ai écrit au début que j'ai été déçu sur le chemin

Ce que j'ai écrit au début
## Essayez d'abord l'exemple Cloner à partir du [référentiel GPT-2](https://github.com/openai/gpt-2) ... Insérez le package selon [DEVELOPERS.md](https://github.com/openai/gpt-2/blob/master/DEVELOPERS.md). Mais du coup, je ne peux pas installer `tensorflow 1.12` ...
# pip install tensorflow==
ERROR: Could not find a version that satisfies the requirement tensorflow== (from versions: 2.2.0rc1, 2.2.0rc2)
ERROR: No matching distribution found for tensorflow==

Lorsque j'installe la dernière version pour le moment et que je continue, l'erreur suivante se produit.

# python3 src/generate_unconditional_samples.py | tee /tmp/samples
Traceback (most recent call last):
  File "src/generate_unconditional_samples.py", line 9, in <module>
    import model, sample, encoder
  File "/target/src/model.py", line 3, in <module>
    from tensorflow.contrib.training import HParams
ModuleNotFoundError: No module named 'tensorflow.contrib'

Après examen, `` 'tensorflow.contrib' 'semble être [obsolète] dans tensorflow 2.x (https://github.com/tensorflow/tensorflow/issues/31350#issuecomment-518749548) ... Il n'y a aucune aide pour cela, alors passez à l'installation depuis dockerfile. Ici, l'image de tensorflow / tensorflow: 1.12.0-py3 est utilisée. Si vous laissez tomber tous les modèles, il sera lourd, alors modifiez-le pour que seul le modèle le plus léger soit abandonné.

Dockerfile.cpu


FROM tensorflow/tensorflow:1.12.0-py3

ENV LANG=C.UTF-8
RUN mkdir /gpt-2
WORKDIR /gpt-2
ADD . /gpt-2
RUN pip3 install -r requirements.txt
RUN python3 download_model.py 124M

Si vous pouvez le modifier, il sera exécuté sur le CPU pour le moment, il ressemble donc à ce qui suit ...

docker build --tag gpt-2 -f Dockerfile.cpu .
docker run -it gpt-2 bash

export PYTHONIOENCODING=UTF-8
python3 src/generate_unconditional_samples.py | tee /tmp/samples

Ensuite, j'ai eu l'erreur ʻAttributeError: module'tensorflow 'n'a pas d'attribut'sort'. Après examen, il semble que le tensorflow 1.12.0 doit être modifié pour importer tf.contrib.framework.sort... Cela semble fonctionner si vous utiliseztensorflow 1.14.0`, donc cette fois je voudrais modifier le côté du fichier docker.

Dockerfile.cpu


#Parce que c'est un gros problème, 1.J'en ai fait la dernière version de la série x
FROM tensorflow/tensorflow:1.15.2-py3

ENV LANG=C.UTF-8
RUN mkdir /gpt-2
WORKDIR /gpt-2
ADD . /gpt-2
RUN pip3 install -r requirements.txt
RUN python3 download_model.py 124M

Donc, si vous jetez un second coup d'œil et que vous l'exécutez, vous obtiendrez la sortie suivante de lie article!

Exemple de sortie de faux articles
python3 src/generate_unconditional_samples.py | tee /tmp/samples
======================================== SAMPLE 1 ========================================
 — President Donald Trump tweeted on Saturday that he would not do it again in the 2017 budget.

"Of course, and I bet WA will accept my debt — but if a bad story develops, they'll tell me as long as I am cutting deduction for health care," Trump tweeted on December 19.

If a bad story develops, they'll tell me as long as I am reducing deduction for health care. — President Donald Trump (@realDonaldTrump) December 19, 2017  

The first budget request "is building around a debt epidemic for $3.5 trillion," according to CNN. The problem, it turns out, is that Trump would work with 
Republicans to pass a debt-ceiling increase, despite claims that the written framework can't be passed.

The budget would create $11.1 trillion in government debt, according to PPP , Russia, and China – which have agreed on a plan to get rid of regulations on corporate taxes as part of a five-year plan which includes massive cuts to subsidies for growth to deal with the looming financial crisis.

Today's budget contradicts Cliff's upcoming budget agreement, which to...

Certes, même le plus petit modèle peut créer un article qui semble ... incroyable. Maintenant que j'ai finalement déplacé l'échantillon, j'aimerais le laisser apprendre ensuite.

Apprendre avec GPT-2

Pour être honnête, il y a trop peu d'endroits à expliquer, donc c'est assez difficile ... C'est peut-être parce que ce n'est pas abusé ...

Utilisation du corpus japonais

Le numéro 104, 114 indique le corpus On dit qu'il s'agit de Byte_pair_encoding. Si vous souhaitez créer votre propre modèle, reportez-vous à This person's way et [Sentence Piece](https: / (/github.com/google/sentencepiece) semble bon.

Cette fois, nous emprunterons le modèle BERT tiré du Wikipedia japonais de M. Possible. Télécharger Modèle formé ...

Recommended Posts

J'ai essayé la génération de phrases avec GPT-2
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
J'ai essayé Learning-to-Rank avec Elasticsearch!
J'ai essayé le clustering avec PyCaret
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
J'ai écrit le code pour la génération de phrases japonaises avec DeZero
J'ai essayé de résumer des phrases avec summpy
J'ai essayé l'apprentissage automatique avec liblinear
J'ai essayé webScraping avec python.
J'ai essayé de déplacer de la nourriture avec SinGAN
J'ai essayé d'implémenter DeepPose avec PyTorch
J'ai essayé la détection de visage avec MTCNN
J'ai essayé la communication SMTP avec Python
J'ai essayé d'apprendre LightGBM avec Yellowbrick
J'ai essayé la reconnaissance faciale avec OpenCV
J'ai essayé d'implémenter la classification des phrases par Self Attention avec PyTorch
J'ai essayé l'analyse de régression multiple avec régression polypoly
J'ai essayé d'utiliser Amazon SQS avec django-celery
J'ai essayé d'implémenter Autoencoder avec TensorFlow
J'ai essayé linebot avec flacon (anaconda) + heroku
J'ai essayé de commencer avec Hy
J'ai essayé d'utiliser du sélénium avec du chrome sans tête
J'ai essayé l'analyse factorielle avec des données Titanic!
J'ai essayé d'apprendre avec le Titanic de Kaggle (kaggle②)
J'ai essayé le rendu non réaliste avec Python + opencv
J'ai essayé un langage fonctionnel avec Python
J'ai essayé la récurrence avec Python ② (séquence de nombres Fibonatch)
J'ai essayé d'implémenter DeepPose avec PyTorch PartⅡ
J'ai essayé d'implémenter CVAE avec PyTorch
J'ai essayé de jouer avec l'image avec Pillow
J'ai essayé de résoudre TSP avec QAOA
J'ai essayé la reconnaissance d'image simple avec Jupyter
J'ai essayé le réglage fin de CNN avec Resnet
J'ai essayé le traitement du langage naturel avec des transformateurs.
# J'ai essayé quelque chose comme Vlookup avec Python # 2
J'ai essayé de gratter
J'ai essayé PyQ
J'ai essayé AutoKeras
J'ai essayé le moulin à papier
J'ai essayé django-slack
J'ai essayé spleeter
J'ai essayé cgo
J'ai essayé de prédire l'année prochaine avec l'IA
J'ai essayé de "lisser" l'image avec Python + OpenCV
J'ai essayé des centaines de millions de SQLite avec python
J'ai essayé d'implémenter la lecture de Dataset avec PyTorch
J'ai essayé d'utiliser lightGBM, xg boost avec Boruta
J'ai essayé la reconnaissance d'image de CIFAR-10 avec Keras-Learning-
J'ai essayé d'apprendre le fonctionnement logique avec TF Learn
J'ai essayé de déplacer GAN (mnist) avec keras
J'ai essayé la reconnaissance d'image de CIFAR-10 avec la reconnaissance d'image Keras-
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé de détecter rapidement un mouvement avec OpenCV
J'ai essayé d'intégrer Keras dans TFv1.1
J'ai essayé Flask avec des conteneurs distants de VS Code