分类模型的老问题是概率校准得好,准确率上不去。很多流水线的做法是再接一个大模型兜底。一个开源项目换了顺序,先让模型想,再让它答。它在 90 亿参数的基座上加低秩适配和一个指针头,用监督微调加一种在线策略优化方法训练,在没见过的测试数据上把准确率从 0.857 提到 0.889,在同类公开基准的 231 道题上拿到 0.935。代价是延迟。一次请求的耗时从 0.3 秒变成中位数 3.3 秒。
先想再答是怎么接上的
问题和选项被拼进对话模板。模型先展开一段思考,思考结束后问题复述一遍,加一个决策标记。指针头在这里给每个选项打分,查询来自决策位置隐状态的投影,键来自每个选项结尾位置的隐状态投影,两者做缩放点积,再过 softmax 和温度。打分用的都是模板里不常见的特殊标记,改成普通文字的效果会变差,思考后不复述问题也会掉点。
训练分两段
监督微调跑两轮。全部投影加指针头都挂低秩适配,数据来自十二个公开数据集和合成策略数据,一半问题带有基座模型采样的思考链。数据集可以本地重建,脚本会按固定版本号拉取公开数据集,每个数据集用自己的许可。之后上在线优化,每题八个 rollout,温度取 1,思考上限 2,560 个 token。优化到第 402 步停下,这一步的校准和开发集分数最好,再往后指针头在饱和的强化数据上过尖。温度只在开发集上拟合一次,随检查点一起保存。
延迟的三个挡位
同一个检查点有三种用法。完整思考,准确率 0.825,平均 1,138 个思考 token,中位延迟 3.3 秒,尾延迟 17.1 秒。把思考截到 768 并加一个低置信阈值,准确率 0.806,token 降到 344,中位 2.0 秒,尾 5.6 秒。完全不思考,准确率 0.775,约 0.3 秒。要不要思考可以按请求逐条判断,不是一个全局开关。
起草器解决吞吐
解码慢还有另一个补救办法。项目做了一个扩散起草器,让掩码标记交叉注意力到混合架构的卷积后键值上,按块起草。单题场景下块四把每秒链 token 从 109 提到 176,块八到 193。八道题批量时块四总计约每秒 960。默认用块四,因为它批量时开销仍然可控。
它不擅长的部分
知识类题目明显落后。通用知识问答 0.793 对 0.900,扩展知识 0.739 对 0.840。尾延迟长,中位数和九十分位差五倍。没有加语言一致性奖励,思考链的可读性一般。选型时的判断很清楚。结构化决策、路由、打标、评分这类窄任务适合先想再答,开放知识和长尾问答还是大模型直接答更稳。
常见问题
它的接口和已有决策模型通用吗?
是。请求里可以同时放是否题、多选题和打分题,响应带概率和置信度,Python 客户端可以直接替换。
一定要显卡吗?
训练要八卡,推理要一张支持相应精度的卡。低延迟用法对算力要求低得多。
温度为什么要单独拟合?
指针头的分数是任意尺度,softmax 之前除一个温度才能当概率用。在开发集上拟一次,随检查点走,换数据要重新拟。
思考链能看吗?
可以,请求里打开开关就会把每个问题的推理文本一并返回。项目自己也说明,因为没有加语言一致性奖励,链条的可读性一般,调试时别当成可靠解释。