微调 Qwen 3:0.6B 用于问题分类

微调 Qwen 3:0.6B 用于问题分类

概述

微调一个微型本地 LLM 可以将其从一个不可靠的分类器转变为一个用于元数据感知 RAG 的高性能工具。通过使用 Unsloth 框架和 QLoRA 微调 Qwen 3:0.6B,一位开发者将家政相关问题的分类准确率从 10% 的基准线提高到了 92%。

分类在 RAG 中的作用

问题分类作为预处理步骤,用于提高检索增强生成 (RAG) 的精度。通过将用户查询映射到特定的元数据类别(例如,“pool”、“hvac”、“cooking”),系统可以将向量排序的搜索空间缩小到仅匹配该类别的索引条目。这可以防止模型从其他类别中检索无关文档,从而提高最终答案的整体准确性。

基准性能:仅使用提示词

在使用原始的 Qwen 3:0.6B 模型且不进行微调的情况下,开发者使用了一个严格的提示词,要求模型仅从提供的列表中返回类别名称。

基准结果:

  • 准确率: ~10%(131 次测试中正确 13 次)。
  • 失败模式: 模型经常过度使用“electric”或“appliances”等宽泛标签,并且经常发明不在允许列表中的新类别(例如,“apartments”)。

微调策略与实现

为了超越基准线,开发者利用了 Unsloth 开源框架配合 QLoRA 进行微调。

数据集与训练

  • 数据集大小: 约 850 条数据条目。
  • 数据划分: 70% 训练集,15% 评估集,以及 15% 测试集。
  • 评估: 使用了一系列 131 项集成测试来衡量训练后的性能。

第一次微调尝试

在第一次尝试中,模型被训练为直接输出类别名称。

  • 准确率: 79%(131 次测试中正确 104 次)。
  • 遗留问题: 模型偶尔会输出类别的片段(例如,用“ac”代替“hvac”)并且在处理语义重叠的类别时感到困难(例如,“water heater”与“pool”)。

通过不透明 ID 优化准确率

将类别映射到不透明的两个字母代码(例如,用“AA”代表 appliances,用“KK”代表 hvac)比使用语义类别名称的效果显著提高了性能。通过消除输出 token 中的语义重叠,这个微型模型能够更好地将查询映射到固定的、非重叠的格式。

最终结果:

  • 准确率: 92%(131 次测试中正确 120 次)。
  • 关键发现: 要求使用固定的、非重叠的输出格式有助于小型模型保持一致性,并防止它们产生同义词或片段的幻觉。

剩余挑战

尽管准确率达到了 92%,但仍存在一些失败案例,特别是当类别具有重叠含义时。例如,由于共享“水”的上下文,模型继续将“water heater”查询误分类为“pool”查询。作者指出,进一步的改进将需要更细致的训练数据,以更好地区分这些特定的语义重叠。

Sources