【DAY007】RAG论文阅读

A Survey on RAG Meeting LLMs: Towards Retrieval-Augmented Large Language Models

https://arxiv.org/pdf/2405.06211

摘要

LLMs仍然有局限性,面临幻觉和过时知识的问题。RAG旨在通过检索新知识和有用的辅助知识增强LLM的生成质量。文章涵盖了三个主要的技术角度:架构、训练方式和应用;讨论了当前的局限性和未来研究的几个有前景的方向。

背景

RAG整合了来自外部数据源的信息或知识,作为输入查询或生成输出的补充。具体来说,RAG首先调用检索器从外部数据库中搜索和提取相关文档,然后将其作为上下文来增强生成过程。在实践中,RAG技术是可行且有效的,可以应用于各种生成任务,只需对检索组件进行简单的调整,只需要很少甚至不需要额外的训练。最近的研究表明,RAG不仅在知识密集型任务方面具有巨大潜力,而且在一般语言任务和各种下游应用方面也具有巨大潜力。

RA-LLMs

LLM的RAG框架由几个主要过程组成:检索、生成和增强,以及确定是否需要检索的机制。
在这里插入图片描述

1检索

给定来自LLM输入的查询,RAG中的检索过程旨在提供来自外部知识源的相关信息,这些知识源可以是开源的或闭源的。检索由几个过程组成,作为一个整体来衡量查询与数据库中文档之间的相关性,以实现有效的信息检索。检索的具体流程还取决于是否包括pre-retreival和post-retreival过程。
在这里插入图片描述

1.1检索器的类型

根据信息的编码方式,检索的类型可以分为稀疏检索和稠密检索。

  • 稀疏检索
    TF-IDF和BM25等方法通常依赖于反向索引匹配和原始数据输入。在许多研究中,BM25常被直接应用于段落级检索,以支持RAG的实现。在这种方法中,段落被表示为单词的集合,并根据词频和反向文档频率(IDF)进行排名。除了作为生成模型输入的补充,稀疏检索还被用于增强RA LLMs的上下文学习。
    优点:效率高、解释性强、资源需求低、适用于特定的领域(词汇和语句较为固定的场景)
    缺点:无法训练优化(很大程度依赖数据库质量和查询的准确性)、无法处理语义信息(只关注单词的精确匹配,无法理解词义、上下文或同义词,因此在处理复杂语义或深层次理解任务时表现不佳)、对短文本效果差(在信息量较少的端文本中效果一般)、不支持多样性检索(稀疏检索主要基于相似度评分,不能有效应对需要多样化结果的应用场景,容易出现检索结果高度相似的问题)

  • 密集检索
    将查询和文档嵌入到连续向量空间中。密集检索方法通常是可训练的,因此在适应方面具有更大的灵活性和潜力。

    • 使用生成模型的一部分作为嵌入层,有助于检索和生成任务的对齐
    • 使用双编码器(基于两个BERT的编码器),分别编码查询和文档
      通过有效的微调,双编码器结构也广泛用于基于上下文学习的RAG,如DPR模型通过微调后效果很好
    • 使用单编码器(基于一个BERT或其他序列模型)
      通过对比学习在大规模未对齐的文档上进行预训练,因此功能丰富且迁移能力强
1.2检索的粒度

