💬チャットテンプレート

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

当社のGitHubには、Llama、Mistral、Phi-4などを含むUnslothが使用するすべてのチャットテンプレートの一覧があります。したがって、フォーマットやユースケースについての指針が必要な場合は、こちらで確認できます: github.com/unslothai/unsloth/blob/main/unsloth/chat_templates.pyarrow-up-right

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(...)
circle-exclamation

マルチターン会話

Their age is 18. Their fare is $7.25.

8. マルチターン会話 気づいていなかったかもしれませんが、Alpaca データセットはシングルターンである一方、ChatGPT はインタラクティブでマルチターンで会話できます。例えば左側が私たちの望む形式ですが、右側の Alpaca データセットは単一の会話しか提供しません。ファインチューニングされたモデルにChatGPTのようなマルチターン会話を学ばせたいのです。 そこで私たちは

conversation_extension 出力またはターゲット/予測列を パラメータを導入しました。これは単一ターンのデータセットのランダムな行をいくつか選択して1つの会話に結合するものです。例えば3に設定するとランダムに3行を選択して1つに結合します!長く設定しすぎると訓練が遅くなりますが、チャットボットや最終ファインチューニングを大幅に改善する可能性があります!

次に を予測/出力列に設定します。Alpaca データセットでは出力列になります。 そして私たちはデータセットをファインチューニング用の正しい形式にするために

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

関数を使用します!常にこれを呼び出してください!

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

これでファインチューニング自体のチャットテンプレートを指定できます。非常に有名な Alpaca フォーマットは以下の通りです: しかし先ほど述べたように、ChatGPTスタイルのファインチューニングは1つのプロンプトのみを要求するためこれは問題があるとされました。Unslothで全ての列を1つに結合できたので、実質的に下記のようなスタイルのチャットテンプレートを1つの入力列(instruction)と1つの出力で作成できます: ただし必ず {INPUT} というフィールドを指示用に、そして {OUTPUT} というフィールドをモデルの出力用に配置する必要があります。実際にはオプションで

{SYSTEM}

フィールドも許可しており、ChatGPTのようにシステムプロンプトをカスタマイズするのに役立ちます。以下はチャットテンプレートをカスタマイズできるいくつかのクールな例です: {OUTPUT} OpenAIモデルで使われる ChatML フォーマットの場合:

または Llama-3 自体のテンプレートを使用することもできます(これは Llama-3 の instruct バージョンを使用してのみ機能します):実際にオプションの Titanic のファインチューニングノートブックにアクセスするか、CSVまたはExcelファイルをアップロードしたい場合はこちら:arrow-up-right

Unslothによるチャットテンプレートの適用

通常chatml形式に従うデータセットの場合、トレーニングやファインチューニングのためのデータセット準備プロセスは、4つの簡単なステップで構成されます:

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

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

    \

  • 使用する get_chat_template 適切なチャットテンプレートをトークナイザに適用するには:\

    \

  • フォーマット関数を定義します。以下は例です:\

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

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

    データセットがChatMLの "role"/"content" 形式の代わりに "from"/"value" キーを持つShareGPT形式を使用している場合、まず変換するために次の を予測/出力列に設定します。Alpaca データセットでは出力列になります。 関数を使用できます。修正後のコードは次のようになります: \

詳細情報

データセットが以下のような辞書のリストのリストであると仮定すると:

次を使用できます get_chat_template それをフォーマットするには、次を選択してください chat_template をいずれかに設定します zephyr、chatml、mistral、llama、alpaca、vicuna、vicuna_old、unsloth、そして次を使用して mapping 辞書の値をマップするために から, value など。 map_eos_token をEOSにマップすることを可能にします <|im_end|> トレーニングなしで。

独自のカスタムチャットテンプレートを作成することもできます!例えば、当社が内部で使用しているチャットテンプレートは以下のとおりです。必ず tuple(custom_template, eos_token) を渡す必要があります。 その eos_token

最終更新

役に立ちましたか?