-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #176 from eltociear/add-ja-directory
[TRANSLATION] Add 1_instruction_tuning and 2_preference_alignment EN-JA translation
- Loading branch information
Showing
11 changed files
with
1,277 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
# インストラクションチューニング | ||
|
||
このモジュールでは、言語モデルのインストラクションチューニングのプロセスをガイドします。インストラクションチューニングとは、特定のタスクに対してモデルを適応させるために、特定のタスクに関連するデータセットで追加のトレーニングを行うことを指します。このプロセスは、特定のタスクにおけるモデルのパフォーマンスを向上させるのに役立ちます。 | ||
|
||
このモジュールでは、2つのトピックを探ります:1) チャットテンプレートと2) 教師あり微調整 | ||
|
||
## 1️⃣ チャットテンプレート | ||
|
||
チャットテンプレートは、ユーザーとAIモデル間のインタラクションを構造化し、一貫性のある文脈に適した応答を保証します。これらのテンプレートには、システムメッセージや役割に基づくメッセージなどのコンポーネントが含まれます。詳細については、[チャットテンプレート](./chat_templates.md)セクションを参照してください。 | ||
|
||
## 2️⃣ 教師あり微調整 | ||
|
||
教師あり微調整(SFT)は、事前トレーニングされた言語モデルを特定のタスクに適応させるための重要なプロセスです。これは、ラベル付きの例を含む特定のタスクのデータセットでモデルをトレーニングすることを含みます。SFTの詳細なガイド、重要なステップ、およびベストプラクティスについては、[教師あり微調整](./supervised_fine_tuning.md)ページを参照してください。 | ||
|
||
## 演習ノートブック | ||
|
||
| タイトル | 説明 | 演習 | リンク | Colab | | ||
|--------|-------------|-----------|--------|-------| | ||
| チャットテンプレート | SmolLM2を使用してチャットテンプレートを使用し、チャットml形式のデータセットを処理する方法を学びます | 🐢 `HuggingFaceTB/smoltalk`データセットをchatml形式に変換 <br> 🐕 `openai/gsm8k`データセットをchatml形式に変換 | [ノートブック](./notebooks/chat_templates_example.ipynb) | <a target="_blank" href="https://colab.research.google.com/github/huggingface/smol-course/blob/main/1_instruction_tuning/notebooks/chat_templates_example.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/></a> | | ||
| 教師あり微調整 | SFTTrainerを使用してSmolLM2を微調整する方法を学びます | 🐢 `HuggingFaceTB/smoltalk`データセットを使用 <br> 🐕 `bigcode/the-stack-smol`データセットを試す <br> 🦁 実際の使用ケースに関連するデータセットを選択 | [ノートブック](./notebooks/sft_finetuning_example.ipynb) | <a target="_blank" href="https://colab.research.google.com/github/huggingface/smol-course/blob/main/1_instruction_tuning/notebooks/sft_finetuning_example.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/></a> | | ||
|
||
## 参考文献 | ||
|
||
- [Transformersのチャットテンプレートに関するドキュメント](https://huggingface.co/docs/transformers/main/en/chat_templating) | ||
- [TRLの教師あり微調整スクリプト](https://github.com/huggingface/trl/blob/main/examples/scripts/sft.py) | ||
- [TRLの`SFTTrainer`](https://huggingface.co/docs/trl/main/en/sft_trainer) | ||
- [直接選好最適化に関する論文](https://arxiv.org/abs/2305.18290) | ||
- [TRLを使用した教師あり微調整](https://huggingface.co/docs/trl/main/en/tutorials/supervised_fine_tuning) | ||
- [ChatMLとHugging Face TRLを使用したGoogle Gemmaの微調整方法](https://www.philschmid.de/fine-tune-google-gemma) | ||
- [LLMを微調整してペルシャ語の商品カタログをJSON形式で生成する方法](https://huggingface.co/learn/cookbook/en/fine_tuning_llm_to_generate_persian_product_catalogs_in_json_format) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
# チャットテンプレート | ||
|
||
チャットテンプレートは、言語モデルとユーザー間のインタラクションを構造化するために不可欠です。これらは会話の一貫した形式を提供し、モデルが各メッセージの文脈と役割を理解し、適切な応答パターンを維持することを保証します。 | ||
|
||
## ベースモデル vs インストラクションモデル | ||
|
||
ベースモデルは次のトークンを予測するために生のテキストデータでトレーニングされる一方、インストラクションモデルは特定の指示に従い会話に参加するように微調整されたモデルです。例えば、`SmolLM2-135M`はベースモデルであり、`SmolLM2-135M-Instruct`はその指示に特化したバリアントです。 | ||
|
||
ベースモデルをインストラクションモデルのように動作させるためには、モデルが理解できるようにプロンプトを一貫してフォーマットする必要があります。ここでチャットテンプレートが役立ちます。ChatMLは、システム、ユーザー、アシスタントの役割を明確に示すテンプレート形式で会話を構造化します。 | ||
|
||
ベースモデルは異なるチャットテンプレートで微調整される可能性があるため、インストラクションモデルを使用する際には、正しいチャットテンプレートを使用していることを確認する必要があります。 | ||
|
||
## チャットテンプレートの理解 | ||
|
||
チャットテンプレートの核心は、言語モデルと通信する際に会話がどのようにフォーマットされるべきかを定義することです。これには、システムレベルの指示、ユーザーメッセージ、およびアシスタントの応答が含まれ、モデルが理解できる構造化された形式で提供されます。この構造は、インタラクションの一貫性を維持し、モデルがさまざまな種類の入力に適切に応答することを保証します。以下はチャットテンプレートの例です: | ||
|
||
```sh | ||
<|im_end|>ユーザー | ||
こんにちは!<|im_end|> | ||
<|im_end|>アシスタント | ||
はじめまして!<|im_end|> | ||
<|im_end|>ユーザー | ||
質問してもいいですか?<|im_end|> | ||
<|im_end|>アシスタント | ||
``` | ||
|
||
`transformers`ライブラリは、モデルのトークナイザーに関連してチャットテンプレートを自動的に処理します。`transformers`でチャットテンプレートがどのように構築されるかについて詳しくは[こちら](https://huggingface.co/docs/transformers/en/chat_templating#how-do-i-use-chat-templates)を参照してください。私たちはメッセージを正しい形式で構造化するだけで、残りはトークナイザーが処理します。以下は基本的な会話の例です: | ||
|
||
```python | ||
messages = [ | ||
{"role": "system", "content": "あなたは技術的なトピックに焦点を当てた役立つアシスタントです。"}, | ||
{"role": "user", "content": "チャットテンプレートとは何か説明できますか?"}, | ||
{"role": "assistant", "content": "チャットテンプレートは、ユーザーとAIモデル間の会話を構造化します..."} | ||
] | ||
``` | ||
|
||
上記の例を分解して、チャットテンプレート形式にどのようにマッピングされるかを見てみましょう。 | ||
|
||
## システムメッセージ | ||
|
||
システムメッセージは、モデルの動作の基礎を設定します。これらは、以降のすべてのインタラクションに影響を与える持続的な指示として機能します。例えば: | ||
|
||
```python | ||
system_message = { | ||
"role": "system", | ||
"content": "あなたはプロフェッショナルなカスタマーサービスエージェントです。常に礼儀正しく、明確で、役立つようにしてください。" | ||
} | ||
``` | ||
|
||
## 会話 | ||
|
||
チャットテンプレートは、ユーザーとアシスタント間の以前のやり取りを保存し、会話の履歴を通じて文脈を維持します。これにより、複数ターンにわたる一貫した会話が可能になります: | ||
|
||
```python | ||
conversation = [ | ||
{"role": "user", "content": "注文に関して助けが必要です"}, | ||
{"role": "assistant", "content": "お手伝いします。注文番号を教えていただけますか?"}, | ||
{"role": "user", "content": "注文番号はORDER-123です"}, | ||
] | ||
``` | ||
|
||
## Transformersを使用した実装 | ||
|
||
`transformers`ライブラリは、チャットテンプレートのための組み込みサポートを提供します。使用方法は以下の通りです: | ||
|
||
```python | ||
from transformers import AutoTokenizer | ||
|
||
tokenizer = AutoTokenizer.from_pretrained("HuggingFaceTB/SmolLM2-135M-Instruct") | ||
|
||
messages = [ | ||
{"role": "system", "content": "あなたは役立つプログラミングアシスタントです。"}, | ||
{"role": "user", "content": "リストをソートするPython関数を書いてください"}, | ||
] | ||
|
||
# チャットテンプレートを適用 | ||
formatted_chat = tokenizer.apply_chat_template( | ||
messages, | ||
tokenize=False, | ||
add_generation_prompt=True | ||
) | ||
``` | ||
|
||
## カスタムフォーマット | ||
|
||
異なる役割に対して特別なトークンやフォーマットを追加するなど、さまざまなメッセージタイプのフォーマットをカスタマイズできます。例えば: | ||
|
||
```python | ||
template = """ | ||
<|system|>{system_message} | ||
<|user|>{user_message} | ||
<|assistant|>{assistant_message} | ||
""".lstrip() | ||
``` | ||
|
||
## マルチターン会話のサポート | ||
|
||
テンプレートは、文脈を維持しながら複雑なマルチターン会話を処理できます: | ||
|
||
```python | ||
messages = [ | ||
{"role": "system", "content": "あなたは数学の家庭教師です。"}, | ||
{"role": "user", "content": "微積分とは何ですか?"}, | ||
{"role": "assistant", "content": "微積分は数学の一分野です..."}, | ||
{"role": "user", "content": "例を教えてください。"}, | ||
] | ||
``` | ||
|
||
⏭️ [次へ: Supervised Fine-Tuning](./supervised_fine_tuning.md) | ||
|
||
## リソース | ||
|
||
- [Hugging Face Chat Templating Guide](https://huggingface.co/docs/transformers/main/en/chat_templating) | ||
- [Transformers Documentation](https://huggingface.co/docs/transformers) | ||
- [Chat Templates Examples Repository](https://github.com/chujiezheng/chat_templates) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
# このファイルを.envにコピーし、シークレット値を記入します | ||
HF_TOKEN= |
Oops, something went wrong.