🚀 GEITje 7B ultra
AIフィードバックによってアライメントされた、オランダ語用の会話モデルです。
GEITje 7B ultra
AIフィードバックによってアライメントされた、オランダ語用の会話モデルです。
このモデルは、BramVanroy/GEITje-7B-ultra-sft を、gpt-4-turbo と Rijgersberg/GEITje-7B-chat を用いて生成された、約5600万トークンの合成DPOデータセットでファインチューニングしたバージョンです。
⚠️ 重要なお知らせ
🚀 高速なGGUFバージョンを探していますか?それと、ollama
での使用方法は こちら で見つけることができます。🚀
📚 詳細ドキュメント
引用
GEITje 7B Ultra (SFT) またはその派生モデルや量子化モデルを使用する場合は、以下の論文を引用してください。
@misc{vanroy2024geitje7bultraconversational,
title={GEITje 7B Ultra: A Conversational Model for Dutch},
author={Bram Vanroy},
year={2024},
eprint={2412.04092},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2412.04092},
}
モデルの説明
これは、最終的にMistralに基づくオランダ語の命令/会話モデルで、DPOを介してAIフィードバックでアライメントされています。これは、BramVanroy/GEITje-7B-ultra-sft をSFTトレーニングしたもののDPO続きで、それは Rijgersberg/GEITje-7B に基づいており、さらにオランダ語データで事前学習されています。(かなり単純な) ベンチマーク では、平均的にすべての元のGEITjeモデルを上回っています (ただし僅差です)。ただし、これらのベンチマークは大きな保留を持って受け取る必要があります (そのページのベンチマークの下の免責事項を参照)。最良の評価は、モデルを試して自分自身で確認することです。
使用目的と制限事項
このモデルは、強力なコンテンツフィルターを持つgpt-4-turboの出力とアライメントされていますが、間違った、誤解を招く、さらには攻撃的な内容を生成する可能性があります。自己責任で使用してください。
このモデルは、OpenAI/Azureサービスを使用して作成された合成データでトレーニングされているため、商用目的では使用できません。
トレーニングと評価データ
トレーニングデータは、UltraFeedback binarized に基づく合成データセットで、gpt-4-turboとgeitje-chatを用いて作成されています。元のデータセットから翻訳された与えられたプロンプトが、2つのモデルに与えられ、それぞれが回答を生成します。その後、gpt-4-turboの回答が常に最良の回答として選択され、DPOがそれを最適化します。これは完全に公平ではありませんが、私には実際にgpt-4に両方の回答を評価してもらう予算がありませんでした。さらに、印象的なモデルですが、私が行ったテストでは、GEITje chatはまだgpt-4-turboよりも劣っているようです。
データセットは合計で56,137,090トークン (プロンプト + 棄却 + 選択の組み合わせ) で、テストセットは6,178,969トークン (11.00%) です。
トレーニング手順
トレーニングには素晴らしい alignment handbook が使用され、クラスターとの互換性のためにカスタムのslurmスクリプトが使用されました。LoRAや他のアダプターを使用せず、完全にトレーニングされました。
モデルは、bfloat16でflash attention 2を使用して、それぞれ4つのA100 80GBを搭載した2つのノードで約11時間トレーニングされました。Flemish Super Computer のコンピューティング資源を提供してくれたことに感謝します。
会話での使用には、システムメッセージと互換性のあるZephyrチャットテンプレートに依存しています。*-sftのデータの一部にはシステムメッセージが含まれていたため、モデルは少なくとも少しはシステムメッセージを処理できると想定されます。
初期の反復では、alignment handbookのデフォルト (beta=0.01) を使用すると、結果が悪くなりました (ランダムなトークンの幻覚)。調査した結果、このような低いbetaはこのデータセットではうまく機能せず、モデルが元のベースモデルから大きく逸脱する余地を与えすぎるようです。ハイパーパラメーターサーチ と結果のメトリクスの手動分析の後、私は現在のモデルを最良のものとして選択しました。betaは0.1です。
ハンドブックで使用されたレシピ:
model_name_or_path: BramVanroy/GEITje-7B-ultra-sft
model_revision: main
torch_dtype: bfloat16
use_flash_attention_2: true
dataset_mixer:
BramVanroy/ultra_feedback_dutch: 1.0
dataset_splits:
- train_prefs
- test_prefs
preprocessing_num_workers: 8
bf16: true
beta: 0.1
do_eval: true
evaluation_strategy: steps
eval_steps: 100
gradient_accumulation_steps: 4
gradient_checkpointing: true
gradient_checkpointing_kwargs:
use_reentrant: False
hub_model_id: BramVanroy/GEITje-ultra
learning_rate: 5.0e-7
log_level: info
logging_steps: 10
lr_scheduler_type: cosine
max_length: 2048
max_prompt_length: 1536
num_train_epochs: 1
optim: adamw_torch
output_dir: data/GEITje-ultra
per_device_train_batch_size: 4
per_device_eval_batch_size: 4
push_to_hub: true
save_strategy: "steps"
save_steps: 100
save_total_limit: 3
seed: 42
warmup_ratio: 0.1
トレーニングのハイパーパラメーター
トレーニング中に使用されたハイパーパラメーターは次の通りです。
- 学習率: 5e-07
- トレーニングバッチサイズ: 4
- 評価バッチサイズ: 4
- シード: 42
- 分散タイプ: マルチGPU
- デバイス数: 8
- 勾配累積ステップ: 4
- 総トレーニングバッチサイズ: 128
- 総評価バッチサイズ: 32
- オプティマイザー: Adam (betas=(0.9,0.999), epsilon=1e-08)
- 学習率スケジューラーのタイプ: コサイン
- 学習率スケジューラーのウォームアップ率: 0.1
- エポック数: 1.0
トレーニング結果
トレーニング損失 |
エポック |
ステップ |
検証損失 |
報酬/選択 |
報酬/棄却 |
報酬/正解率 |
報酬/マージン |
対数確率/棄却 |
対数確率/選択 |
ロジット/棄却 |
ロジット/選択 |
0.03 |
0.22 |
100 |
0.0260 |
-0.9740 |
-9.8635 |
0.9913 |
8.8895 |
-524.8940 |
-508.1891 |
-3.0753 |
-3.0315 |
0.0184 |
0.44 |
200 |
0.0164 |
-1.7162 |
-12.4772 |
0.9926 |
10.7610 |
-551.0317 |
-515.6115 |
-3.0349 |
-2.9873 |
0.0121 |
0.66 |
300 |
0.0142 |
-2.0575 |
-13.6818 |
0.9938 |
11.6244 |
-563.0778 |
-519.0242 |
-3.0325 |
-2.9835 |
0.0198 |
0.88 |
400 |
0.0139 |
-2.1431 |
-13.8857 |
0.9950 |
11.7426 |
-565.1163 |
-519.8801 |
-3.0293 |
-2.9801 |
フレームワークのバージョン
- Transformers 4.36.2
- Pytorch 2.1.2+cu121
- Datasets 2.14.6
- Tokenizers 0.15.0
Open LLM Leaderboardの評価結果
英語のOpen LLM Leaderboardの結果です。オランダ語固有の結果については、ScandEval を確認してください。
詳細な結果は こちら で見つけることができます。
メトリクス |
値 |
平均 |
10.91 |
IFEval (0ショット) |
37.23 |
BBH (3ショット) |
12.88 |
MATH Lvl 5 (4ショット) |
0.91 |
GPQA (0ショット) |
1.68 |
MuSR (0ショット) |
1.52 |
MMLU-PRO (5ショット) |
11.24 |
💻 使用例
基本的な使用法
from transformers import pipeline, Conversation
chatbot = pipeline("conversational", model="BramVanroy/GEITje-7B-ultra", model_kwargs={"load_in_8bit": True}, device_map="auto")
start_messages = [
{"role": "system", "content": "Je bent een grappige chatbot die Bert heet. Je maakt vaak mopjes."},
{"role": "user", "content": "Hallo, ik ben Bram. Ik wil vanavond graag een film kijken. Heb je enkele suggesties?"}
]
conversation = Conversation(start_messages)
conversation = chatbot(conversation)
response = conversation.messages[-1]["content"]
print(response)
高度な使用法
from transformers import pipeline, Conversation
chatbot = pipeline("conversational", model="BramVanroy/GEITje-7B-ultra", model_kwargs={"load_in_8bit": True, "attn_implementation": "flash_attention_2"}, device_map="auto")
while (system_message := input("System message ('q' to quit): ")) != "q":
start_messages = [
{"role": "system", "content": system_message},
]
conversation = Conversation(start_messages)
while (user_input := input("User ('r' to reset): ")) != "r":
conversation.add_user_input(user_input)
conversation = chatbot(conversation)
response = conversation.messages[-1]["content"]
print("Assistant:", response)
📄 ライセンス
このモデルのライセンスは cc-by-nc-4.0 です。