问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

大模型的幻觉 (Hallucination) 因何而来?如何解决幻觉问题?

创作时间:
作者:
@小白创作中心

大模型的幻觉 (Hallucination) 因何而来?如何解决幻觉问题?

引用
CSDN
1.
https://blog.csdn.net/2301_81888214/article/details/138792705

大语言模型(LLM)在生成高度流畅的回复的同时,也倾向于产生幻觉或做出非事实陈述,这可能会损害用户的信任。本文将为您详细解析LLM幻觉的成因,并介绍多种缓解幻觉问题的具体方法及相关研究进展。


图1. ChatGPT的回答是否是幻觉?

当开发人员尝试构建具有大模型的系统时,这些限制会带来一些挑战,因为整个系统必须满足质量、安全和落地性的要求。例如,我们能相信 LLM 提供的自动代码审查是正确的吗?或者,关于如何处理保险相关问题,大模型返回的回答是否可靠?

本文首先概述了幻觉一直是 LLM 面临的巨大挑战之一,然后介绍了解决幻觉和可靠性问题的具体步骤(及相关研究论文)。请注意,文章中提到的信息截至 2023 年 8 月,之后可能会发生变化。

01 “简短”摘要


图2. 实验结果对比

大语言模型中的幻觉源于数据压缩(data compression)和不一致性(inconsistency)。由于许多数据集可能已经过时或不可靠,因此质量保证具有挑战性。为了减轻幻觉,可以采取以下方法:

  • 调整temperature参数以限制模型的创造力。
  • 注意提示工程。要求模型逐步思考,并在回复中提供事实性信息和参考来源。
  • 整合外部知识源来改进答案验证(answer verification)。
  • 这些方法的巧妙组合可以实现最佳效果。

02 LLM 的幻觉是什么?

图3 捏造事实的例子:there were 12 Moon Walkers in total[1]

来自人工智能研究中心(Center for Artificial Intelligence Research )的一篇研究论文[2]将 LLM 的幻觉定义为“生成的内容与提供的源内容不符或没有意义”。

幻觉可以分为几种类型:

  • 逻辑谬误:模型在进行推理时出现了错误,提供错误的答案。
  • 捏造事实:模型自信地断言不存在的事实,而不是回答“我不知道”。
    例如:谷歌的 AI 聊天机器人 Bard 在第一次公开演示中犯了一个事实错误[3]。
  • 数据驱动的偏见:由于某些数据的普遍存在,模型的输出可能会偏向某些方向,导致错误的结果。
    例如:自然语言处理模型中发现的政治偏见[4]。

03 为什么 LLM 会产生幻觉?

我喜欢这篇文章[5]中说的一句话:当我们压缩训练数据时,模型难免会产生一定的幻觉。请看一些主流模型的数据压缩率:


图4. 训练数据的压缩率

当然,这种压缩的关键在于,生成模型存储的是输入(文本或图像像素点)之间关系(概率)的数学表征(mathematical representation),而不是输入的内容本身。更重要的是,这种表征能够让我们通过抽样或提交queries/prompts来提取知识。

这种压缩方法降低了保真度(fidelity),类似于《New Yorker》的一篇文章[6]中讨论的 JPEG 压缩。从本质上讲,完全恢复原始知识即使不是不可能,也会变得很困难。模型倾向于不完美地“填补空白”或产生幻觉,这是为了获得那些虽然被压缩但是仍然有用的知识表征而做出的权衡。(译者注:这种权衡的结果是,模型会在缺少信息的情况下进行猜测,从而产生不准确的输出。)

当LLMs的训练数据集中关于所提出问题的信息受限、过时或具有矛盾时,它们也会产生幻觉。(译者注:模型没有充分的信息支持准确回答问题,所以输出也就不可靠)

04 实验前的准备

本文旨在构建和测试一个大模型幻觉实验,以找到缓解幻觉的最佳方法并提高系统的性能。为此,在审查了各种数据集后,我选择了TruthfulQA基准测试[7]。


图5. 问题示例

