Gemma 格式和系統操作說明

用於調整操作說明的格式

指示調整的 (IT) 模型由特定「格式工具」訓練而成,該程式會在訓練和推論期間為所有指令調整範例加註額外資訊。格式設定工具有兩個用途:

  1. 在對話中指出角色,例如「系統」、「使用者」或「助理」角色。
  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"。換句話說,如果您想提示模型以「Cramer's 規則是什麼?」這類問題,則應該按照下列方式提供模型:

"<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model"

請注意,如果您想使用自己的資料微調預先訓練的 Gemma 模型,可以將任何這類結構定義用於控制權杖,前提是訓練和推論用途保持一致。

系統操作說明

無論是監督式微調 (SFT) 還是從人類回饋 (RLHF) 的強化學習 (RLHF),模型都未使用系統操作說明訓練。因此,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 變化版本經過特別調整,適用於程式碼填入工作。

具體來說,這些符記是根據四個格式控制符記訓練而成,您可以藉此建立模型提示的填充式 (FIM) 編碼工作。

脈絡 分詞
FIM 前置字元 `<
FIM 字尾 `<
FIM 中間 `<
檔案分隔符 `<

使用 FIM 符記定義遊標位置和周圍情境,讓 CodeGemma 執行程式碼填入作業。針對多檔案結構定義,使用檔案分隔符權杖。

範例 - 建構 FIM 提示

本節會重複使用 Keras CodeGemma 快速入門導覽課程中的範例,說明如何建構 FIM 工作的提示。

請考慮使用以下程式碼:

import |⏎ # Line 1
if __name__ == '__main__':⏎ # Line 2
   sys.exit(0) # Line 3

| 表示需要完成程式碼的遊標位置。請注意,遊標前留有空格,第 1 行和第 2 行結尾會有回車字元。

前置字串是

import

並在結尾加上一個空格

後置字串為:

⏎
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

使用 CodeGemma 模型處理 FIM 工作時,請串流回應權杖,並使用 FIM 或檔案分隔符符記做為分隔符號來停止串流,並取得產生的程式碼完成。