检索粒度指的是对语料库进行索引时所使用的基本单元,比如文档、段落、标记(token)、实体等。不同的检索粒度会对检索系统的效率和效果产生显著影响,尤其是在RAG系统中,检索粒度的选择不仅影响到数据库的存储空间需求,还直接关系到搜索的计算成本。

  • 检索段落(Chunk):这是典型RAG系统中常用的粒度,因为段落通常包含相对完整和紧凑的信息,能够为模型提供更上下文化的知识,因此在回答问题时更加精确。

    在段落检索中,文本首先被切分为多个段落(Chunk),每个段落可能包含几句话或一个较大的语义单元。系统对这些段落进行索引,记录段落的内容以及它们在文档中的位置。不同的段落可能来自同一文档,也可能来自多个文档。 段落的分割有时是基于语义的(例如根据段落的逻辑或主题),也可以是根据固定的字数或句子数量进行划分。这种方式保证了每个段落在检索时具有相对独立的语义意义。

    检索流程

    • 查询处理:用户提出查询后,系统将查询进行向量化,生成查询的嵌入向量。查询可以是一个问题、句子或关键词短语,系统会根据其内容生成相应的向量。

    • 相似度搜索:系统通过向量数据库在段落嵌入空间中执行相似度搜索,找到与查询最相关的段落。通常,系统会返回多个与查询相似的段落以供进一步处理。

    • 段落返回或生成:找到相关段落后,系统可以将完整的段落返回给用户,或者基于这些段落生成答案。在RAG中,段落检索后,生成模型(如GPT)会使用这些段落作为上下文生成更为连贯的回答。

  • 检索标记(Token):这种粒度能够实现更快速的搜索,因为标记是更细的检索单元。然而,使用标记检索可能会增大数据库的存储压力,特别是在处理大规模语料库时。标记检索通常适用于需要发现罕见模式或处理领域外数据的场景,特别是与KNN(K-Nearest Neighbors)算法结合时,能够有效应对复杂的检索需求。

    在这种token检索的场景下,知识的存储主要分为以下几部分:

    • 原始文本存储:原始的文档、段落、句子等数据形式依然被保存,以便在检索到相关token后能够还原出完整的文本片段用于显示或生成答案。

    • 嵌入向量:每个token都被转化为一个向量,并存储在高维向量空间中,用于快速相似度计算和KNN检索。

    • 索引结构:为了提高检索效率,系统会生成倒排索引和其他数据结构,帮助快速找到特定token的位置和出现频率。

    当用户提出查询时,系统首先将查询分解为token,然后将这些token映射到嵌入空间中,得到相应的向量表示。系统会利用向量数据库进行快速的相似度搜索,查找与查询token最接近的嵌入向量。找到相关token后,系统会通过索引返回它们在原始文本中的位置,并将相关的文本片段返回给用户,或者用于进一步的生成任务(如RAG模型中的答案生成)。

  • 检索实体:通过实体来表示知识,能够对具体的概念或对象进行聚焦式的检索。这种粒度有助于结构化知识的获取,并可以在知识图谱等场景中发挥重要作用。

    在实体检索中,系统首先会从文本中识别出实体(如人名、地名、机构名、时间等),然后以这些实体为单位进行索引和检索。实体检索适用于需要处理结构化或半结构化数据的场景,如知识图谱、开放域问答系统和特定领域的知识库。

    在进行实体检索之前,系统首先通过命名实体识别技术识别文本中的实体。识别出的实体会被归类为不同的类型,以便在检索时有针对性地进行处理。例如,人名和地点名属于不同的实体类型,检索时可以根据查询中的实体类别优化检索过程。

    实体检索的知识存储形式包括以下几个部分:

    • 实体向量:每个实体被表示为一个向量,并存储在高维向量空间中,用于相似度搜索。

    • 实体属性与关系:实体的各类属性和它与其他实体的关系被结构化存储在知识库或知识图谱中。这些结构化信息帮助系统在回答查询时,能够理解并利用实体的不同属性和相互关系。

    • 原始文本或段落:虽然实体检索的核心是基于实体和知识库,但原始文本也会被保存,用于展示与实体相关的上下文。

    检索与知识使用流程

    • 实体提取:用户输入查询后,系统会首先识别查询中涉及的实体,并将这些实体提取出来。对于复杂查询,系统可能会通过NER模型识别出多个实体,并结合上下文理解查询的真实意图。

    • 实体向量搜索:识别出的实体会通过向量化映射到高维向量空间中,系统会在向量数据库中找到与这些实体最相似的其他实体。相似度搜索可以基于语义相关性或知识库中的关系来进行。

    • 基于实体关系扩展检索:系统不仅可以找到具体的实体,还可以基于知识图谱中的实体关系扩展检索范围。例如,查询“爱因斯坦”不仅会返回他本人相关的信息,还可以通过图谱关系找到与他相关的理论、研究机构等。

    • 信息返回或生成:找到相关实体后,系统会将这些实体及其属性信息返回给用户,或将这些信息作为输入,用于进一步的生成任务或答案生成。

    实体检索的优势

    • 结构化信息处理:实体检索擅长处理具有结构化或半结构化的知识,能够更高效地处理具有明确语义的信息,如特定人物、地理位置、事件等。

    • 支持复杂关系查询:实体检索通过知识图谱可以处理涉及实体关系的复杂查询,能够从单一实体扩展到与该实体相关的所有信息,适合多层次的知识需求。

    • 适合专业领域:在许多专业领域(如医学、法律等),实体往往比一般词汇更加重要,实体检索能够有效处理这些领域特有的实体和术语。

