编者按:目前大模型仍然存在一个非常致命的缺陷——大模型的“幻觉”(Hallucination)问题。为什么 LLM 会出现幻觉?如何缓解这种情况?使用的数据集对此现象的影响几何?今天为大家带来的这篇文章将一一解答。
作者首先分析了LLM中出现幻觉的原因,主要是由于训练数据的压缩以及信息的不一致、受限或过时造成的。之后,作者通过对TruthfulQA数据集进行多次实验,比较了多种减少幻觉的方法:降低temperature值限制模型的创造力;使用逐步推理的prompt提高回答的准确性;融合外部知识库增强模型效果。作者发现prompt工程技术尤其关键,必要时可以链接外部知识库。
本文总结了当下缓解大语言模型“幻觉”问题的几种主流方法,有助于构建更可靠、可解释的LLM系统,具有较重要的参考意义。我们期待看到未来LLM中幻觉问题能够得到更多研究与应用突破。
以下是译文,enjoy!
作者 | Sergei Savvov
编译 | 岳扬
🚢🚢🚢欢迎小伙伴们加入AI技术软件及技术交流群,追踪前沿热点,共探技术难题~
目录
01 “简短”摘要
02 LLM 的幻觉是什么?
03 为什么 LLM 会产生幻觉?
04 实验前的准备
05 减小Temperature参数值
06 思维链提示(Chain of Thought Prompting)和自我一致性(Self-Consistency)
6.1 思维链(CoT)
6.2 使用 CoT 实现自我一致的方法(CoT-SC)
6.3 思维树(ToT)
6.4 使用上下文和嵌入式标签的方法(Tagged Context Prompts)
6.5 自我一致性(Self-Correct)
6.6 多代理(Several Agents)
07 使用外部知识库
08 使用提示工程和外部知识库
09 Takeaways
10 本文参考资料
为什么 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": "https://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的合理设计 —— 这是缓解幻觉最具性价比和有效率的方法。
10 核心参考资料
- Practical Steps to Reduce Hallucination and Improve Performance of Systems Built with Large Language Models[23] — 这是我找到的最好的关于本文主题的文章之一。
- Reading list of hallucinations in LLMs[24] — GitHub 存储库,其中包含有关 LLM 幻觉信息的各种链接。
END
参考资料
[1]https://solarsystem.nasa.gov/news/890/who-has-walked-on-the-m...
[2]https://arxiv.org/pdf/2202.03629.pdf
[3]https://www.theverge.com/2023/2/8/23590864/google-ai-chatbot-...
[4]https://twitter.com/AiBreakfast/status/1688939983468453888?s=20
[5]https://newsletter.victordibia.com/p/practical-steps-to-reduc...
[6]https://www.newyorker.com/tech/annals-of-technology/chatgpt-i...
[7]https://github.com/manyoso/haltt4llm
[8]https://github.com/THU-KEG/KoLA
[9]https://github.com/sylinrl/TruthfulQA/tree/main
[10]https://medhalt.github.io/
[11]https://github.com/RUCAIBox/HaluEval
[12]https://arxiv.org/abs/2205.11916
[13]https://arxiv.org/abs/2203.11171
[14]https://arxiv.org/abs/2305.10601
[15]https://arxiv.org/pdf/2306.06085.pdf
[16]https://arxiv.org/pdf/2305.11738.pdf
[17]https://arxiv.org/abs/2305.14325
[18]https://arxiv.org/abs/2005.11401
[19]https://arxiv.org/pdf/2212.10496.pdf
[20]https://arxiv.org/abs/2305.13669
[21]https://arxiv.org/abs/2212.05221
[22]https://medium.com/towards-data-science/rag-vs-finetuning-whi...
[23]https://newsletter.victordibia.com/p/practical-steps-to-reduc...
[24]https://github.com/HillZhang1999/llm-hallucination-survey
本文经原作者授权,由Baihai IDP编译。如需转载译文,请联系获取授权。
原文链接:
https://betterprogramming.pub/fixing-hallucinations-in-llms-9...
🚢🚢🚢欢迎小伙伴们加入AI技术软件及技术交流群,追踪前沿热点,共探技术难题~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。