当前位置: 首页 > article >正文

一文读懂 RAG:LLM 借助检索打开思路

在这里插入图片描述

一、引言

在自然语言处理(NLP)领域,随着深度学习技术的飞速发展,大型语言模型(LLMs)展现出了强大的语言理解和生成能力。然而,LLMs也存在一些局限性,如容易产生幻觉、知识更新不及时等问题。检索增强生成(Retrieval-Augmented Generation,RAG)技术的出现,为解决这些问题提供了新的思路。RAG通过将外部知识数据库与LLMs相结合,使得模型在生成文本时能够参考外部的真实信息,从而提高生成内容的准确性和可靠性。本文将全面综述RAG技术,涵盖其技术原理、关键组件、训练策略以及应用场景等方面。

在这里插入图片描述

二、RAG技术原理

2.1 基本概念

RAG的核心思想是在文本生成过程中引入外部知识检索机制。当用户输入一个查询时,RAG系统首先从外部知识数据库中检索与查询相关的信息,然后将这些检索到的信息与查询一起输入到语言模型中,模型根据这些信息生成最终的回答。这种方式使得语言模型能够利用外部知识,避免凭空生成可能不准确的内容。

2.2 系统架构

RAG系统主要由三个关键组件组成:检索器(Retriever)、生成器(Generator)和检索融合模块(Retrieval Fusions)。检索器负责从外部知识库中检索与输入相关的信息;生成器基于输入和检索到的信息生成文本;检索融合模块则负责将检索到的知识有效地整合到生成模型中,以提高生成性能。

三、关键组件技术

3.1 检索器(Retriever)

3.1.1 构建阶段
  • 分块语料库(Chunking Corpus)
    • 固定长度分块:通过设定长度参数顺序地分割文档。例如,将一篇文档按照每512个字符为一块进行分割,这种方式简单直接,但可能会在语义边界处截断文本。
    • 基于语义的分块:根据语义标志(如句号、新行字符等)切割文档。这样可以确保每个分块在语义上相对完整,比如将一篇新闻文章按照段落进行分割,每个段落作为一个分块,更有利于后续的语义理解和检索。
    • 基于内容的分块:根据文档的结构特征(如电子病历的章节、编程代码的功能块等)进行分割。以电子病历为例,将病历中的症状描述、检查结果、诊断意见等不同部分分别作为独立的分块,便于针对不同内容进行精准检索。
  • 编码块(Encoding Chunks)
    • BERT及其变体:如RoBERTa、DistilBERT、ELECTRA等,它们能够生成密集的语义嵌入。以BERT为例,它通过多层Transformer架构对文本进行编码,将每个词转化为一个固定维度的向量表示,这些向量能够捕捉词与词之间的语义关系,从而为后续的检索提供语义基础。
    • Siamese Encoders:设计用于学习输入之间相似性的神经网络,如DPR(Dense Passage Retrieval)、SimCSE。DPR通过分别对查询和文档进行编码,然后计算它们之间的相似度,能够有效地从大量文档中检索出与查询相关的内容。
    • LLM - based Encoders:利用大型语言模型的表示能力,如text - embedding - ada - 002、bge - embedding。这些基于LLM的编码器能够更好地理解文本的上下文和语义,生成更具表现力的嵌入向量。
    • 稀疏编码:如词袋模型(BoW)、TF - IDF,通过高维向量表示文本,其中大部分元素为零。例如,BoW模型将文本中的每个词作为一个维度,词在文本中出现的次数作为该维度的值,这样就可以将文本转化为一个向量,但这种表示方式忽略了词的顺序和语义关系。
    • 密集编码:使用深度神经网络模型生成向量,每个维度都可以捕捉语义特征。与稀疏编码不同,密集编码通过复杂的神经网络结构,如Transformer,学习文本的语义表示,使得向量中的每个维度都蕴含着丰富的语义信息。
  • 索引构建(Building the Index)
    • 选择相似性度量(Choice of Similarity Metrics):常用的相似性度量有余弦相似度、欧几里得相似度、曼哈顿距离、雅卡尔相似度等,用于衡量查询嵌入和块嵌入之间的相关性。例如,余弦相似度通过计算两个向量之间的夹角余弦值来衡量它们的相似程度,值越接近1表示越相似。
    • 降维(Dimension Reduction on Embeddings)
      • 主成分分析(PCA):一种统计技术,用于将原始数据转换为新坐标系,同时保留最重要的特征。例如,将一个高维的文本向量通过PCA转换为低维向量,去除数据中的噪声和冗余信息,提高检索效率。
      • 局部敏感哈希(LSH):通过将数据映射到桶中来显著降低维度,同时保留原始输入数据的相似性。LSH将相似的向量映射到同一个桶中,在检索时只需在同一桶内进行相似度计算,大大减少了计算量。
      • 乘积量化(PQ):将高维空间划分为更小的、独立量化的子空间。PQ通过将高维向量分解为多个低维向量,并对每个低维向量进行量化,从而实现降维和快速检索。
    • 高级ANN索引(Advanced ANN Indexing)
      • IVFPQ:结合倒排文件系统和乘积量化,用于高效和可扩展的ANN搜索。IVFPQ首先通过倒排文件系统快速定位到可能包含相似向量的聚类,然后在聚类内使用乘积量化进行精确搜索,提高了搜索的效率和准确性。
      • HNSW:使用分层图结构在高维空间中高效执行ANN搜索。HNSW通过构建一个分层的图结构,将相似的向量连接在一起,在搜索时可以沿着图的边快速找到最相似的向量。
      • 基于树的索引:如KD - Trees、Ball Trees和VP - Trees,用于组织高维向量。KD - Trees通过不断地将空间划分为两个子空间,将向量组织成树形结构,在检索时可以通过树形结构快速定位到可能包含相似向量的区域,减少搜索范围。
    • 构建数据存储(Building the Datastore with Key - Value Pairs):使用专门的数据库(如LMDB或RocksDB)存储和管理数据,以支持高效的检索和数据持久性。最近的一些工作提出了各种最先进的向量数据库,包括索引和数据存储,例如Milvus、FAISS、LlamaIndex等。这些向量数据库针对向量的存储和检索进行了优化,能够快速地存储和查询大规模的向量数据。