1.3Pre-retrieval和Post-retrieval的强化

基于查询的增强策略

  • Query2doc
    通过少量提示LLM生成伪文档。伪文档提供丰富的上下文信息,可以用来扩展初始查询,使得查询更加具体、明确,并帮助检索系统更好地理解用户的意图,并消除歧义。

  • HyDE(假设文档嵌入)
    通过指示LLM为给定查询生成假设文档,然后将假设文档嵌入到密集检索器中,用于指导后续的知识检索。假设文档为查询提供了额外的语义信息,帮助密集检索器获得更为精准的信息,提升了检索的效果。

  • 查询重写
    通过提示LLM对原始问题进行重写,将其转化为更有利于检索的版本,明确检索需求,从而优化检索效果。重写后的查询更容易被检索器理解和处理,减少了系统理解输入的难度,增强了输出的准确性。此外,这种方法在不同的数据集上表现出不同的适应性,具有一定的灵活性。

  • 查询增强
    将原始查询和初步生成的输出结合,形成一个新的查询,再进一步用于检索相关信息。这样可以通过外部数据库获得更多相关信息,帮助生成更准确的结果。通过将初步生成结果纳入查询过程,增强了查询词汇和语义的覆盖面,提升了检索的全面性与精确性,使得检索过程更具扩展性和鲁棒性。

基于检索后处理的增强策略

  • PRCA(可插拔奖励驱动的上下文适配器)
    在将检索器提取的top-k文档馈送到生成器之前,使用一个上下文适配器对其进行处理。该适配器通过强化学习和生成器产生的奖励信号,微调检索到的文档,使其与生成器的需求更好匹配。通过奖励驱动的机制,PRCA可以优化检索结果与生成器之间的协作,从而改善生成的质量,特别是在处理复杂文档时效果显著。

  • R2G(检索-重新排序-生成)
    通过重新排序操作,将不同检索方法所获得的文档集合重新排列并组合,整合多种检索策略的优势,确保检索结果的鲁棒性与一致性,从而提升生成阶段的输出质量。

  • BlendFilter
    结合了检索前的查询生成和检索后的知识过滤。这种方法首先混合生成不同的查询,提升检索准确性,然后过滤掉不相关或噪声较大的文档,确保仅将高质量的文档用于生成任务。

  • RECOMP(检索、压缩、预置)
    在生成上下文之前,将检索到的文档进行压缩处理,生成简明的摘要,然后再将其馈送到生成器中。通过对检索文档进行压缩,RECOMP解决了长文档导致的输入限制问题,并提高了生成任务的效率,同时减少了推理延迟。

  • 轻量级FiD模型
    首先对每个检索通道的编码向量进行压缩,然后在解码前将这些向量连接在一起,并通过重新排序确保最相关的检索结果排在前列。轻量级FiD通过压缩与排序的策略,显著减少了推理延迟,提高了生成阶段的效率,特别适合需要处理大量检索结果的任务。

