游乐游手机版
首页/AI热点日报/热点详情

牛津大学Nature发表语义熵检测RAG幻觉的方法

类型:热点整理2026-06-18
当你在医疗场景里问一个大型语言模型:“Sotorasib的靶点是什么?” 它可能这次回答“KRAS G12C”(正确),下一次却回答“KRAS G12D”(错误),尽管指令完全一样。这种模型输出的不一致性与事实性错误,正是AI领域常说的“幻觉”,它直接关系到大模型在关键场景下的可靠性。 怎么才能有效

当你在医疗场景里问一个大型语言模型:“Sotorasib的靶点是什么?”

它可能这次回答“KRAS G12C”(正确),下一次却回答“KRAS G12D”(错误),尽管指令完全一样。这种模型输出的不一致性与事实性错误,正是AI领域常说的“幻觉”,它直接关系到大模型在关键场景下的可靠性。

怎么才能有效地把它揪出来?这便是本文探讨的核心问题。

这个问题之所以棘手,是因为现有方法大多治标不治本。比如,我们虽然可以用监督学习或强化学习来“调教”模型,让它更倾向于说真话,但这很难覆盖所有未知的新问题。况且,传统那种基于词序列概率的不确定性估计,在模型自由生成的场景下,几乎是失效的——同一个意思明明可以用千百种方式表达,计算词汇层面的混乱度显然会误判。

那么,有没有一种更聪明、更通用的办法?

这便是牛津大学团队在《自然》上发表的工作带来的启发。他们绕开了词汇的“障眼法”,直击核心:语义熵。简单来说,它不再盯着模型“怎么说”,而是关心模型“想表达什么意思”。其核心流程可以概括为:让模型针对一个问题生成多个答案,然后将含义相同的答案归为一类,最后计算这些“语义类”分布的不确定性

如果模型自己都“举棋不定”,给出的答案含义五花八门,那语义熵值就会很高,这往往就是幻觉的警报信号。这种方法妙就妙在它不依赖任何特定领域的先验知识,通用性强,有望成为大模型事实性核查的一把标尺。

二、研究方法:透视“语义熵”

从词汇到语义:核心思路的转变

传统方法计算熵,关注的是词序列的概率分布。但语义熵的思路完全不同,它聚焦于答案含义的分布。

关键在于一个洞察:即使模型输出的词句不同,但只要它们表达的是同一个意思,就应该认为模型对这个意思是“确定”的。反过来,如果模型连要表达的核心意思都摇摆不定,那才是真正的不确定性。

举个例子最直观。问:“埃菲尔铁塔在哪里?”模型可能生成:

  1. “巴黎”
  2. “法国首都巴黎”
  3. “它位于巴黎”
  4. “埃菲尔铁塔坐落在法国的巴黎”

如果用传统方法,这四个不同的字符串会带来很高的熵值,误以为模型很“困惑”。但语义熵方法能识别出它们都指向“巴黎”这个核心含义,从而将它们归入同一个语义类,计算出较低的熵值——这准确地反映了模型其实对这个事实是确信的。

这就好比两个人聊天,一个人用不同的方式反复确认同一件事,虽然措辞在变,但传递的信息是稳定且明确的。

实操拆解:如何计算语义熵

把理论落地,需要三步走。

第一步:多样本生成。 针对同一个问题,让模型生成多个可能的答案(论文中通常用10个)。这相当于让模型进行一次“头脑风暴”,把它能想到的可能性都列出来。

第二步:语义聚类。 这是最关键的一步,目的是判断哪些答案“意思是相同的”。这里借助了“双向蕴含”关系:如果答案A在逻辑上蕴含了答案B,同时答案B也蕴含答案A,那么我们就认为A和B语义等价。

实际操作中,可以用一个预训练的自然语言推理模型,或者一个指令微调好的大模型,来判断句子间的这种蕴含关系。通过这种比较,就能把所有答案分门别类,划归到不同的“语义群组”里。

第三步:熵值计算。 基于聚类结果,计算语义层面的熵。公式如下:

其中,代表第i个语义类,是给定输入x时模型生成属于该类的答案的概率。

举个例子:针对“埃菲尔铁塔在哪里?”生成了10个答案,有8个被聚类为含义“巴黎”,2个被聚类为含义“罗马”。那么,语义熵的计算就是:

这个相对较低的熵值表明,模型总体上倾向于“巴黎”这个答案,但确实存在一点“开小差”想到罗马的不确定性。

变通之道:离散化语义熵

有时,我们拿不到模型生成每个词的精确概率。怎么办?论文提供了一个很实用的“平替”方案:离散化语义熵。

思路很直接:用样本出现的频次来近似代替概率。同样是生成多个答案样本,进行语义聚类后,不去计算复杂的概率,而是直接数数——每个语义类里有多少个样本,其比例就当作是概率的估计值。

继续用上面的例子,假设10个样本里:

  • 7个聚类为“巴黎”
  • 2个聚类为“罗马”
  • 1个聚类为“柏林”

