ChatML - 聊天标记语言




关于 Chat Format

所谓Chat Format其实就是一种聊天格式,给模型能看的懂的语言格式。
模型训练不可能像人对话一样,你说一句,它说一句。
这bert时代就有诸如[CLS]、[SEP]、[PAD]之类的特殊token。
到了大模型时代这个问题稍微复杂了一点。因为你不仅要标记句子的开始,结尾还要区分说话角色,谁说了哪些话。于是各种Chat Format就出现了。

一些典型的Chat Format

  • ChatML
  • Llama2 Format
  • Alpaca Format

OpenAI - ChatML

传统上,GPT 模型使用非结构化文本。
ChatGPT 模型需要一种结构化格式,称为 Chat Markup Language 聊天标记语言(简称 ChatML)。
ChatML 文档由一系列消息组成。每条消息都包含一个 header(现在由说这句话的人组成,但将来将包含其他元数据)和 内容(现在是文本有效负载,但将来将包含其他数据类型)。
我们仍在不断发展 ChatML,但当前版本 (ChatML v0) 可以用我们即将推出的“字典列表”JSON 格式表示,如下所示:

[
 {"token": "<|im_start|>"},
 "system\nYou are ChatGPT, a large language model trained by OpenAI. Answer as concisely as possible.\nKnowledge cutoff: 2021-09-01\nCurrent date: 2023-03-01",
 {"token": "<|im_end|>"}, "\n", {"token": "<|im_start|>"},
 "user\nHow are you",
 {"token": "<|im_end|>"}, "\n", {"token": "<|im_start|>"},
 "assistant\nI am doing well!",
 {"token": "<|im_end|>"}, "\n", {"token": "<|im_start|>"},
 "user\nHow are you now?",
 {"token": "<|im_end|>"}, "\n"
]

您还可以用经典的“不安全原始字符串”格式表示它。
然而,这种格式本质上允许从包含特殊令牌语法的用户输入进行注入,类似于 SQL 注入:

<|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|>

非聊天用例

ChatML 可应用于传统上不被视为聊天的经典 GPT 用例。
例如,指令跟随(用户请求 AI 完成指令)可以实现为 ChatML 查询,如下所示:

[
 {"token": "<|im_start|>"},
 "user\nList off some good ideas:",
 {"token": "<|im_end|>"}, "\n", {"token": "<|im_start|>"},
 "assistant"
]


我们目前不允许自动完成部分消息

[
 {"token": "<|im_start|>"},
 "system\nPlease autocomplete the user's message.",
 {"token": "<|im_end|>"}, "\n", {"token": "<|im_start|>"},
 "user\nThis morning I decided to eat a giant"
]

请注意,ChatML 向模型明确了每段文本的来源,并特别显示了人类文本和人工智能文本之间的边界。
这提供了缓解并最终解决注入的机会,因为模型可以判断哪些指令来自开发人员、用户或其自己的输入。


Few-shot prompting

一般来说,我们建议使用带有 example_user 或 example_assistant 字段的单独 system 消息添加少量示例 。例如,这是一个 1-shot 提示:

<|im_start|>system
Translate from English to French
<|im_end|>
<|im_start|>system name=example_user
How are you?
<|im_end|>
<|im_start|>system name=example_assistant
Comment allez-vous?
<|im_end|>
<|im_start|>user
{{user input here}}<|im_end|>

如果在system消息中添加说明不起作用,您也可以尝试将它们放入user消息中。
(在不久的将来,我们将通过系统消息训练我们的模型,使其更加可操纵。
但到目前为止,我们只对少数系统消息进行了训练,因此模型更加关注用户示例。)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值