1.4数据库

在RAG系统中,检索基于外部知识源,知识源可以是闭源或开源的。闭源数据库通常存储键值对,键用于相似性匹配,值通常为原始文本或令牌,典型的例子是使用维基百科文章进行编码与检索。除了通用的数据库如维基百科,还可根据具体任务定制数据库,如用于代码生成的API信息库。相比之下,使用互联网搜索引擎可以避免维护搜索引擎,同时访问更广泛且最新的知识库。这类搜索引擎经过优化,可提供高质量的结果排序,并在LLM中被广泛应用,如用于知识增强、事实核查和代理增强等功能。研究表明,在零样本任务中,互联网搜索与LLM的结合表现尤为突出。

2生成

RAG系统中的生成器设计高度依赖于具体的下游任务,主要结构包括解码器和编码器-解码器两种。像T5和BART这样的编码器-解码器模型分别处理输入和目标,通过交叉注意机制将二者连接。而解码器模型将输入和目标连接在一起,生成的表示会在网络中同时逐层构建。这些模型广泛应用于RAG系统中,生成器通过结合检索到的数据来提高生成内容的准确性和相关性。白盒生成器允许参数优化,能够更好地适应不同的检索和增强策略,从而提升生成性能。
另一方面,像GPT、Codex和Claude这样的黑盒生成器不公开内部参数,也不允许调优。这些模型只接受输入查询并输出响应。由于其规模庞大,针对特定任务对黑盒模型进行微调非常困难。因此,黑盒RA-LLM更侧重于增强输入提示,通过提供更多的知识或示例来提升生成质量。例如,训练提示检索器以提供更好的上下文学习示例,或在上下文整合之前压缩检索到的文档,以减少计算成本并减轻模型识别相关信息的负担。

3检索集成以增强生成

3.1在输入集成

集成检索到的信息或文档的一种常见方法是将它们与原始输入/查询相结合,并一同传递给生成模型。例如,In Context RALM通过将原始输入和所有检索到的文档连接成一个序列作为新的输入,但这种方法受限于输入长度,可能导致生成模型无法处理太长的输入。为了解决这个问题,FID采用独立处理每个检索到的文档的方法,避免信息丢失,并能扩展到大量上下文。类似地,Atlas和REPLUG通过并行处理查询与单个检索到的文档来实现输入层集成。
大多数基于黑盒生成模型的RAG方法都使用输入层集成,因为生成模型的中间层或输出不可访问。对于LLM,输入层集成可以将检索内容作为额外的提示或演示,而非仅仅补充原始输入。这种提示检索旨在自动找到适当的提示,引导LLM在上下文中学习或推理,提高其零样本任务能力。例如,提示检索器可以通过学习输入-输出对数据来提升生成性能。

3.2在输出集成

结合检索结果与生成结果。例如,KNN LM通过在预测时插值生成模型的下一个令牌分布和检索到的最近邻分布来实现这一点。输出层集成的优点是灵活性强,可以轻松应用于大多数生成模型,而无需额外的训练。然而,这种简单性限制了模型对检索到文本进行复杂推理的能力。为了解决这个问题,Yogatama等人提出添加门控网络来对检索数据进行后处理,从而提高性能。
在LLM中,输出层集成与输入层集成一样具有适应性。例如,REFEED提出了一种答案精炼机制,利用LLM评估检索信息,并调整生成的初始答案,以提高准确性。同样,Zhang等人提出的COMBO框架通过预训练的判别器匹配生成段落和检索段落,并通过基于解码器的融合处理得出最终答案。

3.3中间层集成

