LLM大模型的幻觉 (Hallucination) 因何而来?如何解决幻觉问题?
为什么 LLM 会出现幻觉?如何缓解这种情况?使用的数据集对此现象的影响几何?本文将为您一一解答。生成式大语言模型(LLM)可以针对各种用户的 prompt 生成高度流畅的回复。然而,大模型倾向于产生幻觉或做出非事实陈述,这可能会损害用户的信任。“我们正在努力解决幻觉问题……这将需要一年半到两年的时间。图1 这个 ChatGPT 的回答是否是幻觉?当开发人员尝试构建具有大模型的系统时,这些限制会带
为什么 LLM 会出现幻觉?如何缓解这种情况?使用的数据集对此现象的影响几何?本文将为您一一解答。

Image generated by Stable Diffusion
生成式大语言模型(LLM)可以针对各种用户的 prompt 生成高度流畅的回复。然而,大模型倾向于产生幻觉或做出非事实陈述,这可能会损害用户的信任。
“我们正在努力解决幻觉问题……这将需要一年半到两年的时间。” —— OpenAI CEO Sam Altman

图1 这个 ChatGPT 的回答是否是幻觉?
当开发人员尝试构建具有大模型的系统时,这些限制会带来一些挑战,因为整个系统必须满足质量、安全和落地性的要求。例如,我们能相信 LLM 提供的自动代码审查是正确的吗?或者,关于如何处理保险相关问题,大模型返回的回答是否可靠?
本文首先概述了幻觉一直是 LLM 面临的巨大挑战之一,然后介绍了解决幻觉和可靠性问题的具体步骤(及相关研究论文)。请注意,文章中提到的信息截至 2023 年 8 月,之后可能会发生变化。
01 “简短”摘要

图2 实验结果对比
大语言模型中的幻觉源于数据压缩(data compression)和不一致性(inconsistency)。 由于许多数据集可能已经过时或不可靠,因此质量保证具有挑战性。为了减轻幻觉,可以采取以下方法:
- 调整temperature参数以限制模型的创造力。 (译者注:temperature参数控制生成语言模型中生成文本的随机性和创造性,调整模型的softmax输出层中预测词的概率;其值越大,则预测词的概率的方差减小,即很多词被选择的可能性增大,利于文本多样化)
- 注意提示工程。要求模型逐步思考,并在回复中提供事实性信息和参考来源。
- 整合外部知识源来改进答案验证(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的合理设计 —— 这是缓解幻觉最具性价比和有效率的方法。
如何系统的去学习大模型LLM ?
作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。
但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~

一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。


四、AI大模型商业化落地方案

阶段1:AI大模型时代的基础理解
- 目标:了解AI大模型的基本概念、发展历程和核心原理。
- 内容:
- L1.1 人工智能简述与大模型起源
- L1.2 大模型与通用人工智能
- L1.3 GPT模型的发展历程
- L1.4 模型工程
- L1.4.1 知识大模型
- L1.4.2 生产大模型
- L1.4.3 模型工程方法论
- L1.4.4 模型工程实践 - L1.5 GPT应用案例
阶段2:AI大模型API应用开发工程
- 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
- 内容:
- L2.1 API接口
- L2.1.1 OpenAI API接口
- L2.1.2 Python接口接入
- L2.1.3 BOT工具类框架
- L2.1.4 代码示例 - L2.2 Prompt框架
- L2.2.1 什么是Prompt
- L2.2.2 Prompt框架应用现状
- L2.2.3 基于GPTAS的Prompt框架
- L2.2.4 Prompt框架与Thought
- L2.2.5 Prompt框架与提示词 - L2.3 流水线工程
- L2.3.1 流水线工程的概念
- L2.3.2 流水线工程的优点
- L2.3.3 流水线工程的应用 - L2.4 总结与展望
- L2.1 API接口
阶段3:AI大模型应用架构实践
- 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
- 内容:
- L3.1 Agent模型框架
- L3.1.1 Agent模型框架的设计理念
- L3.1.2 Agent模型框架的核心组件
- L3.1.3 Agent模型框架的实现细节 - L3.2 MetaGPT
- L3.2.1 MetaGPT的基本概念
- L3.2.2 MetaGPT的工作原理
- L3.2.3 MetaGPT的应用场景 - L3.3 ChatGLM
- L3.3.1 ChatGLM的特点
- L3.3.2 ChatGLM的开发环境
- L3.3.3 ChatGLM的使用示例 - L3.4 LLAMA
- L3.4.1 LLAMA的特点
- L3.4.2 LLAMA的开发环境
- L3.4.3 LLAMA的使用示例 - L3.5 其他大模型介绍
- L3.1 Agent模型框架
阶段4:AI大模型私有化部署
- 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
- 内容:
- L4.1 模型私有化部署概述
- L4.2 模型私有化部署的关键技术
- L4.3 模型私有化部署的实施步骤
- L4.4 模型私有化部署的应用场景
学习计划:
- 阶段1:1-2个月,建立AI大模型的基础知识体系。
- 阶段2:2-3个月,专注于API应用开发能力的提升。
- 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
- 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的所有 ⚡️ 大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
全套 《LLM大模型入门+进阶学习资源包》↓↓↓ 获取~

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)