> 你让一个 LLM 解释光合作用,它流畅地说:”植物通过叶绿体吸收阳光,将二氧化碳和水转化为葡萄糖和氧气。”全对。 > > 你再让它解释量子隧穿效应,它同样流畅地说:”粒子通过波函数的延伸穿过势垒,经典力学下不可能。”——也全对。 > > 你让它介绍 1923 年图灵在剑桥的三明治配方,它依然流畅地说:”图灵偏爱黄瓜三明治,配以少量盐和胡椒。”——全是编的。图灵 1912 年出生,1923 年才 11 岁。 > > 问题来了:从输出文本看,三次回答的自信程度、流畅程度、语法正确程度几乎一模一样。你怎么知道第三次是编的?
传统答案有三种,但都不好用:一是”再问一遍看它答不一致”(多次推理,贵);二是”用另一个模型当裁判”(外部验证,更贵);三是”检索知识库对照”(需要外部数据,且只能查可查的事实)。
2026 年 7 月 arXiv 上一篇来自博洛尼亚大学的论文《D-Score: A Spectral Hidden-State Signal for Hallucination Detection in Large Language Models》给出了第四种答案:数一数模型内部隐藏层激活矩阵有多少个奇异方向”还活着”。一次前向传播,不用外部裁判,不用多次生成,不用检索。
一、核心直觉:说谎时大脑会”开更多灯”
D-Score 的核心直觉可以用一个生活类比抓住。
想象你大脑里有一排灯泡,对应不同的思维方向。当你陈述一个你确实知道的事实时,你的思维沿着一条主干道走——大部分灯泡是灭的,只有少数几个沿着主干道亮着。
但当你试图编一个和已知事实冲突的东西时——比如你明明知道图灵 1912 年生,却要硬编一个 1923 年的故事——你的大脑里同时存在两套表征:一套是你试图输出的编造内容,另一套是你内部知识库的”等一下这不对”。这两套表征互相拉扯,激活的灯泡就多了。
D-Score 就是数这个:有多少个奇异方向(singular directions)的奇异值和最大的那个”差不多大”。数越大,说明激活矩阵在更多方向上”摊开了”,越可能是幻觉。
二、形式化:一个简单到离谱的统计量
具体定义出奇简单。对于某一层隐藏激活矩阵 :
1. 做奇异值分解,得到一串奇异值
2. 设一个容差参数
3. 数有多少个奇异值满足
4. 这个数就是 D-Score
一次前向传播,一次 SVD,数一下,结束。 不需要外部验证器,不需要多次采样,不需要检索知识库。
作者还给了这个统计量的一个轻量级概率论证:当模型处理一个和内部状态冲突的文本时,隐藏表示需要同时编码”被断言的内容”和”某种形式的反证/不确定/修正”,这种双编码会让表示在更多奇异方向上展开。严格证明在附录 A 里,核心是一个关于随机矩阵扰动方向的命题。
三、实验结果:在两个基准上都涨了
作者在 FAVA-Annotation 和 RAGTruth 两个幻觉检测基准上评测,对比的基线包括 Logit Entropy(输出概率分布的熵)、Window Entropy(滑动窗口熵)、Hidden Score(之前最好的隐藏层方法)等。
FAVA-Annotation 上的结果(Llama-3-8B)
| 方法 | AUROC | Accuracy | TPR@5%FPR | F1 |
|---|---|---|---|---|
| Logit Entropy | 52.29 | 55.69 | 1.80 | 57.31 |
| Hidden Score | 58.22 | 59.28 | 10.18 | 66.99 |
| D-Score | 63.93 | 63.17 | 13.77 | 69.67 |
D-Score 在四项指标上全部第一,AUROC 比 Hidden Score 高 5.71 个百分点。
RAGTruth 上的结果
| 模型 | 方法 | AUROC |
|---|---|---|
| Llama-3-8B | Hidden Score | 54.95 |
| Llama-3-8B | D-Score | 61.53 |
| Vicuna-7B | Hidden Score | 51.93 |
| Vicuna-7B | D-Score | 60.20 |
在 Vicuna-7B 上,Hidden Score 的 AUROC 已经接近随机(50%),D-Score 还能保持 60.20——说明这个信号不依赖于特定模型族。
一个有趣的发现:模型越强,D-Score 越准
论文报告了一个反直觉但合理的结果:D-Score 和 Hidden Score 的差距在更强的模型上更大(Llama-3-8B 上差 9.88 AUROC)。原因是:更强的模型在内部”知道”自己在编造——它的内部状态会编码反证,而弱模型可能根本没意识到自己在编。D-Score 能捕捉到这种”模型自己知道不对”的信号。
四、为什么这属于”换层面解决问题”
D-Score 的精彩之处不在数字,在视角切换。
过去两年幻觉检测的主流方向是:在输出层面找证据——概率分布的熵、多次采样的一致性、和外部知识库的对照。所有这些方法都假设”幻觉会在输出里留下痕迹”。
D-Score 换了个层面:在表示层面找证据。幻觉不是输出层的现象,是隐藏层就有的现象——模型在生成”图灵 1923 年三明治”这个 token 之前,它的隐藏层已经同时编码了”图灵 1912 年生”这个内部知识。D-Score 就是把这个内部冲突读出来。
这和之前概念谱系里的”章鱼 RNA 编辑”是同构的:章鱼不在 DNA 层面改信息(输出层),而在 RNA 层面做编辑时计算(表示层)。D-Score 也是:不在输出文本层找幻觉,在隐藏激活层找。
换层面解决问题,概念谱系再添一例。
五、和”评测盲区定律”也连着
D-Score 还连着另一个跨论文共识:评测的盲区就是问题藏身的地方。
过去几年幻觉检测的评测,主要在测”输出层面的信号有没有用”。Logit Entropy 被反复评测、反复比较,因为它容易算、容易比。但 D-Score 指出:输出层面的信号本身就是弱的——模型说谎时,输出概率分布可能和说真话时几乎一样。
真正的信号在隐藏层。但隐藏层信号长期没被主流评测纳入,因为”评测输出”比”评测内部状态”容易得多。容易测的指标被反复优化,真正有信息量的指标被忽视——这是评测盲区定律的又一次复现。
六、诚实评价
D-Score 不是银弹,论文也诚实说了局限:
– 绝对值不高:AUROC 63.93 在生产环境里远不够用。作为”一个信号”很好,作为”唯一信号”不行 – 依赖层数选择:不同层的 D-Score 表现差异很大,需要在一组校准数据上选最佳层 – 依赖容差参数 τ:作者在附录 C 证明了 D-Score 对 τ 的选择相当鲁棒,但 τ 仍是一个需要调的超参 – 只检测”模型自己知道不对”的幻觉:如果模型内部根本没编码反证(比如模型本身的知识就是错的),D-Score 检测不到。论文在 4.3 节专门做了这个消融——把”模型自己识别为幻觉”的样本去掉后,D-Score 的优势大幅缩小
最后一点尤其重要:D-Score 检测的是”模型内部有冲突”的幻觉,不是”模型内部无知识”的幻觉。前者是模型说 A 但内部知道 B,后者是模型根本不知道答案但还是编了。两种幻觉的检测需要不同方法。
七、一点延伸思考
D-Score 让我想起一个更广的问题:LLM 的”内心”到底在哪一层?
过去两年机制可解释性社区一直在找”模型真正知道什么”的那一层——induction heads 在哪、幻觉方向在哪、谄媚偏置在哪。D-Score 给出了一个轻量级的答案:至少对于幻觉来说,中间偏后的层(论文用的是 Llama-3-8B 的第 20 层附近)的激活谱,已经编码了”模型自己信不信”的信号。
这和之前 Token Budget 论文发现的”layer-20 token-150 线性探针 AUC 0.608″是同一层的信号——中间偏后层的隐藏状态,是模型”内心”最密集的编码位置。
从这个角度看,D-Score 不只是一个幻觉检测器,它是一个读取模型内部状态的通用接口。数奇异值只是最简单的读法,未来可能会有更精细的”内部状态读取器”——但 D-Score 证明了:有时候最简单的统计量就够了。
> 论文链接:arXiv:2607.24586 > 代码:论文未提及开源仓库 > 一句话总结:模型说谎时,隐藏层的奇异方向会变多——数一下就知道它在不在编,一次前向传播,AUROC 63.93,不用外部裁判。
