传统的熵计算方法会将这些答案视为完全不同的序列,从而得出一个较高的熵值,误认为模型对答案不确定。然而,从语义的角度来看,这些答案实际上表达了相同的含义。语义熵方法正是捕捉到了这一点,它会将这些答案聚类为同一个语义类,从而得出一个较低的熵值,更准确地反映了模型对答案含义的确定性。
这种方法的优势在于,它能够区分模型在表达方式上的变化和在实际含义上的不确定性。这就好比我们在日常交流中,可能会用不同的话来表达同一个意思,但我们的听者通常能够理解我们表达的核心含义是一致的。
- 熵计算:
最后,我们基于聚类结果计算语义熵。计算公式如下:
其中,代表第i个语义类,是给定输入x时生成属于类的答案的概率。
具体来说,假设我们对"埃菲尔铁塔在哪里?"这个问题生成了10个答案,其中8个被聚类为"巴黎",2个被聚类为"罗马"。那么我们会得到:
语义熵就是:
这个相对较低的熵值表明模型对答案有一定的确定性,但仍存在一些不确定性。
2.3 离散化语义熵变体
在某些情况下,我们可能无法获取模型生成每个词的精确概率。为了应对这种情况,论文提出了一种离散化的语义熵变体。这种方法的核心思想是,我们可以直接用生成的样本数量来近似估计概率分布。
具体来说:
- 但是,我们不使用模型给出的精确概率,而是简单地计算每个语义类中样本的比例。
举个例子,还是以"埃菲尔铁塔在哪里?"这个问题为例。假设我们生成了10个样本,其中:
那么我们会估计:
离散化的语义熵就是:
这种方法虽然是一种近似,但在实践中效果也很好,特别是当我们无法获取模型内部概率时,它提供了一种可行的替代方案。
2.4 语义熵在长文本生成中的应用
语义熵方法不仅适用于短答案,还可以扩展到段落级别的长文本生成任务中。这个过程稍微复杂一些,但基本思路是相似的。具体步骤如下:
- 分解长文本:
首先,我们需要将生成的长文本(如一段传记)分解成多个独立的事实陈述。这可以通过使用另一个语言模型来自动完成。
- 为每个事实生成问题:
对于每个提取出的事实陈述,我们使用语言模型生成几个可能导致这个事实的问题。这一步是为了重构可能导致这个事实被提及的上下文。
- 回答生成的问题:
对于每个生成的问题,我们让原始模型生成多个答案。这些答案加上原始的事实陈述构成了我们计算语义熵的基础。
- 计算语义熵:
我们对每个问题的答案集合计算语义熵,然后取平均值作为这个事实陈述的最终语义熵。
举个例子,假设我们有一段关于爱因斯坦的传记文本,其中包含这样一个事实陈述:"爱因斯坦于1921年获得诺贝尔物理学奖。"
我们可能会为这个事实生成以下问题:
然后,我们让模型回答这些问题,并计算每个问题答案集的语义熵。最后,我们取这些熵的平均值作为原始事实陈述的语义熵。
这种方法的优势在于,它允许我们评估长文本中每个事实陈述的可靠性。如果某个事实的语义熵特别高,那么它可能是模型的幻觉或不确定的推测。这为我们提供了一种细粒度的方法来检测和定位长文本生成中的潜在问题。
通过这种方式,语义熵方法不仅可以用于评估简单问答任务中的答案质量,还可以用于分析复杂的长文本生成任务,为提高大型语言模型的可靠性和准确性提供了强有力的工具。
3 实验
3.1 实验场景介绍
本论文提出了一种名为"语义熵"的新方法来检测大型语言模型(LLMs)中的混淆。实验主要在两个场景中进行:句子长度的问答和数学任务,以及段落长度的传记生成。实验旨在评估语义熵方法在检测LLM输出中的混淆方面的有效性,并与现有的基准方法进行比较。
3.2 实验设置
- 句子长度任务:BioASQ, SQuAD, TriviaQA, SVAMP, NQ-Open
- 段落长度任务:FactualBio(自创数据集,包含21个人物的传记)
- LLaMA 2 Chat (7B, 13B和70B)
- AUROC (Area Under the Receiver Operating Characteristic curve)
- 拒绝准确率 (Rejection Accuracy)
- AURAC (Area Under the Rejection Accuracy Curve)
- 使用GPT-3.5或DeBERTa-large-MNLI进行蕴含估计
3.3 实验结果
实验1、句子长度生成中的混淆检测

