2026年7月2日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

【查漏补缺】10个关于RAG的冷知识,你知道几个?

发布日期:2024-07-25 08:40:54 浏览次数: 3651

1. 什么是RAG(retrieval-augmented-generation)技术?

RAG(Retrieval-Augmented Generation)技术是一种结合信息检索和生成模型的混合方法,旨在提高文本生成任务的质量和准确性。具体来说,RAG将检索(Retrieval)和生成(Generation)两个步骤融合在一起:

检索阶段(Retrieval Stage):在生成文本之前,系统首先从一个大型文档库中检索出与输入查询最相关的文档或段落。这一步通常使用信息检索技术,例如基于TF-IDF或BM25的传统方法,或者使用更现代的基于深度学习的检索模型。

生成阶段(Generation Stage):生成模型会将输入查询和检索到的文档或段落作为上下文,生成最终的回答或文本。这通常使用预训练的大型语言模型(如GPT-3或BERT)的生成能力。

2. RAG是谁提出来的?

现在流行的基于embedding检索的RAG技术是在2020年由Meta提出:https://arxiv.org/abs/2005.11401v4

论文提到:将预训练的检索器(查询编码器 + 文档索引)与预训练的 seq2seq 模型(生成器)相结合,并进行端到端微调。对于查询 x,我们使用最大内积搜索 (MIPS) 来查找前 K 个文档 z。对于最终预测 y,我们将 z 视为一个潜在变量,并在给定不同文档的情况下对 seq2seq 预测进行边缘化。

但只探索了开放领域的抽取式问答。在这里,将混合参数和非参数内存引入“NLP的主力”,即序列到序列(seq2seq)模型。

通过通用微调方法赋予预训练的参数化记忆生成模型非参数记忆,我们称之为检索增强生成 (RAG)。我们构建了 RAG 模型,其中参数存储器是预训练的 seq2seq 转换器,非参数存储器是 Wikipedia 的密集向量索引,可通过预训练的神经检索器访问。

将这些组件组合在一个端到端训练的概率模型中(图 1)。检索器(Dense Passage Retriever [ 26],以下简称DPR)提供以输入为条件的潜在文档,然后seq2seq模型(BART [32 ])将这些潜在文档与输入一起进行条件以生成输出。

用 top-K 近似将潜在文档边缘化,无论是在每个输出的基础上(假设同一个文档负责所有令牌)还是基于每个令牌(其中不同的文档负责不同的令牌)。与 T5 [51] 或 BART 一样,RAG 可以在任何 seq2seq 任务上进行微调,从而共同学习生成器和检索器。

3. RAG有什么优势?

RAG的主要优势在于它能够利用外部知识库中的信息,生成更准确和信息丰富的回答。相比于仅依赖预训练语言模型的生成方法,RAG在处理需要精确事实和详细信息的任务时表现得更好。

以下是RAG技术的一些关键特性:

增强上下文理解:通过检索相关文档,RAG能更好地理解输入查询的上下文,生成更加相关和有用的回答。

提高生成准确性:利用检索到的精确信息,减少了生成模型产生错误或不准确内容的可能性。

多领域适用性:RAG可以应用于各种任务,如问答系统、对话生成、内容摘要等。

比较形象的说法是:开卷考试(Open book)。

4. RAG的主要挑战有哪些?

RAG(Retrieval-Augmented Generation)技术在提升文本生成任务的质量和准确性方面展现了巨大潜力,但也面临一些主要挑战:

a. 检索质量:检索阶段的质量直接影响生成的结果。如果检索到的文档或段落不相关或包含错误信息,会导致生成模型生成不准确的回答。

b. 检索与生成的整合:如何高效地将检索到的信息与生成模型整合起来是一个复杂的问题。需要确保检索信息的内容被生成模型充分理解和利用,而不是简单地拼接或引用。

c. 计算资源需求:RAG方法通常需要大量的计算资源,因为它结合了信息检索和大型语言模型的生成能力。特别是在实时应用中,需要快速检索和生成结果,对硬件和算法的性能要求很高。

d. 上下文一致性:确保生成的文本在上下文中保持一致是一个挑战。检索到的多个文档可能会包含相互矛盾的信息,生成模型需要有效地筛选和整合这些信息,避免生成混淆或矛盾的内容。

e. 信息过载:当检索到大量相关文档时,如何从中提取最有用的信息是一个难题。生成模型可能会受到信息过载的影响,难以决定哪些信息最为重要和相关。

f. 更新和维护:知识库需要定期更新以保持最新和准确。对于RAG系统来说,维护一个不断更新和扩展的知识库是必要的,但这也增加了系统的复杂性和管理难度。

g. 安全性和隐私:在处理涉及敏感或私人信息的任务时,RAG系统必须确保信息检索和生成过程中的数据安全和隐私保护,避免泄露用户的敏感信息。

h. 多语言支持:处理多语言任务是另一个挑战。RAG系统需要在检索和生成阶段都能有效地支持和处理多种语言,确保生成内容的准确性和流畅性。

