🚀 GerPT2
GerPT2は、ドイツ語版の大規模および小規模なGPT2モデルです。これらのモデルは、特定のタスクにおける性能向上や、ドイツ語の自然言語処理タスクにおける応用が期待されます。
🚀 クイックスタート
GerPT2の大規模および小規模バージョンは、以下のリンクから利用できます。
- https://huggingface.co/benjamin/gerpt2
- https://huggingface.co/benjamin/gerpt2-large
制限事項やバイアスに関する考慮事項については、GPT2モデルカードを参照してください。GPT2の詳細については、GPT2ドキュメントを参照してください。
✨ 主な機能
私は、GerPT2-largeと他のドイツ語版GPT2であるdbmdz/german-gpt2を、CC-100データセットとドイツ語のWikipediaで評価しました。
モデル |
CC-100 (PPL) |
Wikipedia (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
max_length = 100
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リポジトリにあります。
0. 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を初期化するアイデアについては、このブログ記事に感謝します。
3. prepare/tokenize_text.py
を使用してコーパスをトークナイズします。これにより、JSON Lines形式の学習用と検証用のトークンファイルが生成されます。
4. 学習スクリプト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に大きく感謝します。