设计一个半参数化模块,通过生成模型的内部层次来集成检索结果。这种集成可能会增加额外的复杂性,但通过有效的训练,有望提升生成模型的能力。该方法引入Transformer模块,在生成过程中与检索到的密集表示交互,常见的例子包括RETRO的分块交叉注意力层和KNN增强的注意力层。这种方法克服了输入层集成的输入长度限制问题,可以高效处理大量检索到的文本块。然而,它需要对生成模型有高访问权限,对于通过推理API访问的大型语言模型,这种方法并不适用。

4RAG的必要性和频率

用不相关的背景知识不加选择地增强LLM可能会覆盖LLM已经拥有的潜在正确知识,从而导致错误的反应。因此LLM需要准确回忆先验知识,同时仅在必要时选择性地合并检索到的信息,这是实现鲁棒RAG的关键。

基于检索必要性的动态控制
大多数现有方法根据LLM的初步答案或其内部推理结果来确定检索的必要性

  • Self-RAG :通过引入特殊令牌动态评估检索必要性,避免不必要的检索
  • SKR:使用模型自身的知识指导检索,仅在必要时调用检索器
  • FLARE:根据logits动态触发检索
  • SlimPLM:使用slim代理模型检测LLM中的缺失的知识,评估检索的必要性,并在必要时重写查询

基于检索频率的控制
检索频率是决定在生成中使用检索程度的重要设计方面,极大地影响RAG模型的整体性能。检索频率控制着对检索结果的依赖程度,从而影响模型的效率和有效性。当不考虑检索的必要性时,检索频率通常是预定义和固定的,有三个常见的设置:一次检索、每token、每n个token。

  • 一次性检索:仅在生成开始时进行一次检索,适用于信息需求明确的任务,但对于需要长格式输出的任务,生成过程中需要考虑token之间的依赖关系
  • 每个token检索:为每个生成令牌进行检索,极大增强生成准确性,但计算开销较大
  • 每n个token检索:在生成过程中每隔n个令牌进行一次检索,适合长格式生成任务

5RA-LLMs的训练

根据是否需要训练,现有的RAG方法可分为两大类:无训练方法和基于训练的方法。无训练方法通常在推理时间直接利用检索到的知识,而无需通过将检索到的文本插入提示中来引入额外的训练,这在计算上是高效的。然而,一个潜在的挑战是,检索器和生成器组件没有针对下游任务进行专门优化,这很容易导致检索到的知识利用率低于最优。
根据训练策略,可以将基于训练的方法分为三类:独立训练、顺序训练、联合训练
在这里插入图片描述

5.1不训练的方法

无训练方法分为两类:基于提示工程的方法、检索引导的token生成方法

基于提示工程的方法
由于LLM的生成性能在很大程度上取决于输入查询,许多无训练的RAG方法通过细化原始提示来利用外部知识。具体来说,检索到的文本通常被用作上下文信息,并与原始提示相结合,以指导LLM的生成。例如,In Context RALM保持LLM参数不变,并在原始提示之前直接合并检索到的文档,以增强生成过程。IRCoT将思维链(CoT)生成和知识检索步骤交织在一起,与仅依赖问题作为查询的标准检索方法相比,能够为后续推理步骤检索更多相关信息。GENREAD没有从大型语料库中检索知识,而是首先提示LLM根据查询生成上下文文档,然后根据给定的上下文和问题生成答案。SKR建议指导LLM根据其内部知识确定是否可以回答给定的问题,通过有选择地调用检索器来灵活利用内部和外部知识。TOC首先检索歧义问题的相关知识,并通过将歧义问题澄清为多个消歧问题来递归构建树结构,这些消歧问题进一步聚合以生成长篇答案。

基于检索的token生成方法
除了将外部知识直接整合到原始提示中之外,还可以使用辅助信息来调整token生成过程。例如,KNN KMs首先根据给定的查询从数据存储中检索最相关的上下文,并根据距离计算邻居分布。通过插值邻居分布和原始模型的输出分布来校准输出分布。Rest建议用非参数检索数据存储替换参数草稿模型,并根据当前上下文检索相关令牌以进行推测解码。

