Germantes et petites versions allemandes de GPT2:
Voir la carte du modèle GPT2 pour des considérations sur les limitations et les biais. Voir la documentation GPT2 pour plus de détails sur GPT2.
J'ai évalué à la fois Gerpt2-Large et l'autre GPT2 allemand, DBMDZ / German-GPT2 sur l'ensemble de données CC-100 et sur le Wikipedia allemand:
| CC-100 (PPL) | Wikipedia (ppl) | |
|---|---|---|
| dbmdz / allemand-gpt2 | 49.47 | 62.92 |
| Gerpt2 | 24.78 | 35.33 |
| Gerpt2-grand | 16.08 | 23.26 |
Voir le script evaluate.py dans le référentiel Gerpt2 GitHub pour le code.
from transformers import AutoModelForCausalLM , AutoTokenizer , pipeline
tokenizer = AutoTokenizer . from_pretrained ( "benjamin/gerpt2-large" )
model = AutoModelForCausalLM . from_pretrained ( "benjamin/gerpt2-large" )
prompt = "<your prompt>"
pipe = pipeline ( "text-generation" , model = model , tokenizer = tokenizer )
print ( pipe ( prompt )[ 0 ][ "generated_text" ])De plus, deux astuces pourraient améliorer le texte généré:
output = model . generate (
# during training an EOS token was used to mark the beginning of each text
# so it can help to insert it at the start
torch . tensor (
[ tokenizer . eos_token_id ] + tokenizer . encode ( prompt )
). unsqueeze ( 0 ),
do_sample = True ,
# try setting bad_words_ids=[[0]] to disallow generating an EOS token, without this the model is
# prone to ending generation early because a significant number of texts from the training corpus
# is quite short
bad_words_ids = [[ 0 ]],
max_length = max_length ,
)[ 0 ]
print ( tokenizer . decode ( output ))Gerpt2-Large est formé sur l'ensemble des données allemandes du corpus CC-100 et les poids ont été initialisés à partir du modèle GPT2 anglais. Gerpt2-Large a été formé avec:
La formation a pris environ 12 jours sur 8 cœurs TPUV3.
Pour entraîner Gerpt2-grand, suivez ces étapes. Les scripts sont situés dans le référentiel GitHub:
prepare/train_tokenizer.py . En tant que données de formation pour le tokenzer, j'ai utilisé un sous-ensemble aléatoire de 5% des données CC-100.prepare/generate_aligned_wte.py . Cela utilise une astuce soignée pour cartographier sémantiquement les jetons du tokenzer anglais aux jetons du tokenzer allemand en utilisant des incorporations de mots alignées. E. G.: ĠMinde -> Ġleast
Ġjed -> Ġwhatsoever
flughafen -> Air
vermittlung -> employment
teilung -> ignment
ĠInterpretation -> Ġinterpretation
Ġimport -> Ġimported
hansa -> irl
genehmigungen -> exempt
ĠAuflist -> Ġlists
Ġverschwunden -> Ġdisappeared
ĠFlyers -> ĠFlyers
Kanal -> Channel
Ġlehr -> Ġteachers
Ġnahelie -> Ġconvenient
gener -> Generally
mitarbeiter -> staff
Cela aide beaucoup à un essai que j'ai fait, même si je n'ai pas pu faire une comparaison complète en raison du budget et des contraintes de temps. Pour utiliser cette matrice WTE, il peut être passé via le wte_path au script d'entraînement. Crédit à ce blog pour l'idée d'initialiser GPT2 à partir de poids anglais.
prepare/tokenize_text.py . Cela génère des fichiers pour les jetons de train et de validation au format des lignes JSON.train.py ! run.sh montre comment cela a été exécuté pour l'exécution complète avec configs/tpu_large.json . Gerpt2 est autorisé sous la licence du MIT.
Veuillez citer Gerpt2 comme suit:
@misc{Minixhofer_GerPT2_German_large_2020,
author = {Minixhofer, Benjamin},
doi = {10.5281/zenodo.5509984},
month = {12},
title = {{GerPT2: German large and small versions of GPT2}},
url = {https://github.com/bminixhofer/gerpt2},
year = {2020}
}
Merci à l'étreinte Face pour des outils et des infrastructures impressionnants. Un grand merci à Artus Krohn-Grimberghe à Lytiq pour avoir rendu cela possible en parrainant les ressources utilisées pour la formation.