在对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为空,可以看作没有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="用户的第二次输入")参考资料:
|
|