5.2独立训练

独立训练是指将检索器和LLM训练为两个完全独立的过程,在训练过程中检索器和LLM之间没有相互作用。与无训练方法相比,通过训练LLM来利用检索到的知识或检索器来弥合信息检索和语言生成之间的差距,可以有效地提高RAG授权模型的性能。

5.3顺序训练

为了更好地增强检索器和生成器之间的协同作用,已经有几种方法来顺序训练检索器和LLM。在这些顺序训练方法中,该过程通常从检索器或生成器的独立预训练开始,之后固定预训练模块,对另一个模块进行训练。根据检索器和生成器之间的训练顺序,顺序训练可分为两类:检索器优先和LLMs优先。

检索器优先
首先训练检索模型,然后固定它。接下来利用检索到的知识训练LLM。
LLMs优先
先对LLM进行预训练,然后在训练后的LLM的监督下调整检索器。

5.4联合训练

联合训练采用端到端范式同时优化检索器和生成器。

6应用

在这里插入图片描述

6.1NLP应用
  • 问答系统
    RA-LLMs通过集成检索功能,帮助问答系统从外部知识库中获取最新和特定领域的知识,提升回答的准确性和相关性。例如,REALM通过预训练和微调阶段检索外部信息,Fusion-in-Decoder通过将支持文档与问题融合生成更精准的答案。

  • 聊天机器人
    RA-LLMs帮助聊天机器人集成外部知识,使对话更加连贯和上下文丰富。它可以从静态数据库或互联网中检索相关信息,甚至访问动态的在线内容,增强与用户的互动体验。

  • 事实验证
    RA-LLMs被用于提升事实验证的能力,通过检索外部知识增强验证的准确性。Self-RAG通过自反思机制评估检索信息的可靠性,大大提高了验证效果。

6.2下游任务
  • 推荐系统
    RA-LLMs通过结合检索和生成过程,帮助推荐系统提供更个性化和上下文相关的推荐。它可以利用来自电影、书籍数据集以及用户评论的知识,增强推荐效果,并通过强化学习结合协同信息,提供更准确的推荐。

  • 软件工程
    RA-LLMs被用于代码生成和程序修复,通过从代码库中检索相关代码片段或摘要,增强代码生成和总结功能。此外,它还在表格数据处理和Text-to-SQL语义解析方面展现出广泛的应用潜力。

6.3领域中的应用
  • 科学领域
    RA-LLMs通过检索分子结构和生物医学实体,帮助提升分子特性预测和新分子发现。此外,它还用于蛋白质表示和生成,通过检索相似蛋白质序列,增强蛋白质的功能和结构表示。

  • 金融领域
    RA-LLMs在金融领域通过从新闻平台和社交媒体中检索信息,提升金融情感分析的准确性。它还用于从金融报告(如PDF文档)中提取相关知识,并通过基于结构的文档分块方法提高输出质量,助力金融决策分析。

7展望

  • 值得信赖的RA-LLMs
    开发RA-LLMs时,系统应具备鲁棒性、公平性、可解释性和隐私性,确保它们在面对恶意干扰、隐私泄露等问题时依然可靠可信。

  • 多语言RA-LLMs
    多语言RA-LLMs通过结合多语言的知识检索与生成,增强了跨文化交流和知识共享能力,有助于打破语言障碍,为使用不同语言的用户提供支持。

  • 多模态RA-LLMs
    多模态RA-LLMs通过结合图像、视频等多种数据模态,扩展了语言生成的上下文信息,在医疗、药物发现等领域带来了更加全面和准确的应用。

  • 外部知识的质量
    提高外部知识库的质量对RA-LLMs至关重要,能够确保生成输出的可靠性和准确性,减少低质量信息的负面影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值