「不生成文本=没幻觉」这个等式成立吗?Laya 刷屏后的技术抬杠
【免费下载链接】laya项目地址: https://ai.gitcode.com/hf_mirrors/convaiinnovations/laya
Laya 最近在技术社区刷屏了:10.6k Star 的开源"System 1 决策引擎",单次前向 33 毫秒出决策,宣称"不生成文本、不靠提示词",用 RLCD(Reinforcement Learning for Calibrated Decisions)强化学习训练,置信度 ECE 降到 0.081,多项指标吊打闭源竞品 TypeSafe Jev。社区文章的标题一个比一个响——"不做生成只做决策,让 AI 应用快稳省""33 毫秒出决策,用不生成文本的方式消灭 AI 幻觉""把决策模型从 API 里抢回来"。
其中最抓眼球、也最值得抬杠的,是那句被反复引用的等式:「不生成文本 = 没幻觉」。
本文不打算站队,只做一件事:把这条论证链拆开,对照仓库源码与自评数据,看看它在哪一步成立、在哪一步偷换了概念。结论先放这儿——等式不成立,但这不妨碍 Laya 是一个值得认真对待的工程方案。
一、先拆论证:Laya 究竟消灭了哪种"幻觉"
Laya 的核心卖点在 README.md 开头一句话里写得明明白白:
It never generates text, so there is nothing to parse and nothing to hallucinate.
翻译过来就是:不生成文本 → 没有文本可解析 → 没有幻觉。这条论证链要成立,前提是"幻觉"只有一种形态。但现实里,我们把至少三种完全不同的故障都叫"幻觉":
- 内容编造(confabulation):模型一本正经地输出不存在的事实、代码或引用;
- 格式/解析失败:模型输出 JSON 结构损坏、少个括号、多个逗号,下游解析器炸掉;
- 过度自信的误判:模型给出一个答案,概率报得很高,但答案是错的。
Laya 的架构确实从根上切掉了前两类。打开 rl_agent_api.py 看system_one()的实现:输入是state + questions,输出直接是结构化结果——choice返回{choice, probabilities, confidence},score返回期望分值,noul返回P(true),整个返回体里usage字段写着output_tokens: 0。它的确一个 token 都不生成。
关键在于它怎么"决策"的。rl_common.py 里的build_sequence()展示了推理契约:每个候选选项前面挂一个[MASK]标记,整段序列([CLS] <type> question: <instructions> [SEP] [MASK] opt0 [MASK] opt1 ... [SEP] state [SEP])过一次双向编码器(根模型是 ModernBERT-large,28 层、hidden 1024,见 encoder/config.json),然后对每个[MASK]位置的隐状态打分、softmax 得到该题的选项分布。这就是"非自回归":一次前向、并行打分、无 token 流式输出。
所以严格来说,Laya 消灭的只是"生成型幻觉"——它不会编故事,不会吐出坏 JSON。但这恰恰引出了真正的问题:当模型把"说错话"换成"选错项、报错概率"时,幻觉并没有消失,只是换了个形态。
二、打分环节的"幻觉":误判与过度自信如何度量
决策模型不吐文字,它的"幻觉"就变成了两件事:误判(选了错的选项)和过度自信(概率报得高但经常错)。这两者都是可度量的,而且 Laya 仓库里就存着度量结果。
置信度校准的行业标准是 ECE(Expected Calibration Error):把预测按置信度分桶,计算"模型自报的概率"与"桶内实际准确率"的平均偏差。ECE 越低,说明"90% 置信度的判断里真的约有 90% 是对的"——这正是"诚实的概率"的操作性定义。仓库的 eval/ 目录下就有一组可靠性曲线图,比如任务内评估的校准曲线:
仓库自评结果(eval/results.md、eval/results.json)给出的数字很有说服力,也很有反差:
| 评估集 | 题数 | accuracy | ECE | NLL |
|---|---|---|---|---|
| 任务内(13 个任务族,共 23,024 题) | 23024 | 0.753 | 0.030 | — |
| 零样本(4 个训练外任务族,共 2,400 题) | 2400 | 0.651 | 0.204 | — |
任务内 ECE 只有 0.030,校准堪称优秀;但换到训练没见过的任务上,ECE 立刻跳到 0.204,其中情感与评级(sentiment and rating)零样本 ECE 高达0.438——接近"置信度与准确率基本脱钩"。同一个引擎,"诚实"与"不诚实"的分界线不是"生成与否",而是任务是否在训练分布之内。
更扎心的是 README 的 "Honest Limits" 章节,作者自己把底裤掀了:
- 自信地错:在 Khmer(高棉语)上,英文 checkpoint 打出0.000 准确率 + 0.952 平均置信度——模型完全错误且完全自信,置信度门控在这种情况下救不了你;
act_probability没有信号:act/escalate 头输出的自动化概率几乎对任何输入都读作 1.0,其原始 logits 与正确性的 AUROC 只有0.30,而基于归一化熵的confidence在同一批数据上 AUROC 达0.77(见 rl_common.py 的confidence_from_probs:置信度 = 1 − 归一化熵);- 出厂即过度自信:基础 checkpoint 原始 ECE 高达0.466,按(题型, 选项数)逐桶拟合温度后降到0.081(英文模型)——README 白纸黑字写着 "Ships over-confident: do this on your own data before trusting the probabilities"。
这三点说明一个残酷的事实:Laya 的校准不是"不生成文本"白送的,而是 RLCD 训练 + 后验温度拟合这两道工序挣来的。你部署时不做温度拟合,拿到的就是一个 ECE 0.466 的过度自信模型——和"生成式 LLM 报假 confidence"没有本质区别。
三、支持派的底气:严格适当评分规则把"诚实"变成了最优策略
既然要抬杠,就得先把对面最强的论据摆出来。支持派的核心武器是 RLCD 的数学设计,这也是 Laya 与普通分类器最本质的区别。
普通分类器用交叉熵训练,损失只要求赢家 logit 趋向无穷大,模型自然越训越自信;朴素强化学习给"答对 +1、答错 0"的奖励,期望奖励最大化同样会把概率推向 one-hot,毁掉校准。RLCD 换了个奖励函数:严格适当评分规则(strictly proper scoring rule)。看 rl_common.py 里的proper_reward(),奖励是三个评分的组合——对数评分(log score)+ 球面评分(spherical score)+ 序数题专用的排序概率评分(RPS):
r = log_score + w_sph * sph # log + spherical r = r - w_rps * rps * is_score # - ranked probability score (ordinal only)严格适当评分规则的性质是:只有当模型报告真实分布 q = p 时,期望奖励才取得唯一最大值。报高、报低、报歪,期望收益都更差。所以"诚实地报概率"不是道德约束,而是策略最优——这在数学上把"置信度"从营销话术变成了可训练、可验证的资产。
配套的还有工程细节:推理时按temperature_by_options对 logits 做逐桶温度缩放(见 rl_agent_config.json),例如choice:2用 1.906、choice:11+用 0.101、noul:2用 1.983——不同选项数的题校准需求完全不同,这正是"打分环节需要精细管理"的活证据。加上单次前向 38.4ms p50(eval/results.json)、T4 上批量 103–332 题/秒、Apache 2.0 开源可本地部署,支持派说"比调一个 8B LLM 做路由排序划算太多",这个论点是站得住的。社区里"不做生成只做决策""把决策模型从 API 里抢回来"这类声音,本质上都是同一个诉求:高频、低延迟、可自托管的判别式决策,不该再绑架在生成式 API 上。
四、抬杠派的三记回击:三个"但是"
但把"幻觉"这顶帽子从生成模型头上摘下来扣到自己头上之前,还有三个"但是"必须摆上桌。
但是一:零样本能力没有宣传的那么强。README 的 Honest Limits 写得很诚实:"Base checkpoints are near chance on typed-decisions zero-shot"——基础英文 checkpoint 在 typed-decisions 基准上零样本准确率只有0.362,低于多数类基线 0.461;微调后的laya-typed-decisions才冲到 0.766。社区文章标题里的 "0.766"、"ECE 0.081" 都属于"微调 + 拟合温度"之后的成绩,而 Laya 的定位官方表述是"a fast base to specialise"——一个需要针对业务微调的底座,而非开箱即用的零样本决策引擎。宣传话术与 Honest Limits 之间的落差,正是"抬杠"的最佳靶子。
但是二:置信度门控会被"自信的错误"击穿。支持派会说"我们输出校准概率,可以设阈值门控,低置信度转人工"。但前面已经列过证据:Khmer 上 0.000 准确率配 0.952 置信度,act_probabilityAUROC 0.30——门控只对"校准良好的分布内数据"有效,对分布外或语种错配的场景形同虚设。更隐蔽的是noul(布尔判断)的毛病:README 记载它可能被自己的选项标签(false:/true:)主导而不是被输入内容主导,对明显正向的输入自信地返回"否"——这是彻头彻尾的"决策幻觉",只是它以概率形式出现,容易被 ECE 曲线掩盖。
但是三:选项一多,照样崩。Banking77 基准上,Laya 在 77 个选项上只拿 0.425,TypeSafe Jev 在 72 个选项上是 0.870。原因在 README.md 里写得很清楚:所有选项共享固定的head_max_lentoken 预算(英文 192、多语 256),77 个标签平均每个只分到 3–4 个 token,选项文本之间失去区分度。换句话说,"幻觉"在 Laya 这里从"编故事"转移成了"标签预算管理"——你得手动调head_max_len、做 coarse-to-fine 分层决策,或者干脆承认 50+ 选项的场景不是它的主场。问题没有消失,只是换了个地方要你操心。
五、结论:等式不成立,但方向值得跟进
把三章证据收拢,可以给这场抬杠画个句号:
- "不生成文本 = 没幻觉"在严格语义上不成立。Laya 根除的是 confabulation 和解析失败这两类生成型幻觉;而误判、过度自信、语种错配下的"自信地错"、标签空间坍缩,这些决策型故障一个都不少,只是从"文字"变成了"概率分布",需要你用 ECE、Brier、reliability diagram 去度量,用温度拟合、置信度门控、任务内微调去管理。
- 但"决策不该绑架在生成式模型上"这个方向完全成立。RLCD 用严格适当评分规则把"诚实"变成策略最优,421M 参数 + 单次前向 33–39ms 的性价比、Apache 2.0 的本地可部署性,让它成为 Agent 路由、工单分诊、内容安全等高频判别场景里值得认真评估的组件。
如果要用 Laya,记住仓库自带的四条生产纪律(全部出自 Honest Limits):门控用confidence而不是act_probability;部署前按(题型, 选项数)在自有数据上重拟合温度;noul出问题就改用双选项choice并写清楚选项描述;选项超过 50 个就提head_max_len或拆分层决策。
刷屏归刷屏,公式归公式。这场抬杠的真正价值,是逼我们把"幻觉"这个词拆成可度量的具体故障——无论你站在哪一派,能做到这一点,就已经比大多数 AI 营销话术前进了一步。
【免费下载链接】laya项目地址: https://ai.gitcode.com/hf_mirrors/convaiinnovations/laya
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考