如何解决大模型的「幻觉」问题?

在这里插入图片描述
参考论文

一、什么是大模型「幻觉」hallucination?

1、幻觉定义

大模型生成看似合理的内容,其实这些内容是不正确的或者是与输入Prompt无关,甚至是有冲突的现象,即生成与用户输入不符、与先前生成的内容矛盾或与已知世界知识不符的内容。

大语言模型在预训练阶段根据上下文信息推测下一个字生成的概率,但缺乏真正的理解能力,因此可能产生幻觉

为什么出现幻觉? 预训练阶段数据不完备、信息描述不准确、对话策略缺陷。

  1. 预训练阶段数据不完备:模型在预训练阶段缺乏足够的数据支持,导致其无法准确理解语义,只能依靠概率推测生成内容。
  2. 信息描述不准确:与模型交流时,我们提供的信息有限且不完整,模型无法准确理解上下文,从而产生幻觉。
  3. 对话策略缺陷:模型缺乏自主决策能力,无法判断哪些问题可以回答,哪些问题需要拒绝回答,导致幻觉的产生。

所以,为了让大模型更好的理解我们的问题,我们需要给大模型更多的输入,更多的限定, 更多的上下文, 更加明确的结果输出, 这样大模型才更有可能返回我们期望的结果。 Prompt其实也就是用这个思路解决问题的, 限定的上下文, 更多的输入, 更多的限定,从而输出得到更好的结果。

2、幻觉类型

在这里插入图片描述

  • 输入冲突幻觉Input-conflicting:生成的内容与用户提供的输入不符;

    输入冲突幻觉指的是LLM生成的内容与用户提供的源输入(①任务指示:例如用户对摘要的提示和②任务输入:例如需要摘要的文档)不一致。当LLM生成的内容偏离用户的输入时,就会出现这种幻觉。

  • 语境(上下文)冲突幻觉 Content-conflicting:生成的内容与之前生成的信息相矛盾;

    语境冲突幻觉指的是LLM生成的内容与之前生成的信息相矛盾。
    当LLMs生成冗长或多轮回答时,可能会出现自我矛盾的情况。
    这种幻觉产生于LLMs在整个对话过程中失去对上下文的跟踪或无法保持一致性时,这可能是由于在保持长期记忆或识别相关上下文方面存在一定的限制所致。

  • 事实冲突幻觉 Fact-conflicating:生成的内容与已知的世界知识不符;

3、幻觉来源

  • 大模型缺乏相关知识或内化错误知识

    LLMs在预训练阶段积累了大量的知识,但可能缺乏相关知识或内化了错误的知识。在回答问题或完成任务时,LLMs使用存储在模型参数中的知识。如果模型缺乏相关知识或内化了错误的知识,它们可能会展示出幻觉。

    例如:语言模型有时会将虚假的相关性(如位置接近或高度共现的关联)误解为事实知识。有研究在自然语言推理任务中研究了幻觉问题,并发现语言模型的幻觉与训练数据的分布之间存在强相关性。

    同时,有研究发现幻觉也存在于人类生成的语料库中,这可能表现为过时、偏见或虚构的表达。此外,Zheng等人发现,知识的回忆和推理能力与语言模型提供真实答案有关,这两种能力的不足可能导致幻觉。

  • 大模型有时会高估自己的能力

    研究表明,语言模型可以自我评估回答的正确性和识别自己的知识边界。但对于非常大的语言模型,正确和错误答案的分布熵可能相似,表明它们在生成错误答案和正确答案时同样自信。此外,即使是最先进的语言模型GPT4也存在无法回答问题的问题,且其自信度常常超过其实际能力。

    大模型LLMs在法律知识边界方面的理解可能不够准确,常常表现出过度自信。这种过度自信会导致LLMs以不必要的确定性编造答案。

  • 有问题的对齐过程可能会误导大模型产生幻觉

    大模型LLMs的对齐过程可能会导致幻觉,特别是当它们没有从预训练阶段获得先决知识时。此外,大模型LLMs可能会出现谄媚现象,导致生成的回答偏向用户的观点而不是正确或真实的答案。

  • 大模型采用的生成策略存在潜在风险

    大模型LLMs生成回应时,通常是逐个输出标记。然而,研究发现LLMs有时会过度坚持早期的错误,即使它们意识到错误。这种现象被称为幻觉积累。此外,局部优化(标记预测)并不一定能确保全局优化(序列预测),早期的局部预测可能导致LLMs难以产生正确的回应。采用采样生成策略(如top-p和top-k)引入的随机性也可能导致幻觉的产生。