i. 评估与调试:对于RAG系统的评估和调试较为复杂,因为需要同时评估检索和生成两个阶段的表现。如何制定有效的评估指标来衡量系统的整体性能是一个难题。

j. 响应时间:实时应用对响应时间要求较高,而RAG系统的两阶段处理方式可能会导致较长的延迟。优化系统的响应速度以满足实际应用需求是一个重要挑战。

尽管RAG技术面临这些挑战,它仍然代表了文本生成技术的一个重要进步,通过不断的研究和改进,这些挑战有望得到解决,从而进一步提升RAG系统的性能和实用性。

5. 如何来实现RAG?

典型的 RAG 应用程序有两个主要组件:

索引:用于从源引入数据并对其进行索引的管道。这通常发生在离线状态。

检索和生成:实际的 RAG 链,它在运行时接受用户查询并从索引中检索相关数据,然后将其传递给模型。

第一步:索引

  1. 加载:首先我们需要加载数据。这是使用 DocumentLoaders 完成的。


  2. 拆分:文本拆分器将大 Documents 块拆分为更小的块。这对于索引数据和将数据传递到模型都很有用,因为大块更难搜索,并且不适合模型的有限上下文窗口。


  3. 存储:我们需要某个地方来存储和索引我们的拆分,以便以后可以搜索它们。这通常是使用 VectorStore 和 Embeddings 模型完成的。

第二步:检索和生成

检索:给定用户输入,使用 Retriever 从存储中检索相关拆分。

生成:ChatModel / LLM 使用包含问题和检索数据的提示生成答案

6. RAG开发需要GPU吗?

是否需要GPU,首先需要分析一下哪些地方计算量比较大:

本地数据的预处理,Embedding处理(需要Embedding模型): 

计算量较大,但一次处理后可以反复使用。

数据检索: 计算量可控,学习用可以使用使用较小的数据。

LLM处理:计算量大,并且需要反复使用(通常建议使用7B,14B以上模型)。也可以使用商用大模型的API。

7. RAG和语义搜索有什么区别?

语义搜索可以提高 RAG 结果,适用于想要在其 LLM 应用程序中添加大量外部知识源的组织。现代企业在各种系统中存储大量信息,例如手册、常见问题、研究报告、客户服务指南和人力资源文档存储库等。上下文检索在规模上具有挑战性,因此会降低生成输出质量。

语义搜索技术可以扫描包含不同信息的大型数据库,并更准确地检索数据。例如,他们可以回答诸如 “去年在机械维修上花了多少钱?”之类的问题,方法是将问题映射到相关文档并返回特定文本而不是搜索结果。然后,开发人员可以使用该答案为 LLM 提供更多上下文。

RAG 中的传统或关键字搜索解决方案对知识密集型任务产生的结果有限。开发人员在手动准备数据时还必须处理单词嵌入、文档分块和其他复杂问题。相比之下,语义搜索技术可以完成知识库准备的所有工作,因此开发人员不必这样做。它们还生成语义相关的段落和按相关性排序的标记词,以最大限度地提高 RAG 有效载荷的质量。

8. 如何快速实现一个RAG?

快速实现一个RAG(Retrieval-Augmented Generation)系统可以遵循以下步骤。这里提供了一个简化的流程,从基础准备到实现,再到测试和优化:

  1. 准备环境,安装依赖:确保你有一个运行深度学习框架(如PyTorch或TensorFlow)的环境,并安装相关的库,如transformers、faiss(用于高效检索)等。

pip install torch transformers faiss-cpu

b. 数据准备

语料库:收集和准备你的文档或数据集。这些数据将用于检索部分。

索引构建:使用faiss等工具创建一个索引,以便快速检索相关的文档。

c. 模型选择和加载

选择模型:选择一个适合的预训练语言模型,比如BERT、GPT-3或T5。Hugging Face的transformers库提供了许多预训练模型。

加载模型:使用transformers库加载预训练的生成模型和编码器。

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
tokenizer = AutoTokenizer.from_pretrained("facebook/bart-large")model = AutoModelForSeq2SeqLM.from_pretrained("facebook/bart-large")


d. 实现检索功能

文档编码:将你的文档编码为向量,并存储在索引中。

import faissimport numpy as np
# Encode documentsdef encode_documents(documents, model, tokenizer):inputs = tokenizer(documents, return_tensors="pt", truncation=True, padding=True)with torch.no_grad():embeddings = model.get_encoder()(inputs['input_ids']).last_hidden_state.mean(dim=1)return embeddings.numpy()
# Example documentsdocuments = ["Document 1 text...", "Document 2 text..."]document_embeddings = encode_documents(documents, model, tokenizer)
# Create an indexdimension = document_embeddings.shape[1]index = faiss.IndexFlatL2(dimension)index.add(document_embeddings)

e. 实现生成和检索

检索文档:根据用户输入检索相关文档。

def retrieve_documents(query, index, model, tokenizer):query_embedding = encode_documents([query], model, tokenizer)distances, indices = index.search(query_embedding, k=5)# Retrieve top 5 documentsreturn indices

生成回答:结合检索到的文档生成回答。

