Gemma のフォーマットとシステムの手順

指示チューニング用のフォーマット

指示用調整(IT)モデルは、特定のフォーマッタでトレーニングされます。 すべての指示チューニング サンプルに追加情報を付加します。 トレーニングと推論に要する時間ですフォーマッタには 2 つの目的があります。

  1. 会話におけるロール(systemuser、または アシスタント ロール。
  2. 会話のターンの区分け(特にマルチターンの場合) あります。

以下では、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>usermodel。例:

<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 またはファイル セパレータ トークンを区切り文字として使用して、ストリーミングを停止し、 コード補完を行います。