🚀 GerPT2
GerPT2は、GPT2のドイツ語版の大規模および小規模バージョンです。このモデルは、ドイツ語の自然言語処理タスクに役立ちます。
🚀 クイックスタート
German large and small versions of GPT2:
- https://huggingface.co/benjamin/gerpt2
- https://huggingface.co/benjamin/gerpt2-large
制限事項やバイアスに関する考慮事項については、GPT2 model cardを参照してください。GPT2の詳細については、GPT2 documentationを参照してください。
✨ 主な機能
他のモデルとの比較
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 repositoryの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 Corpusの全ドイツ語データで学習され、重みはEnglish GPT2 modelから初期化されました。
学習条件は以下の通りです。
- バッチサイズ: 256
- 学習率: OneCycle学習率、最大5e-3
- オプティマイザ: AdamW、重み減衰0.01
- エポック数: 2
学習には、8つのTPUv3コアで約12日かかりました。
GerPT2-largeを学習するには、以下の手順に従ってください。スクリプトはGithub repositoryにあります。
- 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に大きく感謝します。