聊聊ChatGPT是如何组织对话的
為什么要組織對話?
總所周知,ChatGPT的訓練大致可分為下圖中展示的幾個階段,其中,在Pretraining階段,模型的訓練數據是純文本,目標是根據上文預測下一個token,而在后面的幾個階段中,為了讓模型具備對話的能力,相應的就需要使用對話數據進行訓練。而對話數據一般包含多個角色的文本,如何將這些文本有效地組織、拼接起來(openAI將其稱之為Chat Markup Language,簡稱ChatML),是本文要聊的內容。
from Microsoft Build 2023 《State of GPT》
ChatGPT的ChatML
根據openAI的介紹[1],ChatML v0會將每個角色(system、user、assistant)的文本進行如下拼接:
<|im_start|>system You?are?ChatGPT,?a?large?language?model?trained?by?OpenAI.?Answer?as?concisely?as?possible. Knowledge?cutoff:?2021-09-01 Current?date:?2023-03-01<|im_end|> <|im_start|>user How?are?you<|im_end|> <|im_start|>assistant I?am?doing?well!<|im_end|> <|im_start|>user How?are?you?now?<|im_end|>其中<|im_start|>、<|im_end|>是special token,進行tokenizer encode的時候他們會被編碼成對應的單個token id,他們專門用來表示一個角色說話的start和end。
那么,如果對話文本中包含了<|im_end|>豈不是會造成模型的困擾?為了防止這種類型的注入攻擊,似乎openAI會將對話文本中的<|im_start|>、<|im_end|>過濾掉。
可能是過濾了<|im_start|>,ChatGPT的回復中沒有提到<|im_start|>
將<|im_start|>改成<im_start>,ChatGPT能夠完整輸出用戶剛剛的問題
另外,值得注意的是system prompt中的小trick,其中包含了Current date的信息,在響應用戶提問的時候進行動態的修改,使模型能夠回復一些和當前日期相關的問題。
當這只是ChatML v0的格式,是3月份時候的版本了,最新版的gpt-3.5-turbo-0613中角色增加了function,目前ChatGPT的ChatML演進到了什么格式還是未知,一些眼尖的開發者也發現了當前的ChatML已經不是v0了[2]。
StarChat的ChatML
ChatML的格式不止openAI一種,StarChat提供了另一種思路[3]:
<|system|> Below?is?a?dialogue?between?a?human?and?AI?assistant?called?StarChat. <|end|> <|user|> Is?it?possible?to?imagine?a?society?without?law?<|end|> <|assistant|> It?is?difficult?to?imagine?...<|end|> <|user|> It?seems?like?you?...<|end|> <|assistant|> You?are?correct?...<|end|> <|user|> Yeah,?but?laws?are?complicated?...<|end|>其中<|system|>、<|assistant|>、<|user|>、<|end|>是special token,[3]中很貼心地提供詳細的代碼,感興趣的讀者可以進一步了解。
將角色信息用special token表示,可以更好的避免注入攻擊,但由于這些special token對應的embedding在預訓練階段是未經過訓練的,在SFT過程中需要充分的訓練才能有好的表現。
總結
ChatML是訓練對話大模型的一個小細節,本文介紹的兩種方式都是利用了special token來顯式表示對話的邊界,同時還能節約上下文的空間,相比于直接使用###user xxx ###assistant xxx是要更好的。
The devil is in the detail.
Reference
[1]?openai-python/chatml.md
[2]?ChatML update for th gpt-3.5-turbo-0613 and gpt-4
[3]?使用 StarCoder 創建一個編程助手
總結
以上是生活随笔為你收集整理的聊聊ChatGPT是如何组织对话的的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初学者的学习计划
- 下一篇: IOS的app电量测试