Outils pour utilisateurs

Outils du site


aitextgen

Ceci est une ancienne révision du document !


Génération de textes avec aitextgen et GPT-2

Les chercheurs retardent la publication de leurs recherches car ils estiment que GPT2 a un potentiel « trop dangereux », étant donné que cette IA pourrait à terme servir à des actes mal intentionnées comme générer des avis négatifs ou positifs sur des produits, des spams, des textes complotistes, voire des fausses nouvelles. cf W

Quel carte graphique choisir en Juin 2020

  • RTX 2060 (6 GB): if you want to explore deep learning in your spare time. 360€
  • RTX 2070 or 2080 (8 GB): if you are serious about deep learning, but your GPU budget is $600-800. Eight GB of VRAM can fit the majority of models.
  • RTX 2080 Ti (11 GB): if you are serious about deep learning and your GPU budget is ~$1,200. The RTX 2080 Ti is ~40% faster than the RTX 2080.
  • Titan RTX and Quadro RTX 6000 (24 GB): if you are working on SOTA models extensively, but don't have budget for the future-proofing available with the RTX 8000. 4000€
  • Quadro RTX 8000 (48 GB): you are investing in the future and might even be lucky enough to research SOTA deep learning in 2020. 5500€

Ressources

aitextgen

OpenAI

  • OpenAI sur Wikipedia: OpenAI est une entreprise à « but lucratif plafonné » en intelligence artificielle, basée à San Francisco. L'objectif de cette société est de promouvoir et développer une intelligence artificielle à visage humain qui bénéficiera à toute l'humanité. OpenAI a mis au point une intelligence artificielle nommée GPT2 capable d'écrire des articles de presse et des œuvres de fiction. Reposant sur un générateur de texte qui assimile les mots reçus et détermine la suite la plus logique qu'elle retransmet dans le même style, elle s'avère particulièrement performante, à tel point qu'il est impossible de faire la différence avec un texte écrit par un être humain.
    Les chercheurs retardent la publication de leurs recherches car ils estiment que GPT2 a un potentiel « trop dangereux », étant donné que cette IA pourrait à terme servir à des actes mal intentionnées comme générer des avis négatifs ou positifs sur des produits, des spams, des textes complotistes, voire des fausses nouvelles.

Controverse sur GPT-2

Transformers

  • Transformers: State-of-the-art Natural Language Processing for Pytorch and TensorFlow 2.0. Transformers (formerly known as pytorch-transformers and pytorch-pretrained-bert) provides state-of-the-art general-purpose architectures (BERT, GPT-2, RoBERTa, XLM, DistilBert, XLNet, T5, CTRL…) for Natural Language Understanding (NLU) and Natural Language Generation (NLG) with over thousands of pretrained models in 100+ languages and deep interoperability between PyTorch & TensorFlow 2.0.

BERT

  • BERT (traitement automatique du langage) En traitement automatique du langage naturel, BERT, acronyme de Bidirectional Encoder Representations from Transformers, est un modèle de langage (en) développé par Google en 2018. Cette méthode a permis d'améliorer significativement les algorithmes de traitement automatique de la langue.

CamemBERT

The CamemBERT model was proposed in CamemBERT: a Tasty French Language Model by Louis Martin, Benjamin Muller, Pedro Javier Ortiz Suárez, Yoann Dupont, Laurent Romary, Éric Villemonte de la Clergerie, Djamé Seddah, and Benoît Sagot. It is based on Facebook’s RoBERTa model released in 2019. It is a model trained on 138GB of French text.

FlauBERT

The FlauBERT model was proposed in the paper FlauBERT: Unsupervised Language Model Pre-training for French by Hang Le et al. It’s a transformer pre-trained using a masked language modeling (MLM) objective (BERT-like).

Fables de La Fontaine

Suite de Avec des fables de La Fontaine

training.py
from aitextgen import aitextgen
from aitextgen.TokenDataset import TokenDataset
from aitextgen.tokenizers import train_tokenizer
from aitextgen.utils import GPT2ConfigCPU, GPT2Config
from aitextgen import aitextgen
 
def get_config():
    return GPT2Config(
                            vocab_size=20000,
                            n_positions=1024,
                            n_ctx=1024,
                            n_embd=768,
                            n_layer=12,
                            n_head=12,
                            bos_token_id=0,
                            eos_token_id=0,
                            max_length=1024,
                            dropout=0.0
                        )
 
def training():
    file_name  =  "./fables.txt"
    train_tokenizer(file_name, vocab_size=20000)
    vocab_file = "aitextgen-vocab.json"
    merges_file = "aitextgen-merges.txt"
 
    config = get_config()
    ai = aitextgen(vocab_file=vocab_file, merges_file=merges_file, config=config)
 
    data = TokenDataset(file_name,
                        vocab_file=vocab_file,
                        merges_file=merges_file,
                        block_size=64)
 
    ai.train(data, batch_size=32, num_steps=60000)
    ai.generate(5, prompt="Le chien et le lion")
 
training()
 
