AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


RAG | (牛津大学Nature发文的RAG超简单幻觉检测器) 使用语义熵检测大型语言模型中的幻觉
发布日期:2024-07-17 08:09:11 浏览次数: 2064 来源:码农的科研笔记



1 研究问题

本文研究的核心问题是: 如何在大型语言模型(LLMs)中检测幻觉,特别是检测"胡说八道"型的幻觉。

假设在医疗领域使用LLM回答问题"Sotorasib的靶点是什么?"。LLM可能有时会回答KRASG12C(正确),有时会回答KRASG12D(错误),尽管指令相同。这种不一致和错误的回答就是一种幻觉,需要被检测出来以确保LLM的可靠性。

本文研究问题的特点和现有方法面临的挑战主要体现在以下几个方面:

  • LLM的幻觉问题严重影响其在各个领域的应用,如法律、新闻和医疗等。
  • 现有方法如通过监督或强化学习来提高真实性只能部分解决问题。
  • 需要一种通用的方法来检测LLM的幻觉,即使是面对新的、未见过的问题。
  • 传统的不确定性估计方法不适用于LLM的自由形式生成任务。

针对这些挑战,本文提出了一种基于概率统计的"语义熵"方法:

该方法的核心思想是通过计算LLM生成内容的"语义层面"的熵来检测幻觉。具体来说,它首先生成多个可能的答案,然后使用双向蕴含关系将这些答案聚类成具有相同含义的组。最后,计算这些语义组的熵,而不是直接计算单词序列的熵。这种方法巧妙地解决了同一个意思可以用多种方式表达的问题,从而更准确地反映了LLM在语义层面的不确定性。高语义熵表示LLM在生成答案时存在高度不确定性,这通常意味着可能出现幻觉。这种方法不需要特定领域的先验知识,可以在不同的数据集和任务中通用,并且能够较好地泛化到新的、未见过的任务中。

2 研究方法

2.1 语义熵的基本原理

语义熵是一种新的不确定性度量方法,专门用于检测大型语言模型(LLMs)中的幻觉。传统的熵计算方法主要关注词序列的概率分布,而语义熵则聚焦于答案含义的分布。这种方法的核心思想是:即使模型生成的答案在词序列层面有所不同,只要它们表达相同的含义,就应该被视为模型对答案含义是确定的。

举个例子,假设我们问模型"埃菲尔铁塔在哪里?"模型可能会生成以下几个答案:

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

传统的熵计算方法会将这些答案视为完全不同的序列,从而得出一个较高的熵值,误认为模型对答案不确定。然而,从语义的角度来看,这些答案实际上表达了相同的含义。语义熵方法正是捕捉到了这一点,它会将这些答案聚类为同一个语义类,从而得出一个较低的熵值,更准确地反映了模型对答案含义的确定性。

这种方法的优势在于,它能够区分模型在表达方式上的变化和在实际含义上的不确定性。这就好比我们在日常交流中,可能会用不同的话来表达同一个意思,但我们的听者通常能够理解我们表达的核心含义是一致的。

2.2 语义熵的计算方法