虽然该数据集存在一些问题,如正确答案与其来源不符,但由于其主题多样、覆盖全面,因此仍然是最合适的选择。我还很喜欢以问答形式提供回答的做法,这对于测试模型比较有利。我们也可以轻松地请求 JSON 格式的回答:

…以 JSON 格式返回回答,例如:[{“class”: “A”}]

我使用了一个包含800行数据的数据集,并使用了GPT-3.5 turbo,因为该API具有较高的性价比。

用于评估大模型幻觉的其他基准测试:

  • Knowledge-oriented LLM Assessment benchmark (KoLA)[8]
  • TruthfulQA: Measuring How Models Imitate Human Falsehoods[9]
  • Med-HALT: Medical Domain Hallucination Test for Large Language Models[10]
  • HaluEval: A Hallucination Evaluation Benchmark for LLMs[11]

05 减小Temperature参数值

模型的 temperature 参数是用于调整模型预测的概率分布的标量值。就 LLM 而言,它在坚持模型从训练数据中学到的内容和生成更多多样化或创意性的回复之间取得平衡。一般来说,这些具有创意性的回复更容易出现幻觉。


图6. 减小 temperature 参数值的实验结果比较

对于需要突出内容真实性的任务,应努力使得上下文(语境)中的信息更加丰富,并将 temperature 设置为0,以获得基于上下文(语境)的回答。

06 思维链提示(Chain of Thought Prompting)和自我一致性(Self-Consistency)

基准错误(Benchmark errors)通常可以通过改进提示设计(prompt design)来解决。这也是我更关注这一主题的原因。

在多步推理任务(如算术或逻辑)上,LLM 经常会出现失误。但最近的研究表明,提供包含多步推理的示例可以提高模型的表现。值得注意的是,只提示大模型 "让我们一步步思考(Let’s think step by step) ",而不提供具体例子,也能取得类似的效果。

许多文章都深入探讨了思维链(thought-chaining)技术。从本质上讲,它们的目的是让模型逐步思考并进行自我验证。以下是一些优秀的方法:


图7. 利用 LLM 解决问题的各种方法示意图

现在,让我们深入探讨每种方法,并评估它们在同一个数据集上的准确率。

6.1 思维链(CoT)[12]

该文章的主要观点是在prompt中添加“逐步思考”

在回答之前逐步思考,并以JSON格式返回回答,例如:[{“class”: “A”}]

评估:Accuracy(准确率) = 58%

6.2 使用CoT实现自我一致的方法(CoT-SC)[13]

该方法是前一个方法的改进版本。我们要求模型给出几个答案,然后通过投票选择最佳答案

在回答之前逐步思考,并给出三个答案:如果是领域专家怎么回答,如果是主管怎么回答,以及您的回答。以下是以JSON格式返回的回复:

评估:Accuracy(准确率) = 57%

6.3 思维树(ToT)[14]

这是一个超越思维链提示(chain-of-thought prompting)的概括性框架,鼓励探索如何作为中间步骤使用语言模型来解决一般问题。这种方法能让 LM 通过审慎的推理过程,自我评估中间思路在解决问题方面所取得的进展。ToT prompt样例如下:

假设有三位不同的专家在回答这个问题。所有专家都将写下自己的一个思考步骤,然后与小组成员分享。然后,所有专家继续下一步,等等。如果任何专家在任何时候意识到自己错了,那么他就会离开。以下是以JSON格式返回的回复:

评估:Accuracy(准确率)= 37%

6.4 使用上下文和嵌入式标签的方法(Tagged Context Prompts)[15]

该方法包括构建问题集(generating question sets)、通过摘要创建上下文提示(creating context prompts through summaries)以及验证上下文提示和问题(verifying context prompts and questions)。

由于生成额外的数据集比较复杂,我调整了该方法,要求大模型提供参考资料的源链接和事实参考:


图8. 我设计的使用上下文和嵌入式标签的方法示意图

大模型在回复中能够提供详细信息,并包含信息参考来源。以JSON格式返回回复,例如:

[{“class”: “A”, “details”: “人体静脉中的血液实际上并不是蓝色的。血液因为含有血红蛋白而是红色的。”, “source”: “example.com”}]

评估:Accuracy(准确率)= 61%

