大模型的幻觉 (Hallucination) 因何而来?如何解决幻觉问题?
为什么 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的合理设计 —— 这是缓解幻觉最具性价比和有效率的方法。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
😝有需要的小伙伴,可以Vx扫描下方二维码免费领取==🆓
更多推荐
所有评论(0)