Versões grandes e pequenas alemãs do GPT2:
Consulte o cartão do modelo GPT2 para considerações sobre limitações e viés. Consulte a documentação do GPT2 para obter detalhes sobre o GPT2.
Avaliei o Gerpt2-Large e o outro GPT2 alemão, DBMDZ/German-GPT2 no conjunto de dados CC-100 e na Wikipedia alemã:
| CC-100 (PPL) | Wikipedia (PPL) | |
|---|---|---|
| DBMDZ/German-GPT2 | 49.47 | 62.92 |
| Gerpt2 | 24.78 | 35.33 |
| Gerpt2-Large | 16.08 | 23.26 |
Consulte o script evaluate.py no repositório Gerpt2 GitHub para o 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" ])Além disso, dois truques podem melhorar o texto gerado:
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 ))O Gerpt2-Large é treinado em todos os dados alemães do corpus CC-100 e os pesos foram inicializados no modelo GPT2 inglês. Gerpt2-Large foi treinado com:
O treinamento levou cerca de 12 dias em 8 núcleos TPUV3.
Para treinar Gerpt2-Large, siga estas etapas. Os scripts estão localizados no repositório do GitHub:
prepare/train_tokenizer.py . Como dados de treinamento para o tokenizer, usei um subconjunto aleatório de 5% dos dados do CC-100.prepare/generate_aligned_wte.py . Isso usa um truque interessante para mapear semanticamente os tokens do tokenizador inglês a tokens do tokenizador alemão usando incorporações alinhadas de palavras. 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
Isso ajuda muito em uma execução de teste, embora não tenha sido capaz de fazer uma comparação completa devido a restrições de orçamento e tempo. Para usar essa matriz WTE, ela pode ser passada através do wte_path para o script de treinamento. Crédito a este post do blog pela idéia de inicializar o GPT2 a partir de pesos em inglês.
prepare/tokenize_text.py . Isso gera arquivos para tokens de trem e validação no formato JSON Lines.train.py de script de treinamento.py! run.sh mostra como isso foi executado para a execução completa com o Config configs/tpu_large.json . O GERPT2 é licenciado sob a licença do MIT.
Cite Gerpt2 da seguinte forma:
@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}
}
Graças a abraçar o rosto por ferramentas e infraestrutura incríveis. Agradecimentos enormes a Artus Krohn-Grimberghe na Lytiq por tornar isso possível patrocinar os recursos usados para o treinamento.