内容提要
本文介绍使用Unsloth将Qwen3.5-4B微调为决策模型:从CLINC150数据集中选取10个意图类别,转换为“状态—问题—答案”格式,采用4位LoRA训练。验证准确率由18.5%提升至100%,校准后置信度更可靠,测试集全部正确。模型可输出意图及概率,并支持保存部署。
延伸解读
决策模型与生成模型的本质区别
文章指出,传统语言模型逐词生成文本,而决策模型(如Jev、Laya、Clef)从预定义选项中选择答案并返回概率估计。Unsloth的FastDecisionModel通过添加专用决策头,让模型对输入和候选选项打分,而非生成完整回复。这种结构更适合意图分类、内容审核、请求路由等需要明确动作的场景,因为输出是结构化的标签和置信度,便于下游系统直接使用。
小规模实验的亮眼结果与适用边界
在仅选取10个意图类别、1000条训练样本的设定下,Qwen3.5-4B经4位LoRA微调后,验证准确率从18.5%升至100%,测试集300例全部正确,ECE降至接近0。但作者明确提醒,这一结果仅限于该小型精选任务,不代表模型在完整150类数据集或域外请求上同样准确。读者应将其视为方法验证,而非通用性能承诺,部署前需用更复杂、模糊和域外样本测试。
置信度校准让概率输出更可信
决策模型不仅需要选对答案,还应让预测概率反映实际正确率。文章使用Unsloth内置的校准方法,将验证集ECE从0.0816降至0.00314,测试集ECE为0。校准后的概率更可靠,适合需要设置阈值或路由决策的应用。但需注意,校准基于验证集,若数据分布变化,概率可靠性可能下降,应定期重新评估。
复现成本与工程注意事项
整个实验在Google Colab的Tesla T4(约14.6GB显存)上完成,训练60步耗时约37.7分钟,仅训练2.10%的参数。这说明方法对硬件要求不高,适合快速验证。但文章也提示,增加意图类别会加长输入并提高训练需求;保存时可选择仅存LoRA适配器和决策头,或合并为完整模型。实际部署前,还需考虑域外检测等独立任务。
Q&A
Unsloth的决策模型和普通语言模型有什么区别?
普通语言模型逐token生成文本,而决策模型(如Unsloth的FastDecisionModel)不生成文本,而是从预定义选项中选择答案并返回概率估计。它通过添加专门的决策头,对输入和可用选项进行评分,适用于意图分类、内容审核、请求路由等需要结构化决策的场景。
用Unsloth训练决策模型时,数据集需要转换成什么格式?
需要将数据转换为包含三个字段的格式:state(模型要分析的输入文本)、questions(定义决策问题,包括类型如choice、指令和候选选项criteria)、gold(训练时的正确答案标签)。例如,对于意图分类,questions中指定type为choice,criteria列出所有可选意图,gold给出正确意图。
在Colab上用Qwen3.5-4B训练决策模型,硬件和训练配置是怎样的?
使用Google Colab,GPU为Tesla T4(约14.6 GB显存)。采用4位量化的LoRA微调,LoRA秩为16,alpha为16,dropout为0,启用梯度检查点。训练使用DecisionTrainer,批次大小为8,梯度累积步数为4,最大训练步数60,学习率2e-4,余弦调度,总训练时间约37.7分钟。
微调前后模型的准确率和置信度校准有什么变化?
训练前验证准确率为18.5%,ECE为0.0816,损失2.2937;训练后验证准确率提升至100%,ECE降至0.00314,损失0.00388。经过校准后,ECE进一步降至0.00196,使预测概率更可靠。在300个测试样本上,准确率达到100%,ECE为0。
训练好的决策模型如何用于预测新用户消息的意图?
调用FastDecisionModel.for_inference(model)进入推理模式,然后使用FastDecisionModel.predict(model, tokenizer, text, questions)进行预测。返回结果包含预测的意图标签和每个选项的概率分布。例如输入“how many calories are in a medium banana”,模型输出intent为'calories',概率为1.0。
训练完成后如何保存和部署这个决策模型?
可以使用model.save_pretrained("qwen-clinc150-decision")和tokenizer.save_pretrained("qwen-clinc150-decision")保存LoRA适配器和决策头。若需要完整模型,可调用model.save_pretrained_merged("qwen-clinc150-decision-merged")保存合并后的模型。之后可通过FastDecisionModel.from_pretrained()重新加载,用于Python应用或决策模型服务。