def generate_answer(query, retrieved_docs, model, tokenizer):context = " ".join([documents[i] for i in retrieved_docs])input_text = f"Context: {context} Question: {query}"inputs = tokenizer(input_text, return_tensors="pt")outputs = model.generate(inputs['input_ids'])answer = tokenizer.decode(outputs[0], skip_special_tokens=True)return answer

f. 集成与测试

集成系统:将检索和生成步骤结合起来,创建一个完整的RAG系统。

测试和优化:对系统进行测试,检查其性能和准确性。根据反馈优化模型和检索机制。

g. 部署

应用部署:将你的RAG系统部署到实际环境中,提供API接口或集成到现有应用。

这个流程涵盖了从准备环境、数据、模型选择、检索、生成到测试和部署的关键步骤,帮助你快速实现一个RAG系统。根据实际需求,你可以调整和优化各个环节。

9. RAG都有哪些优化技巧?

优化RAG(Retrieval-Augmented Generation)模型可以显著提高其性能和效率。以下是一些常见的优化技巧:

a. 检索优化

  • 索引结构选择:使用高效的索引结构,如FAISS或Annoy,以加速文档检索。根据数据的性质选择合适的索引类型,如平面索引、倒排索引或树状索引。

  • 文档编码优化:使用更高效的编码方式,减少文档嵌入的维度,同时尽量保留语义信息。例如,可以尝试使用低精度浮点数(如FP16)来表示嵌入。

  • 检索阈值调整:调整检索时的阈值或检索数量,以平衡精度和召回率。过高的阈值可能会错过相关文档,过低的阈值可能会增加不相关文档的数量。

b. 生成优化

  • 生成策略调整:使用不同的生成策略,如搜索(beam search)、温度采样(temperature sampling)或顶级采样(top-k sampling),来平衡生成文本的质量和多样性。

  • 生成模型微调:根据特定领域的数据对生成模型进行微调,使其更好地适应任务和领域的需求。这可以通过转移学习来实现。

c. 模型参数优化

  • 精度优化:使用低精度计算(如混合精度训练)来加速训练和推理过程,同时减少内存占用。

  • 剪枝与量化:对模型进行剪枝(pruning)和量化(quantization),减少模型的参数数量和计算量。这有助于提高模型推理速度和降低计算资源需求。

d. 数据优化

  • 高质量训练数据:确保检索和生成阶段使用的数据质量高,尤其是在构建文档索引和生成回答时。清理和预处理数据,以减少噪声。

  • 数据增强:通过数据增强技术生成更多的训练样本,提高模型的鲁棒性。例如,可以使用同义词替换、数据扩充等技术来增强训练数据。

e. 系统架构优化

  • 分布式计算:在分布式环境中运行模型,使用多个GPU或TPU进行并行计算,显著提高训练和推理速度。

  • 缓存机制:实现缓存机制,缓存频繁检索的文档或计算结果,减少重复计算,提高系统响应速度。

f. 用户交互优化

  • 动态调整:根据用户的反馈和实际应用场景动态调整检索和生成策略。例如,可以使用在线学习的方法不断优化模型。

  • 界面设计:设计直观的用户界面和交互机制,以提高用户体验,确保用户能够高效地获取所需信息。

g. 模型融合

  • 多模型融合:将多个检索和生成模型结合起来,利用模型的互补性提高整体性能。例如,结合不同的检索模型或生成模型来获得更准确的回答。


通过这些优化技巧,可以提高RAG系统的性能,增强检索和生成的效率,从而为用户提供更高质量的回答。每项优化措施都应根据具体的应用场景和需求来选择和调整。

10. RAG未来如何发展?

RAG(Retrieval-Augmented Generation)技术在未来的发展将会受到多个因素的推动,包括技术创新、应用需求的变化和数据处理能力的提升。

a. 更高效的检索机制

  • 深度检索:未来的RAG系统将可能利用更先进的深度学习技术来改进检索机制,例如使用更复杂的神经网络结构来提高检索的准确性和效率。

  • 跨模态检索:结合文本、图像、音频等多种数据类型进行检索,从而实现更加全面地理解和生成。例如,通过融合文本和视觉信息,可以生成更具上下文理解的回答。

b. 更智能的生成模型

  • 自适应生成:生成模型将越来越智能,能够根据上下文和用户反馈自适应调整生成策略。例如,模型可以根据用户的实时反馈自动优化生成内容的风格和语气。

  • 多模态生成:不仅生成文本,还能够生成图像、音频或视频内容。例如,结合文本生成与图像生成,提供更丰富的响应。

c. 更高效的模型训练和推理

  • 模型压缩与加速:通过技术如量化、剪枝和知识蒸馏,使得RAG模型更小、更快,从而降低计算资源的需求并提高部署效率。

  • 分布式计算:在大规模分布式系统中训练和部署RAG模型,利用并行计算和分布式存储提高训练和推理速度。

d. 更精细的数据管理

  • 动态更新:未来的RAG系统可能会集成动态数据更新机制,使得模型能够实时更新检索库和生成模型,以保持最新的知识和信息。

  • 个性化数据:根据用户的个人数据和历史记录进行个性化检索和生成,提高响应的相关性和准确性。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