二、造成大模型「幻觉」的原因

总结:反应到大模型过程中可总结为产生幻觉的主要原因有预训练数据收集、知识GAP和大模型优化过程三个方面。

1. 数据收集

  • 预训练数据:大模型的知识和能力主要来自与预训练数据,如果预训练数据使用了不完整或者过期的数据,那么就很可能导致知识的错误,从而引起幻觉现象;
  • 上下文学习:为了让大模型可以更好的输出,有时会在Prompt中增加一些上下文内容,然而这些上下文的类别和pair的顺序也可能引起幻觉,比如前几个example的标签是“是”,后面几个是“否”,那么大模型很可能就输出“否”了;
  • 多语言大模型:处理少语种或者非英文翻译的问题;

2. 知识GAP

  • 主要来自pre-training和fine-tuning阶段的输入数据格式不同引起的。

3. 优化过程

  • 最大似然估计和teacher-forcing训练有可能导致一种被称为随机模仿的现象,大模型在没有真正理解的情况下模仿训练数据,这样可能会导致幻觉;
  • top-k和top-p采样技术也可能导致幻觉,LLM倾向于产生滚雪球般的幻觉,以保持与早期幻觉的一致性,即使在“Let’s think step by step”这样的提示下,它们仍然会产生无效的推理链;

三、如何评估幻觉

针对不同类型的幻觉,采用的评估方式不一样。可以从评估基准、评估形式等几个方面进行介绍。

1、评估基准

现有针对幻觉的工作,提出了各种基准来评估LLM中的幻觉,具有代表性的基准,包括TruthfulQA、FActScore等。

1)评估形式

现有的基准主要根据LLMs的两种不同能力来评估幻觉:生成事实陈述或区分事实陈述与非事实陈述的能力。

  • 生成基准将幻觉视为一种生成特征,类似于流畅性和连贯性,并对LLM生成的文本进行评估。例如,TruthfulQA评估的是考察大模型回答问题的真实性,而FActScore考察的是大模型为特定个人生成的传记的事实准确性。

  • 判别式基准考虑的是大模型辨别真实陈述和幻觉陈述的能力。具体来说,HaluEval要求模型确定状态信息是否包含幻觉信息,而FACTOR则研究LLM是否赋予事实陈述比非事实陈述更高的可能性。

2)任务形式

现有的基准可在各种应用任务中评估LLM幻觉。

首先,有些基准在问题解答的背景下探讨了幻觉问题,评估了LLM对知识密集型问题提供真实答案的能力。

其次,FActScore和HaluE-val采用了任务指令,如Alpaca项目中的传记介绍指令和52K指令,以提示大模型生成再回答。然后对这些回答的真实性进行评估。

第三,有一项研究直接提示LLMs完成给定前缀的文本,并在生成过程中诊断出潜在的幻觉。 例如,FACTOR考虑了维基百科文档中的前缀,而Fac-tualityPrompt专门为事实性或非事实性语句设计前缀,以诱发幻觉。

3)构建方法

上述大多数基准都需要人类注释者来创建数据集或保证质量

TruthfulQA精心设计问题以诱发模仿性错误,即在训练分布上具有高可能性的错误陈述。然后,利用人工标注来进一步验证与真实答案的一致性。

FActScore采用人工标注将长篇模型生成转化为原子语句片段。

HaluEval采用了两种构建方法。在自动生成上,设计了提示来查询ChatGPT,以抽取不同的幻觉并自动过滤高质量的幻觉。在人工标注方面,通过人工标注员标注模型回复中是否存在幻觉,并列出相应的跨度。

FACTOR首先使用外部LLM生成非事实知识。然后,手动验证自动创建的数据集是否符合预定义的要求,即它们应该是非事实性的、流畅的,并且与事实性的完成相似。