3.1.2 查询阶段
  • 编码查询(Encoding Queries):使用与构建检索器时相同的编码器对查询进行编码,确保查询嵌入与检索器的嵌入空间一致。例如,如果在构建检索器时使用了BERT模型对文档进行编码,那么在查询阶段也使用BERT模型对用户输入的查询进行编码,这样才能保证查询和文档的向量表示在同一语义空间中,从而进行有效的相似度计算。
  • 近似最近邻搜索(ANN Search):利用预构建的索引和数据存储执行近似最近邻搜索,找到与查询最相似的数据。搜索过程涉及比较查询嵌入与聚类嵌入,选择候选聚类,然后在每个聚类内执行产品量化,找到最近邻。例如,在使用IVFPQ索引时,首先通过倒排文件系统找到与查询向量最相似的聚类,然后在该聚类内使用乘积量化找到最接近的向量。
  • 索引搜索(Indexing Search):搜索预构建的索引,找到k个最近邻,并返回这些最近邻的唯一标识符。例如,在使用HNSW索引时,通过分层图结构快速找到与查询向量最相似的k个节点,这些节点的标识符就是最近邻的唯一标识符。
  • 数据存储检索(Datastore Retrieval):根据最近邻的唯一标识符从数据存储中获取相应的值。例如,在使用Milvus向量数据库时,通过查询到的唯一标识符可以从数据库中快速获取对应的文档内容。
  • 后处理(Post - Processing)
    • 重排序(Reranking):根据任务特定的目标重新排序检索到的知识,以提高相关性。例如,在信息检索任务中,可以使用学习到的排序模型对检索到的文档进行重新排序,将与用户查询最相关的文档排在前面。
    • 重要性加权(Importance Weighting):为检索到的知识分配重要性权重,过滤掉不太相关的上下文。例如,根据文档与查询的相似度、文档的权威性等因素为每个检索到的文档分配一个权重,只保留权重较高的文档作为后续生成的输入。

