Fork me on GitHub

怎么阻止大模型说瞎话?

以下文章来源于 https://zhuanlan.zhihu.com/p/676530275



一、前言

目前制约大模型落地应用除了速度慢之外,最重要的还是因为大模型还存在比较大幻觉问题。

有人曾经问过我,大模型幻觉是偶然还是必然,我是这么回答的:大模型幻觉即使偶然也是必然,在使用时,大模型幻觉问题会偶然发生,但是从大模型全局来看幻觉现象肯定是必然会产生的。

大模型幻觉主要分为两种情况:

1、回答与提示输入无关

2、回答与事实相悖


其实大模型想要具有创造性就不可避免会出现幻觉现象,产生的原因如下:

**1、模型结构问题:**单向因果掩码方式,下一个token是通过上文信息生成,模型更多的学习到生成文本的流畅性,事实性无法确认。

**2、数据偏置问题:**训练和测试阶段数据存在较大差距时,会有数据偏置问题,这就很容易引起模型幻觉现象。

**3、解码算法问题:**目前大模型解码基本都是top p和top k的方式,这就会导致生成结果并不唯一,尤其是温度参数过高时模型表现更有创造性的同时也会带来严重的幻觉现象。

**4、错误知识注入问题:**在训练大模型基底模型时预训练的语料都是从互联网中爬取清洗得到的,其中会包含一些错误信息,这种错误信息基本上是最难过滤的,所以现在的大模型预训练数据基本都含有这类错误。

综上,可知道大模型,必然会存在幻觉现象,目前有一些研究工作就是缓解大模型幻觉现象。


二、幻觉缓解方法

1、预训练阶段

在清洗预训练数据时候,高质量严谨的语料占比高,加入人工审核内容(但是这个量级太大,成本很高),训练事实性知识模型校验数据。

2、SFT(有监督微调)阶段

这个阶段主要是为了激发模型对于指令的理解,在SFT数据需要加入类似于这个问题不知道不清楚之类的回复,避免大模型在回答不知道的指令时乱回答。可以先通过SFT模型,生成一批数据人工筛选出来乱回答的问题,打上此类回复再喂入模型训练,缓解模型幻觉现象。

3、RLHF(人工反馈强化学习)阶段

使用大模型生成幻觉数据来标记为负样本,训练RM模型,在RLHF阶段让大模型学习到幻觉样本不应该生成,不断调整RM模型来抑制幻觉的产生。

4、生成阶段

设置合理的解码参数,在创造性和可控性上平衡,temperature参数越高生成创造性越好,但也越不可控,top k和top p设置也是差不多,根据不同的大模型设置个合理参数来减少幻觉生成。

通过RAG(检索增强生成)技术,通过构建本地知识库或者搜索引擎外部补充知识加入prompt中规范大模型回答,减少大模型回答偏离程度,这也是目前最为可控有机会落地减少幻觉有效的方法。

5、后处理阶段

使用小模型或者另一个大模型来检测当前大模型输出是否存在幻觉现象,目前也有论文在研究这个方向。
Improving Faithfulness in Abstractive Summarization with Contrast Candidate Generation and Selection


三、RAG方法研究工作

当模型需要模仿特定的结构、风格或格式时,微调就显得非常有用。它可以提高未经微调的模型的表现,使交互更加高效。

微调特别适用于强化模型已有的知识、调整或定制模型的输出,以及给模型下达复杂的指令。然而,因为微调阶段是不注入新知识的,且微调成本会比较高不适合在快速迭代新场景的情况下使用。

这时候RAG技术就是很好的补充,他和微调可以结合使用,微调在prompt中加入RAG召回的内容来学习回答人类指令,大大减少大模型幻觉输出。

RAG技术的优点

  • RAG 是一种检索增强技术,通过关联外部知识来提高答案的准确性并减少虚假信息的生成。相比传统语言模型只依赖训练数据,RAG 使用检索技术可以识别到最新的信息,保持回答的及时性和准确性方面具有明显优势。
  • 透明度是 RAG 的一大优点。它引用信息来源,用户可以核实答案的准确性,这增强了人们对模型输出结果的信任。此外,RAG 具备高度的定制化能力,可以根据特定领域相关的文本语料库为不同领域提供专业的知识支持。
  • 在安全性和隐私管理方面,RAG 使用数据库中设置的角色和安全控制,对数据使用有更好的控制。相比之下,经过微调的模型回答是来自于模型内部知识比较黑盒。
  • RAG 在处理大规模数据集方面更具扩展性。它无需更新所有参数和创建新的训练集,因此在经济效率方面更有优势。

大模型RAG流程

RAG基础版

