用於調整操作說明的格式
指示調整的 (IT) 模型由特定「格式工具」訓練而成,該程式會在訓練和推論期間為所有指令調整範例加註額外資訊。格式設定工具有兩個用途:
- 在對話中指出角色,例如「系統」、「使用者」或「助理」角色。
- 分割對話中的回合,特別是在多輪對話時。
我們會在下方指定 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>
、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 變化版本經過特別調整,適用於程式碼填入工作。
具體來說,這些符記是根據四個格式控制符記訓練而成,您可以藉此建立模型提示的填充式 (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 或檔案分隔符符記做為分隔符號來停止串流,並取得產生的程式碼完成。