3.2 检索融合(Retrieval Fusions)

检索融合是将检索到的知识整合到生成模型中的关键环节,根据融合方式的不同,可以分为以下几类:

3.2.1 基于查询的融合(Query - based Fusion)
  • 文本连接(Text Concatenation):将检索到的文本与查询文本直接连接。例如,当用户查询“苹果公司的最新产品是什么”时,检索到相关的新闻报道,将报道内容与查询直接拼接在一起,然后输入到生成模型中,模型根据拼接后的文本生成回答。
  • 特征连接(Feature Concatenation):将检索到的文本编码成特征向量后与查询特征向量合并。首先使用编码器将检索到的文本和查询分别编码成特征向量,然后将这两个向量在维度上进行拼接,形成一个新的特征向量,作为生成模型的输入。
  • FID:一种特征融合方法,将检索到的文本编码为稀疏或密集表示,并将连接的特征作为输入。FID通过特定的编码方式将检索到的文本转化为特征表示,然后与查询特征进行连接,为生成模型提供更丰富的信息。
3.2.2 潜在融合(Latent Fusion)
  • 基于注意力的融合(Attention - based Fusion):使用交叉注意力机制将检索到的知识嵌入到模型的隐藏状态中。例如,在Transformer架构中,通过引入交叉注意力模块,使得模型在生成文本时能够关注检索到的知识,将其有效地融入到生成过程中。
  • RETRO:一种使用检索增强的预训练语言模型,引入了一个新的交叉注意力模块。RETRO通过在预训练阶段就考虑检索到的知识,使得模型在生成时能够更好地利用外部信息,提高生成的准确性和连贯性。
  • 加权添加(Weighted Addition):通过学习权重将检索到的知识嵌入以加权的方式添加到模型的隐藏状态中。模型会根据任务的需求和检索到的知识的相关性,自动学习每个知识嵌入的权重,然后将它们加权添加到隐藏状态中,以调整模型的表示。
3.2.3 基于对数的融合(Logits - based Fusion)
  • 集成融合(Ensemble - based Fusion):将检索到的知识的对数与模型输出的对数结合起来,作为集成预测的一部分。例如,在语言模型生成文本时,将检索到的知识对应的对数概率与模型自身生成的对数概率进行融合,通过加权平均等方式得到最终的预测结果。
  • kNN - LM和kNN - MT:利用最近邻模型的对数进行语言模型和机器翻译的增强。kNN - LM通过在训练数据中找到与当前输入最相似的邻居,并利用这些邻居的对数概率来调整语言模型的输出,从而提高语言模型的性能;kNN - MT则将这种方法应用于机器翻译任务中,通过参考最近邻的翻译结果来改进当前的翻译。
  • 校准融合(Calibration - based Fusion):使用检索到的知识的对数对模型的预测进行校准或调整。例如,根据检索到的知识的可信度,对模型生成的预测结果进行调整,使得结果更加准确和可靠。

3.3 生成器(Generator)

3.3.1 生成器类型
  • 默认生成器(Default Generators):包括大多数预训练/微调的大型语言模型,如GPT系列、Mistral模型和Gemini系列模型。这些模型在大规模的语料上进行预训练,学习到了丰富的语言知识和语义表示,能够根据输入生成自然流畅的文本。
  • 检索增强生成器(Retrieval - Augmented (RA) Generators):这些是包含融合检索信息模块的预训练/微调生成器,例如RETRO和EncDec。RETRO通过引入检索增强机制,在生成文本时能够参考外部知识,减少幻觉问题;EncDec则通过将检索到的信息与编码器和解码器进行有效融合,提高了生成文本的质量和准确性。
3.3.2 生成器的功能与架构