Naive RAG是早期且基础的方法,ChatGPT爆火以来,langchain这种框架也应运而生,结合本地知识库让大模型指定回答业务知识,使得大模型能够落地垂直领域的多轮对话当中,极大的推动了大模型应用进展。基础的RAG方法包括传统的索引、检索和生成步骤。

索引阶段:

索引是在离线环境中从数据源获取数据并建立索引的过程。它包括以下关键步骤:

  1. **数据索引:**将原始数据清理和提取,将不同格式的文件(如PDF、HTML、Word、Markdown)转换为纯文本。
  2. **分块:**将加载的文本拆分为更小的片段。考虑到语言模型处理上下文的限制,需要将文本尽可能细分为块。
  3. **Embedding和索引创建:**这一阶段涉及使用语言模型将文本编码为向量的过程。生成的向量将在后续的检索过程中用于计算与问题向量的相似度。由于需要对大量文本进行编码,并实时对用户的提问进行编码,因此Embedding模型需要具备高速推理能力,并且模型的参数规模不宜过大。完成Embedding后,接下来是创建索引,将原始语料块和Embedding以键值对的形式存储,以便于未来进行快速且频繁的搜索。

检索阶段:

Embedding在检索阶段,根据用户的输入,使用与第一阶段相同的编码模型将查询内容转换为向量。系统会计算问题向量与语料库中的文档块向量之间的相似度,并根据相似度水平选择出与当前问题最相关的前K个文档块作为补充背景信息。这些选定的文档块将提供更多与用户查询相关的内容。

生成阶段:

在生成阶段,将给定的问题与相关文档合并成一个新的提示信息。然后,大型语言模型(LLM)被要求使用提供的信息来回答问题。根据具体任务的需求,可以选择让模型依赖自身的知识库或只基于给定的信息来回答问题。如果有历史对话信息可用,也可以将其融入提示信息中,以支持多轮对话。


目前RAG会遇到的一些挑战,如下:

**1、检索质量:**其中一个主要问题是精度不高,即检索集中的文档块并非都与查询内容相关,这可能导致信息错误或不连贯。另一个问题是召回率不佳,即未能检索到所有相关的文档块,使得大型语言模型无法获得足够的背景信息来生成答案。此外,过时信息也是一个挑战,因为数据冗余或过时可能导致检索结果不准确。

**2、回应生成质量:**最显著的问题是生成错误信息,即模型在缺乏足够上下文的情况下虚构答案。另一个问题是回答内容不相关,即模型生成的答案未能针对查询问题。此外,生成有害或存在偏见性回应的问题也需要解决。

**3、增强过程:**重要的是如何有效地融入检索到的文段上下文到当前的生成任务中。如果处理不当,生成的内容可能会显得杂乱无章。当多个检索到的文段包含相似信息时,冗余和重复成为问题,可能导致生成内容重复。此外,如何准确评估多个检索到的文段对生成任务的重要性或相关性也是具有挑战性的。增强过程需要适当评估每个文段的价值。检索到的内容可能具有不同的写作风格或语调,增强过程需要调和这些差异,以确保最终输出的一致性。最后,生成模型过度依赖增强信息的问题也需要解决,确保生成的内容不仅仅是重复了检索到的信息,而是提供新的价值或综合信息。


高级RAG

高级版的话其实就是针对基础版RAG不足的方面进行优化,比如回应生成质量和数据索引。

在回应生成质量上提出两个办法,检索预处理和检索后处理。


检索预处理:

**1、提升数据粒度:**提升数据粒度的关键在于改进文本的标准化和一致性,以确保准确的事实和丰富的上下文,从而提高 RAG 系统的性能。标准化包括剔除无关信息和特殊字符,以提高检索效率。在确保一致性方面,主要是消除术语和实体的歧义,剔除重复或冗余信息,简化检索过程。准确的事实至关重要,并应尽可能验证每项数据。为了保持上下文,可通过添加特定领域的注释和用户反馈来不断更新系统,以适应现实世界的交互上下文。考虑到时间敏感性,应定期更新过时的文档。总体而言,优化索引数据的关键是清晰度、上下文和准确性,以提高系统的效率和可靠性。以下是一些最佳实践。

**2、优化索引结构:**优化索引结构的方法包括调整数据块大小、改变索引路径和加入图结构信息。调整数据块大小旨在收集相关上下文,并减少干扰。在构建 RAG 系统时,块大小是关键参数,并可使用不同的评估框架来比较不同块的大小。LlamaIndex 利用 GPT4 对数据的保真度和相关性进行评估,并能自动评估不同块化方法的效果。跨多个索引路径查询与元数据过滤和块化方法密切相关,可能涉及同时在多个索引中进行查询。标准索引可用于特定查询,或通过使用独立索引基于元数据关键词(如"日期"索引)进行搜索或过滤。引入图结构可将实体转化为节点,并将它们之间的关系转化为关联,从而提高多跳问题的准确性。使用图数据索引能提高检索的相关性。

