Versiones alemanas grandes y pequeñas de GPT2:
Consulte la tarjeta modelo GPT2 para obtener consideraciones sobre limitaciones y sesgo. Consulte la documentación GPT2 para obtener detalles sobre GPT2.
Evalué tanto GERPT2-Large como el otro GPT2 alemán, DBMDZ/German-GPT2 en el conjunto de datos CC-100 y en el Wikipedia alemán:
| CC-100 (PPL) | Wikipedia (PPL) | |
|---|---|---|
| DBMDZ/German-GPT2 | 49.47 | 62.92 |
| Gerpt2 | 24.78 | 35.33 |
| Gerpt2-Large | 16.08 | 23.26 |
Consulte el script evaluate.py en el repositorio de github GERPT2 para el código.
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" ])Además, dos trucos podrían mejorar el texto generado:
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á entrenado en todos los datos alemanes del CC-100 Corpus y los pesos se inicializaron del modelo inglés GPT2. Gerpt2-Large fue entrenado con:
El entrenamiento tomó aproximadamente 12 días en 8 núcleos TPUV3.
Para entrenar a Gerpt2-Large, siga estos pasos. Los scripts se encuentran en el repositorio de GitHub:
prepare/train_tokenizer.py . Como datos de entrenamiento para el tokenizador, utilicé un subconjunto aleatorio del 5% de los datos CC-100.prepare/generate_aligned_wte.py . Esto utiliza un truco ordenado para mapear semánticamente tokens de tokenizador inglés a tokens desde el tokenizador alemán utilizando incrustaciones de palabras alineadas. P.ej.: Ġ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
Esto ayuda mucho en una prueba de prueba que hice, aunque no pude hacer una comparación completa debido a las limitaciones de presupuesto y tiempo. Para usar esta matriz WTE, se puede pasar a través del wte_path al script de entrenamiento. Crédito a este blog Post por la idea de inicializar GPT2 a partir de pesas en inglés.
prepare/tokenize_text.py . Esto genera archivos para tokens de tren y validación en formato de líneas JSON.train.py ! run.sh muestra cómo se ejecutó esto para la ejecución completa con config configs/tpu_large.json . Gerpt2 tiene licencia bajo la licencia MIT.
Por favor cite Gerpt2 de la siguiente manera:
@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}
}
Gracias a abrazar la cara por herramientas e infraestructura increíbles. Muchas gracias a Artus Krohn-Grimberghe en Lytiq por hacer esto posible patrocinando los recursos utilizados para la capacitación.