同一个问题问模型五次,五个答案用了不同句子,意思却都指向北京。只按词面差异计算不确定性,会把这些正常改写看得太重。若五次答案分别指向五座城市,模型在含义上确实很犹豫。语义熵试着把这两种情况分开。
我把语义不确定性论文和后来发表在 Nature 的实验全文对了一遍。这项方法针对的是一类会随随机采样变化的错误,论文称它们为编造。它没有覆盖所有事实错误,也没有让系统只生成一次就知道真伪。
先把相同意思归在一起
方法会对同一问题采样多份回答,再判断哪些回答在语义上等价。研究者使用双向蕴含来分组。句子甲能推出句子乙,句子乙也能推出句子甲,二者就可以放进同一语义组。巴黎、是巴黎、法国首都是巴黎,词面不同,含义可以归到一起。
分组以后,程序把同一语义组内各答案的概率合起来,再计算这些含义之间的熵。概率集中在一个意思上,语义熵较低;概率分散到多个互相冲突的意思上,语义熵较高。论文还给出离散版本,即使接口不返回每个词元的概率,也可以根据多次采样所得的组别频率估计。
Nature 论文在问答和数学任务上比较多种模型与数据集。三十种任务和模型组合的平均结果里,语义熵预测错误的 AUROC 为 0.790,高于朴素熵的 0.691,也高于论文采用的其他基线。这个数字说明排序能力更好,不能直接变成百分之七十九的答案都能判对。实际阈值还会决定漏报与误报。
长回答也能处理,但步骤更多。论文先把段落拆成一个个事实陈述,再为每条陈述生成对应问题,让模型重复回答,最后计算各条陈述的语义熵。一次原回答会变成多轮生成与语义判断,成本和延迟都会上升。
一致回答仍可能一起错
语义熵高,适合提醒系统停一下,转去检索、让人复核或直接拒答。语义熵低,只说明多次采样给出相近含义。训练材料若一直写错,模型完全可能稳定地重复同一错误。日期刚变化、冷门人名和有歧义的问题,也可能需要外部来源确认。
语义分组本身还会出错。蕴含模型可能把细小数字差异合在一起,也可能把两种等价表达拆开。上线前应拿人工标注样本检查分组,再为高风险领域单独选择阈值。医疗、法律和付款动作不能因为一个低熵分数就自动放行。
这项方法适合回答一个较窄的问题,模型对答案的意思稳不稳定。事实是否正确,还要看可靠来源、任务测试和必要的人工确认。把高熵当报警信号很有用,把低熵当正确证明就走远了。