**3、添加元数据信息:**添加元数据信息的核心策略是将引用的元数据(如日期和用途)E到数据块中。添加诸如章节和引用小节等元数据对提高检索效率很有帮助。当索引被分割成多个块时,通过元数据进行初步筛选可以提高检索的效率和准确性。

**4、对齐优化:**对齐优化策略主要解决不同文档之间的对齐问题和差异。对齐的核心思想是引入"假设性问题",即为每篇文档创建适合回答的问题,并将这些问题与文档结合起来。这种方法有助于解决文档间的对齐问题和不一致性。

**5、混合检索:**混合检索的优势在于结合了不同检索技术的优点。它智能地融合了关键词搜索、语义搜索和向量搜索等多种技术,以满足不同类型的查询需求,确保一致地检索到最相关和内容丰富的信息。混合检索作为检索策略的重要补充,能够显著提高 RAG 流程的整体性能。


检索后处理:

  1. **重排序方法:**使用简单直接的方法将最相关的信息置于提示的前后边缘,例如通过Diversity Ranker根据文档多样性重新排序,或者使用LostInTheMiddleRanker将最佳文档交替放置在上下文窗口的开始和结束位置。
  2. **混合搜索方法:**RAG系统巧妙结合基于关键词、语义和向量的多种搜索技术,以满足不同查询类型和信息需求,并获得最相关且内容丰富的信息。
  3. **prompt压缩方法:**通过压缩无关紧要的上下文来突出关键段落,并缩短整体的上下文长度。这可通过选择性上下文方法(如Selective Context和LLMLingua)使用小型语言模型计算提示之间的互信息或困惑度来实现。
  4. **RAG pipeline优化:**通过智能结合不同的搜索技术、优化检索步骤、引入认知回溯概念、使用多样化的查询策略和Embedding式相似度,追求在RAG检索中实现效率与上下文信息丰富度的平衡。
  5. **子查询:**根据不同场景,可以采用多种查询策略,如使用LlamaIndex提供的查询引擎、树状查询、向量查询或基本的块序列查询。
  6. **StepBack-prompt方法:**StepBack-prompt方法促使大语言模型能够在处理具体案例时退一步,思考普遍概念或原则。这种方法在处理复杂的推理任务时表现出色,并与RAG流程兼容。
  7. **HyDE方法:**基于假设,通过大语言模型生成的答案在Embedding空间中可能更为接近。HyDE通过生成假设性文档(答案)并利用Embedding相似性检索与之类似的真实文档来实现。
  8. **递归检索与查询引擎:**在RAG系统中采用递归检索和高级查询引擎能够提高检索效果。递归检索通过获取小型文档块并为大语言模型提供更丰富的上下文信息来实现。

模块化RAG

  1. **搜索模块:**利用大语言模型生成的代码、查询语言等方法在语料库中进行搜索,搜索数据源包括搜索引擎、文本数据、表格数据或知识图等。
  2. **记忆模块:**利用大语言模型的记忆功能来引导信息检索,通过增强检索的生成模型创建无限记忆池,使文本更贴近数据分布。
  3. **额外生成模块:**通过大语言模型生成必要的上下文,以应对检索内容中的冗余和噪声。
  4. **任务适应模块:**调整RAG以适应各种下游任务,如使用预先构建的数据池为零样本任务选择适当的提示,或利用大语言模型生成器创建针对特定任务的检索器。
  5. **对齐模块:**通过可训练的适配器模块解决查询与文本的对齐问题,在检索器和生成器之间优化检索信息。
  6. **验证模块:**为确保检索到的信息可靠性,在检索文档后添加验证模块评估文档和查询的相关性,提升RAG的鲁棒性。

三种RAG


四、总结

RAG这种技术利用外部知识库来增强大型语言模型(LLMs)的上下文,并生成更准确的答案。RAG结合了大语言模型的参数化知识和外部的非参数化知识,减少了生成信息的错误和虚假内容,并通过检索技术获取实时信息来提高答案准确性。RAG还通过引用资料来源提高了结果的透明度和用户对结果的信任度。它还可以根据特定领域的需求定制化整合相关的文本数据。

RAG的发展可以分为三种模式:基础RAG、高级RAG和模块化RAG。基础RAG主要进行简单的"检索-阅读"操作。高级RAG在数据处理上更精细,优化了知识库索引,并采用多次或迭代的检索方法。

随着技术的发展,RAG开始整合微调等其他技术,形成了模块化RAG。这种新模式通过引入新模块使RAG过程更加丰富和灵活。


五、参考文献


本文地址:https://www.6aiq.com/article/1704787510957
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出