🚀 GerPT2
GerPT2 是德语版的 GPT2 模型,提供了大、小两种版本。该模型为德语自然语言处理任务提供了强大的支持,可应用于文本生成等多种场景。
🚀 快速开始
GerPT2 有德语的大、小两种版本,可通过以下链接访问:
- https://huggingface.co/benjamin/gerpt2
- https://huggingface.co/benjamin/gerpt2-large
关于 GPT2 模型的局限性和偏差的考虑,请参阅 GPT2 模型卡片。有关 GPT2 的详细信息,请参阅 GPT2 文档。
✨ 主要特性
在 CC - 100 数据集和德语维基百科上对 GerPT2 - large 和另一个德语 GPT2 模型 dbmdz/german-gpt2 进行了评估:
属性 |
详情 |
模型类型 |
GerPT2 有大、小两种版本,与 dbmdz/german - gpt2 对比,在困惑度(PPL)指标上表现更优 |
训练数据 |
使用了 CC - 100 语料库 的德语数据 |
|
CC - 100 (PPL) |
维基百科 (PPL) |
dbmdz/german - gpt2 |
49.47 |
62.92 |
GerPT2 |
24.78 |
35.33 |
GerPT2 - large |
16.08 |
23.26 |
代码可参考 GerPT2 Github 仓库 中的 evaluate.py
脚本。
💻 使用示例
基础用法
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"])
高级用法
import torch
output = model.generate(
torch.tensor(
[tokenizer.eos_token_id] + tokenizer.encode(prompt)
).unsqueeze(0),
do_sample=True,
bad_words_ids=[[0]],
max_length=max_length,
)[0]
print(tokenizer.decode(output))
🔧 技术细节
训练细节
GerPT2 - large 在 CC - 100 语料库 的全部德语数据上进行训练,权重从 英语 GPT2 模型 初始化。
GerPT2 - large 的训练参数如下:
- 批量大小:256
- 学习率:使用 OneCycle 学习率,最大值为 5e - 3
- 优化器:AdamW,权重衰减为 0.01
- 训练轮数:2 轮
在 8 个 TPUv3 核心上训练大约需要 12 天。
训练步骤
若要训练 GerPT2 - large,可按以下步骤操作,相关脚本位于 Github 仓库 中:
- 从 http://data.statmt.org/cc - 100/ 下载并解压训练数据。
- 使用
prepare/train_tokenizer.py
训练分词器。作为分词器的训练数据,使用了 CC - 100 数据的 5% 随机子集。
- (可选)使用
prepare/generate_aligned_wte.py
生成德语输入嵌入矩阵。这利用了一个巧妙的技巧,使用对齐的词嵌入将英语分词器中的标记语义映射到德语分词器中的标记。例如:
Ġ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 英语权重的想法源自 这篇博客文章。
4. 使用 prepare/tokenize_text.py
对语料库进行分词。这将生成 JSON Lines 格式的训练和验证标记文件。
5. 运行训练脚本 train.py
!run.sh
展示了如何使用配置文件 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}
}
致谢
感谢 Hugging Face 提供的优秀工具和基础设施。
非常感谢 LYTiQ 的 Artus Krohn - Grimberghe 赞助训练所需的资源,使得本项目得以实现。