Gemma 格式和系統操作說明

調整操作說明的格式

指示調整 (IT) 模型是以特定格式器訓練, 為所有指導調整範例加註加上額外資訊 訓練和推論時間格式轉換工具有兩種用途:

  1. 在對話中指定角色,例如「系統」、「使用者」assistant 角色。
  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 Rule?」之類的問題撰寫,應該改以 如下所示:

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

請注意,如要使用自己的模型 微調預先訓練的基礎 Gemma 模型 資料,您就可以對控制符記使用任何此類結構定義,只要保持一致 訓練與推論用例間的差異

系統指示

適用於監督式微調 (SFT) 和人類增強學習 (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 和 70 億個變化版本 特別針對程式碼填入工作微調

具體而言,這些模型是以四個格式控制符記訓練而成,您可以 來協助建構用於中間填充 (FIM) 程式設計工作的模型提示。

背景資訊權杖
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

並在結尾加上一個空格

後置字串為:

⏎
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 或檔案分隔符做為分隔符號,藉此停止串流及取得 。