开源kev决策模型: 基于Qwen2.5-0.5B小型开源Jev决策模型


Kev-0.5B:一个基于 Qwen2.5-0.5B 的小型开源 Jev 类决策模型,具有 TypeSafe 兼容的 API,可在 MacBook Pro 上进行训练和运行。

Jared Palmer把一个半B参数的小模型塞进MacBook,跑出了跟TypeSafe闭源商业决策引擎几乎一样的准确率!

你以为做决策必须靠大语言模型逐字生成,kev用一次前向传播就全搞定了!

kev决策模型基于Qwen2.5-0.5B做LoRA微调,用块因果掩码和指针读出头实现单次推理多问题并行回答,MacBook训练仅需1小时45分钟,6个问题推理延迟160毫秒,准确率79.9%逼近闭源Jev的81.1%。


大模型做决策根本不需要张嘴说话

打开任何一个聊天机器人,你问一个问题,屏幕上的字一个一个往外蹦,这叫自回归解码(autoregressive decoding),大语言模型最经典的输出方式,每蹦一个字都要算一遍所有词表的概率,再挑一个最可能的字吐出来,循环往复直到说完,问题越多蹦得越久,六个问题就得蹦六轮。

kev把整个解码环节直接砍掉了!Jared Palmer读了一篇叫《Jev's Architecture Unmasked》的技术博客,发现TypeSafe公司的闭源决策引擎Jev根本不走文字生成路线,Jev的做法是把用户输入的文档和所有问题打包成一个token序列,让Qwen2.5-0.5B的Transformer层只做一次前向传播(prefill),也就是prefill-only模式,模型读完所有输入后直接停住,不再生成任何新token,计算量在prefill结束那一刻就封顶了。

停住之后怎么出答案呢,kev在Qwen2.5-0.5B的最后一层隐藏状态上面焊了一个指针读出头(pointer readout head),这个读出头干的事情非常粗暴:拿每个问题末尾的标记的隐藏向量,跟每个选项的标记的隐藏向量做点积,算出一组分数,再过一遍softmax,直接输出概率分布!没有文字生成,没有逐字解码,没有解析正则,概率就是最终答案,训练用的损失函数是交叉熵(cross-entropy),直接拿标注好的选项分布当靶子打,所以kev输出的概率是学出来的,不是从文本logprobs里凑出来的。

这就怪了,一个0.5B参数的小模型,连话都不说,怎么就能做决策呢!


六个问题塞进一个序列反而跑得更快

正常人的直觉是问题越多越慢,你问大语言模型六个问题,要么分六次请求排队等,要么塞进一个长prompt让大语言模型一口气回答,不管哪种方式,计算量都跟问题数量线性增长,六个问题至少慢六倍。

kev走了一条完全不同的路,Jared Palmer把所有问题塞进同一个token序列,但用了一种叫块因果掩码(block-causal mask)的注意力机制,这个掩码的规则很简单:state部分的token互相做因果注意力,每个问题分支的token能看到state也能看到自己分支内的token,但是问题分支之间完全隔离,第一个问题绝对看不到第二个问题的任何一个token!

具体长什么样呢,kev的输入序列结构是这样的:


…state…
instructions option 1 option 2    ← question 1
instructions option 1 option 2    ← question 2

state只算一次,所有问题分支共享这段计算结果,每个分支的位置编码(position ids)在state结束后重新从0开始计数,所以每个问题都觉得自己是"state后面紧跟的唯一问题",问题顺序对结果毫无影响。Jared Palmer做了一组对照实验,把六个问题打包成一个请求发给kev,再把同样的六个问题拆成六个独立请求分别发给kev,两组结果的概率差异最大只有3.7e-6,基本就是浮点精度误差,而且打包版本的速度是拆分版本的2倍!

一个请求160毫秒出六个答案,TypeSafe的官方SDK连一行代码都不用改,把base_url指向本地http://127.0.0.1:8009就能直接跑,kev的API端点POST /v1/systemone完全复刻了TypeSafe的System One合约,请求体里state是文档内容,questions字典里每个问题带type、instructions和criteria三个字段,type支持noul(二选一)、choice(2到255个选项)、score(有序等级)三种类型,回答里直接带probabilities和confidence,choice的confidence公式是(p_max - 1/K) / (1 - 1/K),把随机猜测的基线扣掉了。


半B参数在训练集上打平闭源Jev

参数量的鄙视链在深度学习圈根深蒂固,70B打13B,13B打7B,7B打3B,0.5B在这个链条最底端,连跑个像样的聊天都费劲,更别提做结构化决策了。

Jared Palmer偏偏拿Qwen2.5-0.5B当底座,用LoRA(低秩自适应)技术只微调r=16的低秩矩阵,训练数据来自六个公开分类数据集:Banking77做77类意图分类,AG News做4类新闻分类,MNLI做3类自然语言推理,BoolQ做二选一问答,SST-5和Yelp做5级情感评分,总共9000条记录、13500个问题,训练两个epoch,在Apple M5芯片上跑了1小时45分钟,训练出来的权重叫kev-0.5b,挂在Hugging Face上开源下载,GitHub Release里也有tar.gz包。