目的:评估语义熵方法在句子长度的问答和数学任务中检测混淆的能力
涉及图表:图2
实验细节概述:在5个数据集上,使用6个不同的模型进行实验,比较语义熵与基准方法的性能
结果:
- 平均AUROC:语义熵为0.790,而朴素熵为0.691,P(True)为0.698,嵌入回归为0.687
- 语义熵在不同模型家族和规模上表现稳定(AUROC在0.78到0.81之间)
实验2、段落长度生成中的混淆检测

目的:评估语义熵方法在段落长度的传记生成任务中检测混淆的能力
涉及图表:图3
实验细节概述:使用GPT-4生成21个人物的传记,从中提取150个事实声明,人工标注正确性,然后应用语义熵和基准方法进行混淆检测
结果:
- 语义熵方法在AUROC和AURAC指标上都优于基准方法
- 在拒绝80%问题之前,语义熵方法的准确率始终高于基准方法
- 只有在拒绝超过20%的问题后,P(True)方法的性能才略微超过语义熵
实验3、不同蕴含估计器的比较
目的:评估不同蕴含估计器对语义熵性能的影响
涉及图表:补充材料中
实验细节概述:比较了使用GPT-3.5和DeBERTa-large-MNLI作为蕴含估计器的效果
结果:
- DeBERTa在段落长度任务中表现较好,可能是因为生成的答案较短
实验4、语义熵在不同模型和数据集上的表现
目的:分析语义熵方法在不同规模的模型和不同类型的数据集上的效果
涉及图表:图2
实验细节概述:在不同参数规模的模型(从7B到70B)和不同类型的数据集上测试语义熵方法
结果:
- 在各种类型的数据集(包括生物医学、常识问答、数学问题等)上都能有效检测混淆
- P(True)方法在更大规模的模型上似乎有所改善,但仍不如语义熵
实验5、语义熵与朴素熵的比较
目的:展示语义熵相比朴素熵在处理语义等价但表达不同的句子时的优势
涉及图表:表1
实验细节概述:通过具体例子展示语义熵和朴素熵在不同情况下的表现
结果:
- 当多个生成结果语义相同但表达不同时,语义熵正确预测不是混淆,而朴素熵错误地预测为混淆
- 当生成结果既在词汇上不同又在语义上不同时,两种方法都正确预测为混淆
- 当生成结果几乎完全相同时,两种方法都正确预测不是混淆
- 在某些微妙的情况下,语义熵可能会因为过于敏感的语义聚类而出错
4 总结后记
本论文针对大语言模型(LLM)中的"幻觉"问题,提出了一种基于语义熵(semantic entropy)的检测方法。通过对模型多次生成的答案进行语义聚类,计算语义层面的熵值来识别可能存在的幻觉。实验结果表明,该方法在多个问答数据集和生成任务中都能有效检测幻觉,优于现有基线方法,并能提高模型的整体回答准确率。
疑惑和想法:
- 语义熵方法是否可以扩展到更复杂的生成任务,如长文本生成或多轮对话中?
- 除了双向蕴含关系,是否存在其他更有效的语义等价性判断标准?
- 如何将语义熵方法与LLM的训练过程相结合,从源头上减少幻觉的产生?
- 对于不同类型的"幻觉"(如事实性错误、逻辑矛盾等),是否需要设计不同的检测策略?
可借鉴的方法点:
- 将概率统计方法与语义分析相结合的思路可以推广到其他NLP任务,如文本相似度计算、摘要生成等。
- 通过多次采样和聚类来评估模型输出不确定性的方法可以应用于其他机器学习模型的可靠性评估。
- 将复杂任务分解为多个子问题(如将段落分解为事实陈述)的策略可以用于简化其他NLP任务。
- 使用现有预训练模型(如DeBERTa)进行语义判断的方法可以广泛应用,提高各种NLP任务的效率。