For the complete documentation index, see llms.txt. This page is also available as Markdown.

💬チャットテンプレート

Conversational、ChatML、ShareGPT、Alpaca 形式などを含むチャットテンプレートの基本とカスタマイズ方法を学びます!

GitHub には、Llama、Mistral、Phi-4 などを含む、Unsloth が使用するすべてのチャットテンプレートの一覧があります。書式設定や使用例について何か手がかりが必要なら、こちらで確認できます: github.com/unslothai/unsloth/blob/main/unsloth/chat_templates.py

Colab のチャットテンプレートノートブック一覧:

新しいトークンの追加

Unsloth には次の名前の関数があります add_new_tokens これを使うと、ファインチューニングに新しいトークンを追加できます。例えば、次を追加したい場合は <CHARACTER_1>, <THINKING> および <SCRATCH_PAD> 次のようにできます:

model, tokenizer = FastLanguageModel.from_pretrained(...)
from unsloth import add_new_tokens
add_new_tokens(model, tokenizer, new_tokens = ["<CHARACTER_1>", "<THINKING>", "<SCRATCH_PAD>"])
model = FastLanguageModel.get_peft_model(...)

複数ターンの会話

気づかなかったかもしれませんが、Alpaca データセットはシングルターンです。一方、ChatGPT の利用は対話的で、複数ターンで会話できます。たとえば、左側が私たちの望むものですが、右側の Alpaca データセットは単一の会話しか提供しません。ファインチューニング済み言語モデルには、どうにかして ChatGPT のようなマルチターン会話を学ばせたいのです。

そこで私たちは conversation_extension パラメータを導入しました。これは本質的に、シングルターンのデータセットからランダムな行をいくつか選び、それらを1つの会話に結合するものです!たとえば 3 に設定すると、3行をランダムに選んで1つに結合します!長くしすぎると学習は遅くなりますが、チャットボットや最終的なファインチューニング結果がずっと良くなる可能性があります!

次に output_column_name 予測 / 出力列に。Alpaca データセットでは、出力列になります。

その後、 standardize_sharegpt 関数を使って、ファインチューニングに正しい形式へデータセットを整えます!必ずこれを呼び出してください!

カスタマイズ可能なチャットテンプレート

これで、ファインチューニング自体のチャットテンプレートを指定できます。非常に有名な Alpaca 形式は以下です:

ですが、ChatGPT 風のファインチューニングでは1つのプロンプトだけが必要なので、これは良くないアイデアだと言いましたよね?Unsloth を使ってすべてのデータセット列を1つに結合することに成功したので、基本的に以下のような、1つの入力列(instruction)と1つの出力を持つスタイルのチャットテンプレートを作成できます:

必要なのは、 {INPUT} というフィールドを instruction 用に置き、さらに {OUTPUT} というフィールドをモデルの出力用に置くことだけです。実際には、オプションの {SYSTEM} フィールドも利用可能で、これは ChatGPT のようにシステムプロンプトをカスタマイズするのに便利です。たとえば、以下はチャットテンプレートをカスタマイズできるクールな例です:

OpenAI モデルで使われる ChatML 形式の場合:

あるいは、Llama-3 自体のテンプレートも使えます(これは Llama-3 の instruct 版を使う場合にのみ機能します): 実際には、オプションの {SYSTEM} フィールドも利用可能で、これは ChatGPT のようにシステムプロンプトをカスタマイズするのに便利です。

または、CSV と Excel のアップロードを含むこの Colab ノートブックで、乗客が死亡したか生存したかを予測する必要がある Titanic 予測タスクでは: https://colab.research.google.com/drive/1VYkncZMfGFkeCEgN2IzbZIKEDkyQuJAS?usp=sharing

Unsloth を使ったチャットテンプレートの適用

通常 ChatML 形式に従うデータセットでは、学習やファインチューニングのためにデータセットを準備する手順は、4 つの簡単なステップで構成されます:

  • Unsloth が現在サポートしているチャットテンプレートを確認します:\

    これにより、Unsloth が現在サポートしているテンプレートの一覧が出力されます。出力例は次のとおりです:\

    \

  • を使って get_chat_template を使って、正しいチャットテンプレートを tokenizer に適用します:\

    \

  • 書式設定関数を定義します。以下は例です:\

    この関数はデータセット全体をループし、定義したチャットテンプレートを各サンプルに適用します。\

  • 最後に、データセットを読み込み、必要な変更をデータセットに適用しましょう: \

    データセットが ChatML の "role"/"content" 形式ではなく "from"/"value" キーを使う ShareGPT 形式である場合は、まず standardize_sharegpt 関数を使って変換できます。修正版のコードは次のようになります: \

詳細情報

データセットが以下のような辞書のリストのリストだと仮定します:

私たちの get_chat_template を使って整形できます。 chat_template を次のいずれかに設定します zephyr, chatml, mistral, llama, alpaca, vicuna, vicuna_old, unsloth、そして mapping を使って辞書の値を対応付けます from, value などを使います。 map_eos_token を使うと、 <|im_end|> を学習なしで EOS に対応付けられます。

独自のカスタムチャットテンプレートを作ることもできます! 例えば、私たちが内部で使っているチャットテンプレートは以下のとおりです。次を渡す必要があります タプル(custom_template, eos_token) ここで eos_token はテンプレート内で使用しなければなりません。

最終更新

役に立ちましたか?