Qwen微调干货!对话、指令、Function Call、思考链数据集构造全流程揭秘!

在大模型微调的实践中,如何构建和选择微调数据集,是决定微调效果最关键的因素之一。目前,社区已经积累了大量优秀的微调框架和开放数据集。在很多通用场景中,开发者只需按需组合不同的框架与数据集,就能完成基础微调。

但随着模型功能越来越复杂,如支持 Function Calling、具备推理能力甚至是混合推理能力(Reasoning + Tool Use),常规数据集的适配能力也逐渐变得捉襟见肘。

例如,若想围绕 Qwen模型强化其 Function Calling 能力,同时保持其复杂推理结构不被破坏,此时很多公开数据集就难以胜任。又如,当你希望模型聚焦某个特定领域的专业知识,或者精准调用一组特定 API 工具时,也必须构造自定义微调数据集。

Qwen 模型的控制 token 与对话模板机制

Qwen 系列模型使用 ChatML 格式,并通过控制 token 来实现对生成流程的细致控制。

其关键机制如下:

  • 控制 token:在文本序列中插入的特殊符号,用于标记段落、文档边界、对话结构、工具调用等。例如:

    • <|endoftext|>:表示文档结束;

    • <tool_call> 和 </tool_call>:包裹工具调用内容;

    • <|im_start|> 和 <|im_end|>:用于定义对话轮次。

  • 统一词表体系(Qwen2.5 起)

    • 所有子模型(包括多模态模型)使用统一词汇表;

    • 共计 22 个控制 token,词表总规模达 151,665。

  • 对话模板结构
    Qwen 使用 ChatML 格式表示对话,格式如下:

<|im_start|>{{role}} {{content}}<|im_end|>
    • user:用户输入角色;

    • assistant:模型生成角色;

    • system:元信息角色(如设定模型身份或风格),默认值为:


示例对话片段:

<|im_start|>system You are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|><|im_start|>user hello<|im_end|><|im_start|>assistant Hello! How can I assist you today? ...<|im_end|>


通常,大家看到的对话微调数据格式如下,适用于结构化对话训练:

[  {    "instruction": "用户问题",    "input": "输入上下文,可为空",    "output": "期望模型输出"  }]

适用于 ChatML 模型微调,精确控制每轮角色与内容:

<|im_start|>system You are Qwen...<|im_end|><|im_start|>user 请解释大语言模型<|im_end|><|im_start|>assistant 好的,我来用儿童的方式解释...<|im_end|><|endoftext|>

指令 + Function Calling 数据格式:

<|im_start|>user 查询今天上海天气<|im_end|><|im_start|>assistant <tool_call>{"name""getWeather""arguments": {"location""Shanghai"}}</tool_call><|im_end|>

通用模型能力越强,对数据格式的要求越高。若希望打造具备复杂任务处理能力的模型,“数据工程”远比模型选择本身更重要

建议开发者根据目标任务特性:

  • 选择标准数据集进行预热训练;

  • 然后使用小规模、高质量的自定义数据集进行精调;

  • 特别是在 Function Calling 与多轮推理任务中,务必使用 ChatML 格式精准标注角色与意图。


更多信息参考下面的思维导图:

欢迎加入知识星球,更系统的学习大模型微调:
参考:
1. https://qwen.readthedocs.io/zh-cn/latest/getting_started/concepts.html

(文:AI技术研习社)

发表评论

×

下载每时AI手机APP

 

和大家一起交流AI最新资讯!

立即前往