那么离散化语义熵就简化为:

虽然是个近似,但实验证明它在实践中非常有效,极大拓宽了方法的适用范围。

能力的延伸:在长文本中定位幻觉

语义熵的威力不止于短问答。对于生成一整段传记这类长文本任务,它也能派上用场,只不过需要多几步处理:

  1. 分解事实:先用一个语言模型,把生成的长文本拆解成一个个独立的事实陈述句。
  2. 反推问题:针对每个事实陈述,让模型反推“可能是哪些问题引出了这个回答”。这一步是为了重构上下文。
  3. 生成并评估:让原始模型去回答这些反推出来的问题,生成多个答案,然后为每个问题计算语义熵。
  4. 综合判断:将多个问题的语义熵取平均,作为原始那个事实陈述的最终不确定性得分。

比如一段爱因斯坦传记里有句话:“爱因斯坦于1921年获得诺贝尔物理学奖。” 系统可能会为它反推出几个问题:“爱因斯坦何时获奖?”“因何获奖?”“获的什么奖?”。然后通过评估模型对这些衍生问题的回答一致性,来间接判断原陈述的可靠性。

这样一来,我们就能像用探针一样,定位长文本中哪些“事实点”是模型含糊其辞、可能胡编乱造的,实现了对幻觉的细粒度检测。

三、效果如何?实验结果说话

实验设置一览

为了全面验证,研究团队设计了两类测评场景:句子长度的问答/数学任务,以及段落长度的传记生成任务。

  • 数据集:句子任务用了BioASQ、SQuAD等5个权威问答数据集;段落任务则自制了包含21位名人传记的FactualBio数据集。
  • 对比基线:选取了当时几种主流方法,包括朴素的词序列熵、P(True)方法以及嵌入回归方法。
  • 测试模型:覆盖了Falcon、LLaMA 2、Mistral等多种不同规模的开源模型,并在段落任务中测试了GPT-4。

核心发现:语义熵全面领先

在短问答上表现卓越

在5个数据集、6个不同模型上的广泛测试表明,语义熵在所有组合上都稳稳超过了其他基线方法。其平均AUROC(衡量排序性能的指标)达到0.790,而朴素熵、P(True)等方法还在0.69左右徘徊。而且,无论模型是70B的“大块头”还是7B的“小个子”,语义熵的表现都非常稳定(AUROC在0.78到0.81之间),显示出优异的普适性。

在长文本生成上同样有效

当任务变成生成一整段人物传记时,幻觉检测的难度陡增。实验人员使用GPT-4生成了传记,并从中提取出150个人工标注过真伪的事实陈述进行测试。结果,语义熵在AUROC和AURAC(衡量基于拒绝的准确率曲线)两项指标上依然保持领先。具体看,只有当系统拒绝回答超过20%的问题后,P(True)方法的性能才勉强与语义熵打平,在此之前,语义熵的准确率始终保持优势。

为何能赢?一个关键对比

语义熵相比传统方法的核心优势,通过一个简单对比就能看清。下表展示了不同情境下,语义熵与朴素熵的判断差异:

  • 当模型用不同句式表达同一意思时,语义熵能正确判断“非幻觉”(低不确定性),而朴素熵会被多变的措辞迷惑,误判为“幻觉”。
  • 当模型给出的答案在词义和语义上都不同时,两者都能正确预警。
  • 当所有答案几乎逐词相同时,两者也都能判断为确定。

这就清晰揭示了语义熵的价值:它过滤掉了无意义的表达差异,抓住了真正的内容不确定性。

总结与展望

总的来说,这项研究提出的语义熵方法,为大语言模型的幻觉检测提供了一个优雅而强大的新工具。它通过语义聚类,将不确定性评估从嘈杂的词汇层面提升到稳定的语义层面,并在多种任务和模型上验证了其有效性。

当然,任何方法都有其边界和可改进之处。这也引出了几个值得继续探索的方向:

  1. 任务泛化:这套方法能否无缝应用到更复杂的多轮对话、故事创作等场景?
  2. 等价性判断:除了双向蕴含,有没有更高效或更准确的语义等价判断标准?
  3. 源头治理:能否将这种检测机制反馈到模型训练中,从根源上减少幻觉?
  4. 幻觉分型:对于事实错误、逻辑矛盾、前后不一等不同类型的幻觉,是否需要差异化的检测策略?

抛开具体的技术细节,这项工作的思路也颇具启发性。它将概率统计的严谨与语义分析的灵活相结合,这种范式或许能迁移到文本相似度计算、摘要评估等其他NLP任务中。此外,通过多次采样和聚类来评估输出稳定性的思想,对于评估任何生成式AI模型的可靠性,都是一个宝贵的借鉴。

在AI愈发深入现实应用的今天,如何让模型“知之为知之,不知为不知”,语义熵为我们点亮了一条值得深入探索的路径。

来源:https://www.53ai.com/news/RAG/2024071791846.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。