语义熵的计算涉及以下几个关键步骤:

  1. 多样本生成: 对于给定的问题或上下文,我们首先让模型生成多个(通常是10个)可能的答案。这个过程类似于让模型"头脑风暴",产生多种可能的回答。
  2. 语义聚类: 接下来,我们需要判断这些生成的答案中哪些实际上表达了相同的含义。这是通过检查答案之间的双向蕴含关系来实现的。具体来说:
  • 如果答案A蕴含答案B,且答案B也蕴含答案A,那么我们认为A和B语义等价。
  • 我们使用预训练的自然语言推理(NLI)模型或指令微调的大型语言模型来判断蕴含关系。
  • 通过这种方式,我们可以将语义相似的答案聚集到同一个类中。
  • 熵计算: 最后,我们基于聚类结果计算语义熵。计算公式如下:
  • 其中,代表第i个语义类,是给定输入x时生成属于类的答案的概率。

    具体来说,假设我们对"埃菲尔铁塔在哪里?"这个问题生成了10个答案,其中8个被聚类为"巴黎",2个被聚类为"罗马"。那么我们会得到:

    语义熵就是:

    这个相对较低的熵值表明模型对答案有一定的确定性,但仍存在一些不确定性。

    2.3 离散化语义熵变体

    在某些情况下,我们可能无法获取模型生成每个词的精确概率。为了应对这种情况,论文提出了一种离散化的语义熵变体。这种方法的核心思想是,我们可以直接用生成的样本数量来近似估计概率分布。

    具体来说:

    1. 我们仍然生成多个答案样本(例如10个)。
    2. 进行语义聚类,得到不同的语义类。
    3. 但是,我们不使用模型给出的精确概率,而是简单地计算每个语义类中样本的比例。

    举个例子,还是以"埃菲尔铁塔在哪里?"这个问题为例。假设我们生成了10个样本,其中:

    • 7个被聚类为"巴黎"
    • 2个被聚类为"罗马"
    • 1个被聚类为"柏林"

    那么我们会估计:

    离散化的语义熵就是:

    这种方法虽然是一种近似,但在实践中效果也很好,特别是当我们无法获取模型内部概率时,它提供了一种可行的替代方案。

    2.4 语义熵在长文本生成中的应用

    语义熵方法不仅适用于短答案,还可以扩展到段落级别的长文本生成任务中。这个过程稍微复杂一些,但基本思路是相似的。具体步骤如下:

    1. 分解长文本: 首先,我们需要将生成的长文本(如一段传记)分解成多个独立的事实陈述。这可以通过使用另一个语言模型来自动完成。
    2. 为每个事实生成问题: 对于每个提取出的事实陈述,我们使用语言模型生成几个可能导致这个事实的问题。这一步是为了重构可能导致这个事实被提及的上下文。
    3. 回答生成的问题: 对于每个生成的问题,我们让原始模型生成多个答案。这些答案加上原始的事实陈述构成了我们计算语义熵的基础。
    4. 计算语义熵: 我们对每个问题的答案集合计算语义熵,然后取平均值作为这个事实陈述的最终语义熵。

    举个例子,假设我们有一段关于爱因斯坦的传记文本,其中包含这样一个事实陈述:"爱因斯坦于1921年获得诺贝尔物理学奖。"

    我们可能会为这个事实生成以下问题:

    1. "爱因斯坦什么时候获得诺贝尔奖?"
    2. "爱因斯坦因何获得诺贝尔奖?"
    3. "爱因斯坦获得了哪个领域的诺贝尔奖?"

    然后,我们让模型回答这些问题,并计算每个问题答案集的语义熵。最后,我们取这些熵的平均值作为原始事实陈述的语义熵。

    这种方法的优势在于,它允许我们评估长文本中每个事实陈述的可靠性。如果某个事实的语义熵特别高,那么它可能是模型的幻觉或不确定的推测。这为我们提供了一种细粒度的方法来检测和定位长文本生成中的潜在问题。

    通过这种方式,语义熵方法不仅可以用于评估简单问答任务中的答案质量,还可以用于分析复杂的长文本生成任务,为提高大型语言模型的可靠性和准确性提供了强有力的工具。

    3 实验

    3.1 实验场景介绍

    本论文提出了一种名为"语义熵"的新方法来检测大型语言模型(LLMs)中的混淆。实验主要在两个场景中进行:句子长度的问答和数学任务,以及段落长度的传记生成。实验旨在评估语义熵方法在检测LLM输出中的混淆方面的有效性,并与现有的基准方法进行比较。

    3.2 实验设置

    • Datasets:
      • 句子长度任务:BioASQ, SQuAD, TriviaQA, SVAMP, NQ-Open
      • 段落长度任务:FactualBio(自创数据集,包含21个人物的传记)
    • Baselines:
      • 朴素熵
      • P(True)方法
      • 嵌入回归方法
    • Models:
      • Falcon Instruct (7B和40B)
      • LLaMA 2 Chat (7B, 13B和70B)
      • Mistral Instruct (7B)
      • GPT-4 (用于段落长度任务)
    • Metrics:
      • AUROC (Area Under the Receiver Operating Characteristic curve)
      • 拒绝准确率 (Rejection Accuracy)
      • AURAC (Area Under the Rejection Accuracy Curve)
    • Implementation details:
      • 使用10个生成样本来计算熵
      • 使用GPT-3.5或DeBERTa-large-MNLI进行蕴含估计
      • 对于GPT-4实验,使用离散变体的语义熵

    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作为蕴含估计器的效果
    结果:

    • GPT-3.5作为蕴含估计器时,语义熵的性能最佳
    • DeBERTa在段落长度任务中表现较好,可能是因为生成的答案较短

    实验4、语义熵在不同模型和数据集上的表现

    目的:分析语义熵方法在不同规模的模型和不同类型的数据集上的效果
    涉及图表:图2
    实验细节概述:在不同参数规模的模型(从7B到70B)和不同类型的数据集上测试语义熵方法
    结果:

    • 语义熵在不同规模的模型上表现稳定
    • 在各种类型的数据集(包括生物医学、常识问答、数学问题等)上都能有效检测混淆
    • P(True)方法在更大规模的模型上似乎有所改善,但仍不如语义熵

    实验5、语义熵与朴素熵的比较

    目的:展示语义熵相比朴素熵在处理语义等价但表达不同的句子时的优势
    涉及图表:表1
    实验细节概述:通过具体例子展示语义熵和朴素熵在不同情况下的表现
    结果:

    • 当多个生成结果语义相同但表达不同时,语义熵正确预测不是混淆,而朴素熵错误地预测为混淆
    • 当生成结果既在词汇上不同又在语义上不同时,两种方法都正确预测为混淆
    • 当生成结果几乎完全相同时,两种方法都正确预测不是混淆
    • 在某些微妙的情况下,语义熵可能会因为过于敏感的语义聚类而出错

    4 总结后记

    本论文针对大语言模型(LLM)中的"幻觉"问题,提出了一种基于语义熵(semantic entropy)的检测方法。通过对模型多次生成的答案进行语义聚类,计算语义层面的熵值来识别可能存在的幻觉。实验结果表明,该方法在多个问答数据集和生成任务中都能有效检测幻觉,优于现有基线方法,并能提高模型的整体回答准确率。

    疑惑和想法:

    1. 语义熵方法是否可以扩展到更复杂的生成任务,如长文本生成或多轮对话中?
    2. 除了双向蕴含关系,是否存在其他更有效的语义等价性判断标准?
    3. 如何将语义熵方法与LLM的训练过程相结合,从源头上减少幻觉的产生?
    4. 对于不同类型的"幻觉"(如事实性错误、逻辑矛盾等),是否需要设计不同的检测策略?

    可借鉴的方法点:

    1. 将概率统计方法与语义分析相结合的思路可以推广到其他NLP任务,如文本相似度计算、摘要生成等。
    2. 通过多次采样和聚类来评估模型输出不确定性的方法可以应用于其他机器学习模型的可靠性评估。
    3. 将复杂任务分解为多个子问题(如将段落分解为事实陈述)的策略可以用于简化其他NLP任务。
    4. 使用现有预训练模型(如DeBERTa)进行语义判断的方法可以广泛应用,提高各种NLP任务的效率。




53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询