2、评估指标

语言生成的自由形式和开放性质使得对LLM生成的半语言进行评估变得困难。最常用、最可靠的幻觉评估方法依赖于人类专家遵循特定原则。当前,流行的包括人工评估以及自动化评估。

1)人工评估

为确保评估的精确性和可靠性,现有基准侧重于设计专门的人工评估原则,其中包括对每个模型生成的文本进行人工标注评估。

TruthfulQA提出了一种人工标注指南,指导标注者为模型输出分配十三个定性标签中的一个,并通过咨询可靠来源来验证答案。

FactScore要求注释者为每个原子事实分配三个标签:“支持"或"不支持”。"支持"或"不支持"表示知识源支持或不支持的事实,"无关"表示与提示无关的陈述。虽然人工评价具有可靠性和可解释性,但由于标注人员的主观性,可能无法保持一致。此外,每次需要对新模型进行评估时,都需要耗费大量人力物力进行标注,因此成本过高。

2)模型的自动化评估

TruthfulQA训练了一个GPT-3-6.7B模型,根据问题的注释对答案(真假)进行分类。根据工作介绍,经过微调的GPT判断模型的验证准确率达到了90-96%,并能有效地泛化到新的答案格式。

AlignScore建立了一个统一的函数来评估两个文本之间的事实一致性。该对齐函数是在一个大型数据集上进行训练的,该数据集跨越了自然语言推理(NLI)、问题解答(QA)和仿写等七项任务。

FactScore首先使用通道检索器(如基于通用T5的检索器)来收集相关信息。然后采用一个评估模型,如LLaMA-65B,使用检索到的知识来确定状态的真实性,并进一步采用微观F1分数和误差率来评估自动指标与人工评估相比的可靠性。

也有一种做法设计专门的提示来查询评估者LLM(例如ChatGPT)在相同上下文下的主观LLM是否自相矛盾,并报告分类指标,包括精确度、召回率和F1分数。

四、解决幻觉的方法

  1. 模型层面优化:通过获取更多且正确的数据来训练模型,如爬取实时网页信息或读取企业私有数据,以减少模型造假的情况。
  2. 微调阶段优化:以原始大模型为基础,输入特定领域的高质量数据进行二次微调。但需注意,微调后的模型可能会丧失部分原始能力。
  3. 提示词描述清晰:在给模型提供提示词时,尽量描述清楚背景知识,限制回答字数,并提供清晰的指令或引导模型从特定角度思考。
  4. 专属知识库:建立专属知识库,要求模型只能从指定的数据中获得回答。如果模型在数据库中没有找到对应答案,则返回兜底话术。

1、 常见的幻觉解决方法

在这里插入图片描述
1)多代理互动

多个LLM(也称为代理)独立提出建议,并就各自的回应进行协作辩论,以达成单一共识。

2)提示词工程

现有研究表明,LLM的行为会因用户的提示而发生显著变化。就幻觉而言,用户可能会遇到这样的情况:LLM最初会做出准确回应,但在使用不同提示时,LLM开始产生幻觉。因此,可以设计出更有效的提示来缓解幻觉。

即采用了思维链提示,迫使LLMs在提供最终答案之前生成推理步骤。然而,思维链可能会带来一些新的挑战。幻觉推理步骤的可能性就是其中之一。此外,目前流行的一种做法是在设计"系统提示"(即用于引导LLM行为的特殊信息)时,明确指示LLM不要提供虚假或不可验证的信息。如“如果您不知道问题的答案,请不要分享虚假信息。”

3)分析LLMs的内部状态

LLMs可能会意识到自己的虚假信息,这意味着可以利用他们的内部状态来检测虚假信息。因此,可以基于语言模型激活的语句准确性预判(SAPLMA (SAPLMA),该方法在LLM的每个隐藏层上添加了一个分类器,以确定真实性。

4)人在回路(human in loop)

LLM中幻觉的一个潜在原因可能是知识与用户问题之间的错位,这种现象在检索增强生成(RAG)中尤为普遍。

