🚀 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 贊助訓練所需的資源,使得本項目得以實現。