Немецкие большие и маленькие версии GPT2:
См. Модель GPT2 для соображений об ограничениях и предвзятости. Смотрите документацию GPT2 для получения подробной информации о GPT2.
Я оценил и Gerpt2-Large, так и другие немецкие GPT2, DBMDZ/German-GPT2 в наборе данных CC-100 и в немецкой Википедии:
| CC-100 (PPL) | Википедия (пп) | |
|---|---|---|
| DBMDZ/German-GPT2 | 49,47 | 62,92 |
| GERPT2 | 24.78 | 35,33 |
| Gerpt2-Large | 16.08 | 23.26 |
См. Script evaluate.py в репозитории GERPT2 GitHub для кода.
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" ])Кроме того, два трюка могут улучшить сгенерированный текст:
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 обучается всем немецким данным из корпуса CC-100, и веса были инициализированы из английской модели GPT2. Gerpt2-Large был обучен:
Обучение заняло примерно 12 дней на 8 ядер TPUV3.
Чтобы тренировать Gerpt2-Large, следуйте этим шагам. Сценарии расположены в репозитории GitHub:
prepare/train_tokenizer.py . В качестве учебных данных для токенизатора я использовал случайное подмножество 5% данных CC-100.prepare/generate_aligned_wte.py . Это использует аккуратный трюк, чтобы семантически карта токенов от английского токенов до токенов от немецкого токенизатора с использованием выровненных встроенных слов. 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
Это очень помогает в пробном забеге, который я сделал, хотя я не смог провести полное сравнение из -за бюджета и временных ограничений. Чтобы использовать эту матрицу WTE, она может быть передана через wte_path в учебный скрипт. Кредит этому посту блога за идею инициализации GPT2 из веса английского языка.
prepare/tokenize_text.py . Это генерирует файлы для поезда и токенов валидации в формате линий JSON.train.py ! run.sh показывает, как это было выполнено для полного запуска с помощью config configs/tpu_large.json . GERPT2 лицензирован по лицензии MIT.
Пожалуйста, цитируйте GERPT2 следующим образом:
@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}
}
Благодаря обнимающему лицу за потрясающие инструменты и инфраструктуру. Огромное спасибо Артусу Крону-Гримберге в Lytiq за то, что он сделал это возможным, спонсируя ресурсы, используемые для обучения.