为了解决这个问题,可以引入了MixAlign,利用LLM将用户查询与存储的知识对齐,并进一步鼓励用户澄清这种对齐。通过反复调整用户查询,MixAlign不仅减少了幻觉,还提高了生成内容的质量。也可以修改LM的结构以减少幻觉。【这个很有趣】例如多分支解码器和不确定性感知解码器。在构建LLM时采用双向自回归架构,从而实现从左到右和从右到左的语言建模,这种设计策略可以有效地利用双向自回归结构,有效地利用双向信息,有助于减少幻觉。

2、不同下游任务解决幻觉的方法不同

在这里插入图片描述
在这里插入图片描述

3、不同阶段使用的方法不同

在这里插入图片描述

3.1 训练阶段:Pretrain期间的缓解

现有的工作认为,LLM的知识大多是在预训练阶段获得的。在预训练语料库中存在诸如错误信息之类的噪声数据可能会破坏LLMs的参数知识,而这是导致误差的一个重要因素。有时,还可以将语言模型获得的事实知识追溯到其训练数据。因此,减少幻觉的直观方法可以是人工或自动整理预训练语料库,尽可能减少无法验证或不可靠的数据。

① 人工消除噪声训练数据以减轻幻觉的工作。

例如:

  • 专注于"数据到文本"(data-to-text)任务,并邀请人工根据给定的知识库手动编写干净准确的回复;
  • 在现有的表格到文本数据集中对文本进行人工提炼;
  • 在构建表对文训练数据时,指导注释者修改维基百科中已验证的句子,而不是直接创建新句子;

②自动选择可靠数据或过滤掉噪声数据

例如:

  • GPT-3的预训练数据就是通过与一系列高质量参考数据的相似性进行清理。

  • Falcon通过启发式规则从网络中仔细提取高质量数据,并证明了经过适当分级的相关语料库可以产生强大的LLM。为了减少幻觉,目前的LLM通常会从可靠的文本来源收集预训练数据。

  • Llama2在构建预训练语料库时,从维基百科等高度事实性的来源中向上抽取数据

  • 有的工作在事实性文档的句子前加上主题前缀,使每个句子在预训练时都能作为一个独立的事实,将文档名称作为主题前缀,并观察到这种方法提高了LM在TruthfulQA上的性能。

在预训练过程中,如何减少"晕轮"现象主要是围绕预训练语料的整理展开的。鉴于现有的预训练语料库规模庞大,目前的研究主要采用简单的启发式规则来选择和过滤数据。一个潜在的探索途径是设计更有效的选择或过滤策略

3.2 训练阶段:SFT期间的缓解

作为一种常见做法,当前的LLMs一般都会经历一个被称为"监督微调"(SFT)的过程,以从预训练中获取所需的知识,并学习如何与用户互动。SFT通常包括首先注释或收集海量任务指令跟踪数据,然后使用最大似然法(MLE)在这些数据上对预先训练的基础LLM进行微调。

与预训练类似,一种可能的方法是要减少SFT阶段的幻觉,可以对训练数据进行整理,但SFT数据量相对较小,手动和自动整理都是可行的选择。

此外,将特定领域的知识集整合到SFT数据中,以减少因缺乏相关知识而产生的幻觉。

