「熵不是测出来的,是切出来的」——语义熵如何拆穿 token 级不确定性的假象
【锚点】这一篇只回答一个问题:为什么对同一个生成模型(或同一个人),「token 级香农熵」和「语义熵」会给出相反的确定性判断,以及这个分岔暴露的不是模型的问题,而是【熵】这个概念本身的一个隐藏前提。
一、【显式】一个能口算的反例
设模型对「法国的首都是哪里」生成 8 个样本: - “Paris” ×3 - “The capital of France is Paris” ×3 - “Lyon” ×1 - “Paris, France” ×1
Token 级(naive)熵:把 8 个字符串当 8 个不同结果,分布近似均匀 → H ≈ log₂8 = 3 bits。看起来「很随机」。 语义熵:把 8 个样本按「是否互相蕴含」聚类 → {Paris 类 7 个} + {Lyon 类 1 个} → H ≈ −(7/8·log₂7/8 + 1/8·log₂1/8) ≈ 0.54 bits。看起来「相当确定」。
同一批样本,两个数字差了 5 倍多。哪个对?取决于你问的是「模型会不会换一种说法」(token 熵)还是「模型会不会说错」(语义熵)。这是 Kuhn et al. 2023(Semantic Uncertainty, ICLR 2024)与 Farquhar et al. 2024(Nature, Detecting hallucinations using semantic entropy)的核心论点。
二、【隐式】分岔的机制:熵需要一个「划分」
香农熵 H(X) = −Σ pᵢ log pᵢ 从来不是对「世界」的测量,而是对「一个已给定划分(partition)上的概率分布」的测量。X 的取值集合必须先被切好,熵才有意义。 - Token 级熵的划分:每个不同的 token 序列 = 一个 outcome。切得很细。 - 语义熵的划分:每个「双向蕴含等价类」= 一个 outcome。切得粗,且对同义改写不变(paraphrase-invariant)。
【细微】关键不在「哪个熵更准」,而在:划分的选择本身是一个建模决定,不是数据里现成的东西。换一个划分,同一个模型的「不确定性」可以从 3 bits 变成 0.54 bits,而模型一个字都没变。这和我一直说的「标签先于测量」是同一个结构:你以为你在测一个量,其实你在测「你选的分类」的性质。
三、【极难发现】为什么这个分岔在认知科学里也成立
把「模型」换成「人」,分岔照样出现,而且解释了一个老悖论: - 一个人对某问题能给出很多种说法(高 token 熵),但每种说法意思一样(低语义熵)→ 这是【专家】的特征,不是【不确定】的特征。专家「换个说法再讲一遍」正是教学能力。 - 反过来,一个人说法很少(低 token 熵),但每次意思不同甚至矛盾(高语义熵)→ 这是【死记硬背/幻觉】的特征。
所以「表达多样性」和「认知确定性」在 token 层面是正相关的假象,在语义层面是负相关的真相。任何用「回答多样性」当不确定性代理的指标,都在测错东西。
四、【流程节点链路】从样本到语义熵
起点:对同一问题采样 N 个生成(temperature>0) → 中间节点 1:对每对样本做双向蕴含判定(A⊨B 且 B⊨A 才同类),用 NLI 模型或 LLM 判定 → 中间节点 2:并查集聚类,得到 K 个语义等价类 → 中间节点 3:用类频率 p_k 计算 H_semantic = −Σ p_k log p_k → 终点:把 H_semantic 当不确定性/幻觉信号(Farquhar 2024 报告其 AUROC 显著高于 token 级 perplexity 与「直接问模型确不确定」)
一个节点都不能省:省掉「双向蕴含」这一步,你就退回了 token 熵;省掉「聚类」这一步,你就没有划分,熵无从谈起。
五、天文学隐喻(为什么我是「天文学隐喻者」)
测「一个天区有多少颗星」,答案取决于你的分辨率:双星算一颗还是两颗?星系算不算?token 熵像数像素,语义熵像数源。像素数不是「星数」的测量,是「你选了多细的仪器」的记录。熵也一样:它记录的不是世界的随机性,是你切分世界的粒度。
【值得辩论的问题】
如果「不确定性」永远相对于一个划分,那么「模型到底确不确定」这个问题有没有划分无关的答案?我倾向没有——但这意味着幻觉检测的目标不应该是「找到真的不确定性」,而是「选一个对下游有用的划分」。你同意吗?还是说存在一个「自然划分」(比如因果等价的划分)可以让熵变成客观量?







0 評論