指示チューニング用のフォーマット
指示用調整(IT)モデルは、特定のフォーマッタでトレーニングされます。 すべての指示チューニング サンプルに追加情報を付加します。 トレーニングと推論に要する時間ですフォーマッタには 2 つの目的があります。
- 会話におけるロール(system、user、または アシスタント ロール。
- 会話のターンの区分け(特にマルチターンの場合) あります。
以下では、Gemma で使用されるコントロール トークンとそのユースケースを示します。備考 制御トークンが予約されており、トークナイザに固有のものです。
- ユーザーターンを示すトークン:
user
- モデルのターンを示すトークン:
model
- 対話ターンの開始を示すトークン:
<start_of_turn>
- 会話ターンの終了を示すトークン:
<end_of_turn>
会話の例を次に示します。
<start_of_turn>user
knock knock<end_of_turn>
<start_of_turn>model
who is there<end_of_turn>
<start_of_turn>user
Gemma<end_of_turn>
<start_of_turn>model
Gemma who?<end_of_turn>
トークン "<end_of_turn>\n"
はターン セパレータで、プロンプト接頭辞は
"<start_of_turn>model\n"
。つまり、モデルにプロンプトを
「クラマーの法則とは何ですか?」のような質問をするならば、
次のように設定します。
"<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model"
なお、事前トレーニング済みのベース Gemma モデルを独自のモデルで微調整する場合は、 制御トークンには、その整合性が保たれている限り、どのようなスキーマでも 重要な役割を果たします
システム指示
教師ありファインチューニング(SFT)と人間による強化学習の両方
モデルはシステム指示でトレーニングされていません。デバイス名:
Gemma に関連するフォーマット トークンは <start_of_turn>
のみです。
<end_of_turn>
、user
、model
。例:
<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model
Cramer's Rule is ...<end_of_turn>
FIM タスクの形式
CodeGemma の 2B と 7B のバリアント コード入力タスク用に特別に調整されています
具体的には、4 つのフォーマット コントロール トークンでトレーニングされ、 モデル プロンプトを作成するために使用できます。
コンテキスト | トークン |
---|---|
FIM 接頭辞 | <|fim_prefix|> |
FIM サフィックス | <|fim_suffix|> |
FIM ミドル | <|fim_middle|> |
ファイル区切り文字 | <|file_separator|> |
FIM トークンを使用して、カーソルの位置と周囲のコンテキストを定義します。 CodeGemma がコードの挿入を行います。ファイル区切り文字トークンを コンテキストで識別されます。
例 - FIM プロンプトの作成
このセクションでは、Keras CodeGemma の クイックスタートを FIM タスクのプロンプトを作成する方法についても学習しました。
たとえば、次のコードについて考えてみます。
import |⏎ # Line 1
if __name__ == '__main__':⏎ # Line 2
sys.exit(0) # Line 3
|
は、コードを配置するカーソルの位置を示します。
完了していません。カーソルの前にスペースが挿入されており、1 行目と 2 行目が
末尾に改行があります。
接頭辞は
import
末尾にスペース 1 つを付けます。
接尾辞は次のとおりです。
⏎
if __name__ == '__main__':⏎
sys.exit(0)
先頭に新しい行を付けます。
プロンプトは次のように構成する必要があります。
<|fim_prefix|>import <|fim_suffix|>⏎
if __name == '__main__':⏎
sys.exit(0)<|fim_middle|>
次のことに注意してください。
- FIM トークンと接頭辞の間に余分な空白を入れないでください。 と接尾辞
- モデルを続行するために、FIM 中間トークンを最後に配置する必要があります。 入力
- カーソルの位置によっては、接頭辞または接尾辞を空にすることもできます。 どの程度のコンテキストをモデルに提供するか、
モデル出力の理解
上記の例に対するモデルのレスポンスは次のようになります。
<|fim_prefix|>import <|fim_suffix|>⏎
if __name__ == "__main__":\n sys.exit(0)<|fim_middle|>sys\n<|file_separator|>
モデルは入力プロンプトを繰り返し、コード補完として sys
を提供します。
FIM タスクに CodeGemma モデルを使用する場合は、レスポンス トークンをストリーミングし、 FIM またはファイル セパレータ トークンを区切り文字として使用して、ストリーミングを停止し、 コード補完を行います。