值得注意的是,Schulman(2023年)低估了SFT过程的潜在风险,即它可能因行为克隆而诱发LLM产生幻觉。行为克隆是强化学习中的一个概念(Torabietal.这里的问题在于,这种方法只是简单地模仿行为,而没有学习实现最终目标的策略。

LLMs的SFT过程可被视为行为克隆的一个特殊案例,LLMs通过模仿人类来学习互动的形式和风格。

总结的说,整理训练数据是在SFT阶段减少幻觉的一种方法。由于SFT数据量可以接受,因此可以由人类专家对其进行人工整理。该工作进行初步的人工检查,发现一些广泛使用的合成SFT数据,如Alpaca由于缺乏人工检查,包含了相当数量的幻觉答案。这就要求研究人员在尝试建立基于自我指导的SFT数据集时要小心谨慎。

以前的研究还指出,SFT过程可能会无意中引入幻觉,因为它迫使LLM回答超出其知识边界的问题。一些研究者提出了以诚实为导向的SFT作为解决方案。然而,这种方法有两个主要问题:

首先,它对分布外(OOD)情况的基因化能力有限。其次,由于标注人员不了解LLMs的真实知识边界,因此标注的诚实样本只是反映了标注人员的不确定以及对知识的盲区,而不是LLMs的无能和不确定。这些挑战使得在SFT期间解决这一问题成为次优方案。

3.3 训练阶段:RLHF期间的缓解

利用人类反馈不仅能缩小机器生成的内容与人类偏好之间的差距,还能帮助LLM符合预期的标准或目标。目前常用的一个标准是"3H",即有益、诚实和无害。这里的"诚实"只是指在LLM反应中尽量减少幻觉。

目前的LLM,如InstructGPT、ChatGPT、GPT4(Ope-nAI,2023年b)和Llama2-Chat,在RLHF过程中都考虑到了这一方面。

例如,GPT4使用合成幻觉数据来训练奖励模型并执行RL,从而将Truth-fulQA的准确率从约30%提高到60%。

此外,使用过程监督来检测和减轻推理任务中的幻觉,为每个中间推理步骤提供反馈。

由于SFT阶段的行为克隆现象有可能导致幻觉。一些研究人员试图通过将诚实样本整合到原始SFT数据中来解决这一问题。然而,这种方法有一定的局限性,例如OOD的泛化能力不尽人意,人类和LLM知识边界不一致。

有鉴于此,Schulman(2023年)提出在RLHF中解决这一问题。该工作设计了一种专门用于减轻幻觉的特殊奖励函数。“非形成性"指"我不知道"等安全答案。其核心理念是鼓励学习者挑战前提、表达不确定性,并通过从特殊的奖励中学习来证明自己的无能。这种方法称为"诚信导向RL”,它与"诚信导向SFT"相比有几个优点。

其主要优势在于,它允许LLM自由探索其知识边缘边界,从而增强其对OOD案例的概括能力。此外,它还减少对大量人工标注的需求,并消除了对标注者猜测LLM知识边界的要求。
总的来说,强化学习可以引导LLM探索其知识边界,使他们能够拒绝回答超出其能力范围的问题,而不是编造不真实的回答。但这种方法也带来了独特的挑战。例如,由于在乐于助人和诚实之间的权衡失衡,经过RL调整的LLM可能会表现出过度保守。

ChatGPT倾向于过度对冲,避免提供它已经知道的明确答案,这在另一个对话回合中得到了证明,这可能是由于奖励函数的设计不合理,也可能是由于训练数据质量不高。

3.4 推理阶段:Inference期间的缓解

与上述训练时的缓解方法相比,在推理时缓解幻觉可能更具成本效益和可控性。因此,现有研究大多集中在这一方向。

1、设计解码策略

解码策略,如贪婪解码和波束搜索解码,决定了我们如何从模型生成的概率分布中选择输出标记。

设计解码策略以减少LLMs在推理过程中的幻觉通常是即插即用的。因此,这种方法易于部署,在实际应用中大有可为。不过,对于这种方法来说,大多数现有研究都要求访问token级别输出概率,而目前相当数量的LLM只能通过有限的API(如ChatGPT)返回生成的内容。

2、借助外部知识

使用外部知识作为补充证据来帮助LLMs提供真实的回复,是最近兴起的一种解决方案。这种方法通常包括两个步骤:第一步是准确获取与用户指令相关的知识。一旦获得了有用的知识,第二步就需要利用这些知识来指导应答的生成。

1)知识获取

通过大量的预训练和微调,LLM已将大量知识内化到其参数中,这些知识可称为参数知识。然而,不正确或过时的参数知识很容易导致幻觉。为了解决这个问题,可以从可靠来源获取可靠的最新知识,作为LLM的一种热补丁。

外部知识又可以分成多种不同的类型,例如:

  • 一种是外部知识库。 大部分现有研究都从外部知识库中获取信息,如大规模非结构化语料库、结构化数据库、维基百科等特定网站,甚至整个互联网。证据检索过程通常采用各种稀疏(如BM25)或密集(如基于PLM的方法()检索器。搜索引擎,如谷歌搜索,也可被视为一种特殊的信息再提取器。在此基础上,也包括参数知识指导框架,从微调白盒LLM的参数存储器中重新汲取知识。

  • 外部工具。 例如,FacTool针对特定的下游任务,利用不同的工具帮助检测LLM中的幻觉,如用于基于知识的质量保证的搜索引擎API、用于代码生成的代码执行器和用于科学文献审查的谷歌学术API。CRITIC让LLM与多个工具交互,并自动修改其响应,这已被证明能有效提高真实性。

2)知识利用