成绩怎么样呢,在1350道held-out测试题上,kev-0.5b的整体准确率79.9%,期望校准误差(ECE)0.065;Jared Palmer又拿同一套冻结开发集(720道题)去调TypeSafe的闭源Jev做对比,Jev的准确率81.1%,两者差距只有1.4个百分点,95%置信区间是[-5.5, +1.7],统计上几乎分不出高低!在AG News四分类上kev甚至打出94.0%的准确率,比零样本Qwen2.5-0.5B-Instruct的78.7%高了15个百分点还多,在Banking77的77类意图分类上kev拿到86.0%,而零样本的Qwen2.5-0.5B-Instruct在这个任务上连baseline都没跑出来。

但是事情没那么简单,Jared Palmer换了一套完全不在训练集里的迁移测试集(TREC、DBpedia-14、Emotion、IMDB、Amazon、QNLI、TweetEval、MMLU,640道题,跟kev训练数据零重叠),kev-0.5b的准确率直接掉到63.3%,Jev稳在82.3%,差距拉大到19.1个百分点,95%置信区间[-23.1, -15.0],训练集上的parity在域外数据上完全崩塌!


概率校准比准确率更值钱

做分类任务大家习惯盯准确率,94%比90%好,86%比80%好,数字越大越牛,但在真实决策场景里,准确率只是一个粗糙的快照,真正决定业务风险的是概率校准度。

什么叫校准度,举个例子,如果kev对100个工单都输出"80%概率属于退货部门",那么这100个工单里应该真的有大约80个属于退货部门,如果实际只有50个,说明kev过度自信,概率虚高,这种模型上线后会误导人工审核流程。衡量校准度的标准指标是期望校准误差(Expected Calibration Error,ECE),把预测概率分成10个桶,算每个桶内预测概率和实际频率的加权偏差,ECE越接近0越好。

kev-0.5b在held-out测试集上的ECE是0.065,做完单参数温度缩放(temperature scaling)后降到0.031;在域外迁移集上kev的ECE是0.052,反而比Jev的0.075更低!这意味着虽然kev在域外准确率不如Jev,但kev输出的概率更诚实,说70%就真的是70%左右,不会像Jev那样把一些概率直接四舍五入到0,Jev的概率截断行为导致对数损失(log-loss)严重依赖裁剪下限,而kev的softmax输出天然保证所有选项概率之和为1,没有一个选项被强行归零。

这就引出一个很实际的问题:如果你的业务场景需要模型告诉你"这事我拿不准",kev的校准度比Jev更可靠;如果你的业务场景需要模型在没见过的领域也能蒙对答案,Jev的大参数底座优势就体现出来了!


15美分跑一次完整实验但迁移差距还在

Jared Palmer把整套训练和评估流程做成了可复现的开源工程,本地跑用uv包管理器加Apple MPS加速,云端跑用Modal的H100容器,一个0.5B参数的完整训练实验在H100上只要15到30美分,0.019秒处理一条记录,比M5的0.34秒快了18倍,训练用TF32加可选bf16,评估锁死fp32,因为TF32单独跑会把概率偏移1e-3左右,足以触发隔离性检测的门限。

kev的代码仓库里自带冻结研究套件(frozen research suite),evals/decision-v1目录下的数据集有校验和锁定,分训练集、校准集、开发集和锁定的测试集四个分区,实验运行器kev.experiment会校验git commit哈希、套件哈希和代码文件哈希,任何一项对不上就直接拒绝运行,测试集更是需要显式传--allow-test参数才能碰,这套流程保证了实验结果不会被数据泄露或代码漂移污染。

Jared Palmer还做了一个很有意思的机制验证实验:往一个问题的选项文本里塞入伪造的分隔符,试图骗kev把一段普通文本识别成新选项,结果kev的选项计数完全没变,伪造选项的概率被压到0.09以下,说明kev的tokenizer层面对特殊标记做了严格的清洗和转义,用户输入无法注入结构性指令;另一组独立信息无关性(IIA)测试显示,往选项列表里塞一个无关选项后,kev的log-odds平均偏移0.13,p90偏移0.34,说明kev对选项集合的变动并非完全免疫,但偏移幅度还在可控范围内。

但Jared Palmer在PLAN.md里坦承,kev-0.5b在域外迁移集上跟Jev的19.1个百分点差距还没有找到明确的缩小路径,Jev的选项顺序翻转率是0.000而kev是0.208,说明kev对选项排列顺序仍然敏感,Jev把部分概率四舍五入到零的行为虽然伤害校准度,但可能反映了某种更深层的决策阈值机制,kev目前还没有复现这个机制,下一轮实验计划用8B参数底座和组合式策略数据来补这个缺口,但8B在MacBook上跑不动,只能全部上Modal,成本和时间线都还是未知数!