6.5 自我一致性(Self-Correct)[16]

这可能是一种更先进的提示工程技术。其目的是让模型对其输出结果进行重复检验并批判,如下所示:


图9. 验证输出的示意图

从列表[“A”,“B”,“C”,“D”,“E”]中选择最可能的答案。然后仔细核对答案。想一想这个答案是否正确,其他人是否会同意?再根据需要改进您的答案。以JSON格式返回回复,例如:[{“first_answer”: “A”, “final_answer”: “B”}]

评估:Accuracy(准确率)= 58%

6.6 多代理(Several Agents)[17]


图10. 多代理方法示意图

多个语言模型实例提出各自的回答和推理过程,并进行多轮辩论,最终得出一个共同的最终答案。该方法包括几个prompt:

prompt1

逐步给出事实和您的想法,以找到这个问题的正确答案:{QUESTION}

prompt2

使用其他代理的解决方案作为附加信息,选择正确的答案选项:{QUESTION} {ANSWERS}。以JSON格式返回回答…

评估:Accuracy(准确率)= 54%

我不建议在实际应用中使用此方法,因为这种方法需要发送两次或更多次请求。这不仅会增加API的使用成本,还会减慢应用程序的运行速度。在我进行的测试案例中,生成 800 个问题的回复就花了两个多小时。

07 使用外部知识库

如前文所述,LLMs中的幻觉源于去试图重建压缩信息。通过在预测过程中提供来自知识库的相关数据,可以将纯粹的生成问题转换为,以所提供数据为基础的更简单的搜索或摘要问题。

由于在实践过程中,从知识库中检索相关数据并非易事,因此我将注意力集中在我所收集的数据集中的一小部分样本(约 300 行)上。

图11 外部资源的使用示意图

最终,prompt看起来像这样:

使用此信息{INFORMATION},为问题{QUESTION}选择正确的答案并以JSON格式返回回复…

评估:Accuracy(准确率)= 65%

我们仍需要做更多的工作对检索到的段落进行过滤和排序(filter/rank),并决定在这项工作中使用多少LLM上下文(LLM context budget)。此外,检索和排序可能会带来影响实时交互体验的延迟。

另一种有趣的方法是检索增强生成(RAG)[18],它融合了大语言模型中的检索(retrieval)和文本生成(text generation)功能。这种方法将从庞大语料库中获取相关文档片段的检索系统,与根据检索信息生成答案的大语言模型配对使用。


图12. RAG 技术示意图,此图由 Heiko Hotz 绘制

部分RAG技术相关文章

  • Hypothetical Document Embedding (HYDE)[19] — 该论文建议使用LLM的初始回答作为检索相关段落的软查询。
  • [2305.13669] Mitigating Language Model Hallucination with Interactive Question-Knowledge Alignment[20]
  • [2212.05221] REVEAL: Retrieval-Augmented Visual-Language Pre-Training with Multi-Source Multimodal Knowledge Memory[21]
  • RAG vs Finetuning — Which Is the Best Tool to Boost Your LLM Application?[22]

08 使用提示工程和外部知识库

此方法结合了前述各点,使用了几种不同的提示工程和外部知识库技术。我采用了 CRITIC 框架中的逻辑:

图13 CRITIC 框架

使用此信息{INFORMATION}为{QUESTION}选择正确的回答,然后仔细检查您给出的回答。考虑这是否是正确的回答,其他人是否会同意?然后根据需要改进您给出的回答。

并以JSON格式返回回答,例如:[{“first_answer”:”A”, “final_answer”:”B”}]

评估:Accuracy(准确率)= 67%

虽然质量没有太大提高,但这是由于我使用的数据集存在问题。有些 "正确 "回答与来源信息不符。

09 Takeaways

图14 利用文章中给出的技巧,成功消除了幻觉

乍一看,减少LLMs中的幻觉并不是什么难事:调整temperature参数,使用好prompt,链接外部数据源。然而,和生活中的很多事情一样,虽然细微的差别很多,但是每种方法都有其优缺点。

我的主要建议是?优先考虑prompt的合理设计 —— 这是缓解幻觉最具性价比和有效率的方法。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号