生成器负责生成响应或进行预测,它们通常基于输入和相应的检索结果来生成文本。生成器通常采用或修改基于Transformer的架构,专注于解码器模块,包括注意力模块和前馈网络模块。在Transformer架构中,解码器通过自注意力机制关注输入文本的不同部分,同时通过交叉注意力机制关注检索到的知识,然后通过前馈网络对这些信息进行处理,最终生成输出文本。例如,GPT - 3模型就是基于Transformer架构的生成器,它在生成文本时,通过多层的解码器和注意力机制,能够根据输入的提示生成连贯、有逻辑的文本。

四、RAG训练策略

4.1 不更新数据存储的RAG训练

在这种训练策略下,只更新RAG中每个模块的可训练参数,数据存储中的知识保持不变。例如,在训练一个基于BERT检索器和GPT - 2生成器的RAG系统时,通过在特定的任务数据集上进行训练,调整BERT检索器的参数以提高检索的准确性,同时调整GPT - 2生成器的参数,使其能够更好地利用检索到的信息生成合适的回答。在这个过程中,数据存储中的文档和索引不会被更新,这样可以保证训练的稳定性和可重复性。

4.2 更新数据存储的RAG训练

这种训练策略允许在训练过程中更新数据存储。当有新的数据加入时,需要重新对数据进行分块、编码、构建索引等操作,并将新的数据存储到数据存储中。同时,模型的参数也需要根据新的数据进行调整。例如,在一个实时新闻问答系统中,随着新的新闻文章不断发布,需要将这些新文章加入到数据存储中,并重新训练RAG系统,使得模型能够根据最新的新闻信息回答用户的问题。这种训练策略能够使RAG系统适应不断变化的数据,但也增加了训练的复杂性和计算成本。

五、RAG的应用场景

5.1 信息检索与问答系统

在信息检索和问答系统中,RAG可以显著提高回答的准确性和可靠性。例如,在智能客服系统中,当用户提出问题时,RAG系统可以从知识库中检索相关的解答信息,并结合这些信息生成回答,避免了客服人员手动查找答案的繁琐过程,同时也提高了回答的质量和效率。又如,在学术问答系统中,RAG可以从学术文献数据库中检索相关的研究成果,为用户提供准确的学术知识解答。

5.2 文档生成与摘要

在文档生成和摘要任务中,RAG可以利用外部知识生成更丰富、更准确的内容。例如,在新闻报道生成中,RAG可以从多个新闻源中检索相关的事件信息,然后生成一篇完整的新闻报道,包括事件的背景、经过和影响等方面。在文档摘要任务中,RAG可以根据文档的内容和检索到的相关信息,提取出文档的关键要点,生成简洁明了的摘要。

5.3 智能写作辅助

RAG可以作为智能写作辅助工具,帮助用户生成高质量的文本。例如,在论文写作中,RAG可以检索相关的研究文献,为用户提供参考资料和引用建议,同时还可以根据用户输入的内容生成段落大纲和具体的文字表述,提高论文写作的效率和质量。在商业文案写作中,RAG可以根据产品信息和市场需求,生成吸引人的广告文案和宣传语。

5.4 知识图谱补全与推理

RAG可以与知识图谱相结合,用于知识图谱的补全和推理。通过从文本数据中检索相关信息,并将这些信息与知识图谱中的现有知识进行融合,可以发现知识图谱中缺失的关系和实体,从而实现知识图谱的补全。同时,RAG还可以利用知识图谱中的知识和检索到的文本信息进行推理,回答一些复杂的问题,例如在医疗领域,根据患者的症状、病史和医学知识图谱,结合相关的医学文献检索结果,进行疾病诊断和治疗方案推荐。

六、挑战与展望

6.1 挑战

  • 检索效率与准确性的平衡:在大规模数据场景下,如何在保证检索效率的同时提高检索的准确性是一个关键挑战。随着数据量的增加,检索的计算成本会急剧上升,而过于追求效率可能会导致检索结果的准确性下降。

  • 知识融合的有效性:如何将检索到的知识有效地融合到生成模型中,以提高生成文本的质量和可靠性,仍然是一个有待解决的问题。不同的融合方法在不同的任务和数据上表现各异,需要进一步研究和优化。

  • 数据质量与更新:RAG系统依赖于高质量的数据,数据的噪声、错误和不完整性会影响检索和生成的效果。同时,如何及时更新数据以保证系统的时效性也是一大难题。新的数据需要经过处理和整合才能融入到现有系统中,这一过程需要耗费大量的时间和资源,并且可能会引入新的问题,如数据冲突和版本不一致等。

  • 模型的可解释性:尽管 RAG 技术在性能上有一定提升,但模型的可解释性仍然较差。在实际应用中,用户往往难以理解模型为什么会生成特定的回答,这对于一些需要透明度和可靠性的应用场景(如医疗和法律)来说是一个重要的限制因素。