一旦获得了相关知识,就可以在不同阶段加以利用,以减轻LLMs的幻觉。现有的知识利用方法可大致分为两类。

  • 一种是生成时补充。利用检索到的知识或工具反馈的直接方法是,在提示LLMs之前直接将它们与用户查询串联起来,这种方法既有效又易于实施,这种知识也被称为内文知识,现有研究表明,LLMs具有很强的上下文学习能力,这使它们能够提取和利用有价值的信息。

  • 另一种是事后纠正。即在后处理阶段构建一个辅助固定器来纠正幻觉。固定器可以是另一个LLM,也可以是一个特定的小模型(Chen等人,2023a)。这种固定器首先与外部知识源互动,收集足够的证据,然后纠正幻觉。

总结:利用外部知识减轻LLMs幻觉方法无需修改LLM,是一种即插即用的高效解决方案。其次,它便于向LLM传输专有知识(如公司内部数据)和实时更新信息。最后,这种方法允许将生成结果追溯到源证据,从而提高了LLM生成的信息的可解释性。然而,这个方向也存在一些现实的问题。

  • 首先知识验证。在LLM时代,外部知识源可以超越单一文档语料库或特定网站,涵盖整个互联网。然而,互联网上的信息都是野生的,这意味着它们也可能是编造的,甚至是由大模型自己生成的,如何验证从互联网上检索到的知识的真实性,是一个有待解决的开放性和挑战性问题。

  • 其次,检索器/修复器的性能/效率。检索器/修复器的性能对确保消隐效果起着至关重要的作用。未来的工作可能会考虑通过强化学习或其他技术共同优化整个工作流程(回收器→LLM→固定器)。此外,由于现有LLM的生成速度已经是一个很大的负担,因此检索器/修复器的效率也是另一个需要考虑的重要因素。

  • 最后,知识冲突。如前所述,检索到的知识可能与LLMs存储的参数知识相冲突。当知识冲突发生时,LLM可能无法充分利用检索到的知识。如何充分利用文本知识是一个尚未充分探讨的问题,并且当检索增强型LLM必须在长上下文中间获取证据时,其性能会明显下降。

3)利用不确定性

不确定性是推理过程中保护和减少幻觉的重要指标。通常,它指的是模型结果的置信度。不确定性可以帮助用户确定何时信任LLM。只要能准确描述LLM响应的不确定性,用户就能过滤或纠正LLM的高不确定性声明,因为这类声明更容易是捏造的。

一般来说,估算LLM不确定性的方法可分为以下三类。

  1. 基于Logit的估计。这是一种基于对数的方法,它需要获取模型的对数,通常通过计算令牌级概率或熵来确定不确定性。

  2. 基于口头的估计。直接要求LLM表达其不确定度,例如使用以下提示:“请回答并提供您的置信度分数(从0到100)”。这种方法之所以有效,是因为当地语言学家的语言表达能力和服从指令的能力很强。也可以使用思维链提示来加强这种方法。

  3. 基于一致性的估计。这种方法基于这样一个假设:当LLMs犹豫不决并对事实产生幻觉时,他们很可能会对同一问题做出逻辑上不一致的回答。

例如:使用BERTScore、基于QA的指标和n-gram指标进行计算,并将这些方法结合起来能产生最佳结果。直接利用额外的LLM来判断两个LLM反应在相同语境下是否存在逻辑矛盾,可以采用另一种LLM来修正两个反应中这种自相矛盾的幻觉。利用现有的程序监督为LLM响应分配一个风险分值,可作为幻觉的指标。

五、参考资料

  1. https://mp.weixin.qq.com/s/NP0ckqWiefb-ozk6uR7GbA
  2. https://zhuanlan.zhihu.com/p/666278645
  3. https://zhuanlan.zhihu.com/p/667937520
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