"""
essai 5
11,472 sets of tokens from ./fables.txt
Loss: 0.094 — Avg: 0.093
"""
testing.py
from aitextgen import aitextgen
from aitextgen.utils import GPT2Config
 
 
class AiTextGen:
 
    def __init__(self):
        """Charge le gpt2 model de /aitextgen si existe,
        sinon le télécharge dans /aitextgen."""
 
        self.prompt = "Romeo: "
        self.config = self.get_config()
        print("Config chargée.")
        print("    soit:\n", self.config)
 
        print("Création de aitextgen():")
        ai = aitextgen()
        print("Done.")
 
        self.vocab_file = "aitextgen-vocab.json"
        self.merges_file = "aitextgen-merges.txt"
 
        print("Chargement du modèle pytorch ...")
        self.ai = aitextgen(model="./trained_model/pytorch_model.bin",
                            vocab_file=self.vocab_file,
                            merges_file=self.merges_file,
                            config=self.config)
 
    def get_config(self):
        return GPT2Config(
                            vocab_size=20000,
                            n_positions=1024,
                            n_ctx=1024,
                            n_embd=768,
                            n_layer=12,
                            n_head=12,
                            bos_token_id=0,
                            eos_token_id=0,
                            max_length=1024,
                            dropout=0.0
                        )
 
    def get_irc_response(self, prompt, len_max, temp):
        if isinstance(prompt, str):
            resp = self.ai.generate(n=1,
                                    prompt=prompt,
                                    max_length=len_max,
                                    temperature=temp,
                                    return_as_list=True)
        return resp
 
 
    def interactif(self):
        while 1:
            try:
                prompt = input("Entrer un début de phrase:\n")
            except:
                prompt = "Ne jouer pas à ce petit jeu !"
            if isinstance(prompt, str) and len(prompt) > 4:
                resp = self.ai.generate(n=1,
                                        prompt=prompt,
                                        max_length=100,
                                        temperature=0.8,
                                        return_as_list=True)
                print(f"\n\nLa Fontaine n'a pas écrit:\n{resp[0]}\n\n")
            else:
                print("Raté")
 
 
if __name__ == "__main__":
 
    atg = AiTextGen()
    atg.interactif()

Configuration

config = GPT2Config(vocab_size=20000,
                    n_positions=1024,
                    n_ctx=1024,
                    n_embd=768,
                    n_layer=12,
                    n_head=12,
                    bos_token_id=0,
                    eos_token_id=0,
                    max_length=1024,
                    dropout=0.0 )
 
print(config)
"""
GPT2Config {"activation_function": "gelu_new",
            "attn_pdrop": 0.1,
            "bos_token_id": 0,
            "dropout": 0.0,
            "embd_pdrop": 0.1,
            "eos_token_id": 0,
            "initializer_range": 0.02,
            "layer_norm_epsilon": 1e-05,
            "max_length": 1024,
            "model_type": "gpt2",
            "n_ctx": 1024,
            "n_embd": 768,
            "n_head": 12,
            "n_layer": 12,
            "n_positions": 1024,
            "resid_pdrop": 0.1,
            "summary_activation": null,
            "summary_first_dropout": 0.1,
            "summary_proj_to_labels": true,
            "summary_type": "cls_index",
            "summary_use_proj": true,
            "vocab_size": 20000}
"""
 
ai = aitextgen(model="./trained_model/pytorch_model.bin", vocab_file=vocab_file,
                        merges_file=merges_file, config=config)
 
ai.generate(n=1, prompt=prompt, max_length=100, temperature=0.8, return_as_list=True)

Mails de La Labomedia

Configuration

def get_config():
    return GPT2Config(
                            vocab_size=20000,
                            n_positions=1024,
                            n_ctx=1024,
                            n_embd=768,
                            n_layer=12,
                            n_head=12,
                            bos_token_id=0,
                            eos_token_id=0,
                            max_length=1024,
                            dropout=0.0
                        )
 
data = TokenDataset(file_name,
                    vocab_file=vocab_file,
                    merges_file=merges_file,
                    block_size=64)
ai.train(data, batch_size=32, num_steps=150000)

Victor Hugo

Toutes l’œuvre de Victor Hugo est libre, et comme Victor a beaucoup écrit et particulièrement bien, cela fournit de bonnes datas pour l'apprentissage.

Toutes sont oeuvre a été téléchargée sur bouquineux.com au format epub.

Conversion de *.epub vers *.txt avec pypandoc, puis regroupement de tous les poèmes dans poesie.txt et tous les romans dans roman.txt

Nettoyage des datas

Les sauts de lignes, les sommaires … doivent être nettoyés: avec clean_txt.py

Le nettoyage des datas est très important, ce n'est pas drôle, il faut vérifier le résultat obtenu en tapant au hasard dans le texte, ça prend un temps fou …

La génération de texte est une représentation fidèle du texte d'apprentissage: par exemple si il y a beaucoup de saut de ligne, le texte généré aura aussi plein de saut de ligne.

Poésie

Config

vocab_size=10000
n_positions=1024
n_ctx=1024
n_embd=768
n_layer=12
n_head=12
bos_token_id=0
eos_token_id=0
max_length=1024
dropout=0.0
batch_size=32 
num_steps=180000

temps de training 26:37:34
Encoding 50,741 sets of tokens from ./poesie_clean.txt
debut Loss: 6.521 — Avg: 8.438 — GPU Mem: 5174 MB
fin   Loss: 0.140 — Avg: 0.141

Roman

Pense bête pour NFS

aitextgen.1593950331.txt.gz · Dernière modification : 2020/07/05 11:58 de serge