6.2 展望

  • 多模态融合:未来的 RAG 技术有望融合多模态信息,如图像、音频和视频等,进一步丰富模型的输入和知识来源。例如,在教育领域,结合图像和视频资料的检索与文本生成,可以为学生提供更加生动和全面的学习体验;在智能设计领域,融合图像和文本信息可以辅助设计师更高效地完成创意和设计工作。
  • 强化学习与自适应学习:利用强化学习技术,使 RAG 系统能够根据用户反馈和任务表现自动调整检索和生成策略,实现自适应学习。通过不断优化模型的行为,提高系统在不同任务和场景下的性能,更好地满足用户的需求。例如,在智能对话系统中,根据用户对回答的满意度来动态调整检索和生成的参数,从而提供更符合用户期望的回答。
  • 模型压缩与高效计算:研究更加高效的模型压缩技术和计算方法,降低 RAG 系统的计算成本和资源需求。这将有助于推动 RAG 技术在资源受限的设备和环境中的应用,如移动设备和边缘计算场景。例如,开发轻量化的检索器和生成器模型,或者采用分布式计算和云计算技术,实现 RAG 系统的高效运行。
  • 跨领域应用拓展:随着 RAG 技术的不断发展,其应用领域将进一步拓展到更多的行业和领域。除了目前已经取得一定成果的信息检索、写作辅助和问答系统等领域外,在金融、医疗、制造等行业也将发挥更大的作用。例如,在金融领域,用于市场分析和投资决策;在医疗领域,辅助疾病诊断和治疗方案制定;在制造领域,优化生产流程和产品设计。

七、结论

检索增强生成(RAG)技术作为自然语言处理领域的重要创新,为解决大型语言模型的固有局限性提供了有效的途径。通过整合外部知识检索和生成模型,RAG 在提高文本生成的准确性、可靠性和知识更新能力方面展现出了巨大的潜力。


http://www.kler.cn/a/531312.html

相关文章:

  • Docker入门篇(Docker基础概念与Linux安装教程)
  • 【C++】P1765 手机
  • 2025/2/3 云服务器数据库与idea相连
  • 深入理解linux中的文件(上)
  • 【小白学AI系列】NLP 核心知识点(六)Softmax函数介绍
  • .Net / C# 分析文件编码 并将 各种编码格式 转为 另一个编码格式 ( 比如: GB2312→UTF-8, UTF-8→GB2312)
  • 响应式编程与协程
  • Hot100之图论
  • 02 使用 海康SDK 对人脸识别设备读取事件
  • ubuntu18.04环境下,Zotero 中pdf translate划线后不翻译问题解决
  • DeepSeek辅助学术写作关键词选取
  • Kali linux 下载与快捷安装
  • 如何通过防关联技术有效避免账号被封?
  • 大数据治理体系构建与关键技术实践
  • 关于PIP更新技巧的DeepSeek R1的推理记录
  • Chromium132 编译指南 - Android 篇(四):配置 depot_tools
  • Pandoc, Zotero, JabRef 管理论文引用,生成参考文献 | 撰写论文 paper
  • 【C++】static关键字
  • WAWA鱼2024年终总结,关键词:成长
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.15 结构化数组:处理异构数据的瑞士军刀
  • centos如何压缩zip
  • 【C++】P1765 手机
  • 大模型微调技术总结及使用GPU对VisualGLM-6B进行高效微调
  • 01-Java基础语法
  • C++泛型编程指南08 auto decltype
  • ZK-ALU-在有限域上实现左移