Deutsche große und kleine Versionen von GPT2:
Überlegungen zu Einschränkungen und Verzerrungen finden Sie in der GPT2 -Modellkarte. Weitere Informationen zu GPT2 finden Sie in der Dokumentation GPT2.
Ich habe sowohl Gerpt2-Large als auch den anderen deutschen GPT2, DBMDZ/Deutsch-GPT2 auf dem CC-100-Datensatz und auf der deutschen Wikipedia bewertet:
| CC-100 (PPL) | Wikipedia (PPL) | |
|---|---|---|
| DBMDZ/Deutsch-GPT2 | 49,47 | 62,92 |
| Gerpt2 | 24.78 | 35.33 |
| Gerpt2-Large | 16.08 | 23.26 |
Siehe das Skript evaluate.py im Github -Repository für den 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" ])Außerdem können zwei Tricks den generierten Text verbessern:
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 wird auf den gesamten deutschen Daten aus dem CC-100-Korpus ausgebildet und Gewichte wurden aus dem englischen GPT2-Modell initialisiert. Gerpt2-large wurde mit:
Das Training dauerte ungefähr 12 Tage an 8 TPUV3 -Kernen.
Befolgen Sie diese Schritte, um Gerpt2 zu trainieren. Skripte befinden sich im Github -Repository:
prepare/train_tokenizer.py . Als Trainingsdaten für den Tokenizer verwendete ich eine zufällige Teilmenge von 5% der CC-100-Daten.prepare/generate_aligned_wte.py . Dies verwendet einen ordentlichen Trick, um die Token des englischen Tokens semantisch vom englischen Tokens zu Token aus dem deutschen Tokenizer unter Verwendung ausgerichteter Worteinbettungen zu kartieren. 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
Dies hilft bei einem Testlauf viel, obwohl ich aufgrund von Budget- und Zeitbeschränkungen keinen vollen Vergleich durchführen konnte. Um diese WTE -Matrix zu verwenden, kann sie über das wte_path an das Trainingsskript übergeben werden. Gutschrift dieses Blogpost für die Idee, GPT2 aus englischen Gewichten zu initialisieren.
prepare/tokenize_text.py . Dies generiert Dateien für Zug- und Validierungs -Token im JSON -Linienformat.train.py aus! run.sh zeigt, wie dies für den vollständigen Lauf mit config configs/tpu_large.json ausgeführt wurde. Gerpt2 ist unter der MIT -Lizenz lizenziert.
Bitte zitieren Sie Gerpt2 wie folgt:
@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}
}
Vielen Dank an das Gesicht für großartige Werkzeuge und Infrastruktur. Vielen Dank an Artus Krohn-Grimberghe bei Lytiq für die Möglichkeit, die für das Training verwendeten Ressourcen zu ermöglichen.