一文带你了解通义千问Chat model的Chat模版

在对chat model进行微调时踩了一些坑,比如:在微调的过程中没有遵循它原始的template,又比如在推理过程中,没有对query加上template,导致生成的结果乱七八糟的,今天就带大家详细的聊聊通义千问中的chat template。Qwen采用的是ChatML模版,ChatML是由OpenAI发布的对话标记语言,在ChatML中将对话的角色分成了三个:system, user, assistant,system是告知assistant的系统消息,user代表的是用户,而assistant表示的是智能助手。 先说结论:
单轮的template为:
bos + system + sep + query
多轮的template为:
bos + system + sep + query_1 + response_1 + ... + query_n-1 + response_n-1 + query_n
接下来逐个介绍template中的元素:

  • bos(begin of sentence)
在千问中,bos为空,可以看作没有bos token。
2. system
通义千问中的system message为:You are a helpful assistant.  整个system完整的信息为:
"system\n{system}".format(system="You are a helpful assistant.")3. sep(seperator)
通义千问中的sep token的换行符\n
4. query
query也就是用户输入,这一部分具体为:
"user\n{query}\nassistant\n".format(query="用户输入的query")5. response
模型的response直接就是将response的token转换为id,而在这一部分没有添加任何special token。
最后总结一下:
单轮的模版为:
"""system\n{system}\n \user\n{query}\n \ assistant\n""".format(    system="You are a helpful assistant.",     query="用户的输入")多轮的模版为:
"""system\n{system}\n \user\n{query1}\n \assistant\n{response1}\n \user\n{query2}\n \assistant\n""".format(                                system="You are a helpful assistant.",                                 query1="用户的第一次输入",                                 response1="智能助手的第一次回复",                                 query2="用户的第二次输入")参考资料:
收藏者
0
被浏览
514

1 个回答

叶弟 LV

发表于 2024-4-15 15:40:06

想问下多轮模板中,第3行assistant\n{response1}后面是否少了一个<|im_end|>呀?

您需要登录后才可以回帖 登录 | 立即注册