论文解读:迄今为止最好的 RAG 技术栈
概述
这篇文章深入探讨了 Wang 等人在 2024 年的研究,旨在为构建高效的检索增强生成(RAG)系统提供最佳实践建议。文章由 Towards AI 的联合创始人兼 CTO Louis-Francois 撰写,分析了 RAG 系统的核心组件与策略。
主要内容摘要
- 查询分类:通过分类任务决定是否需要进行检索,确保系统只在必要时检索外部数据。
- 数据分块:为数据选择合适的块大小至关重要,理想的块大小在 256 至 512 个 token 之间,有助于减少噪音和提高效率。
- 元数据与混合搜索:元数据(如标题或关键词)与混合搜索(结合语义搜索和传统关键词搜索 BM25)可显著提升检索精度。
- 嵌入模型选择:挑选适合的嵌入模型,文章推荐使用像 FlagEmbedding 这样性能与效率均衡的模型。
- 向量数据库:使用像 Milvus 这样的高性能向量数据库来处理大量检索请求,确保系统的长期稳定性。
- 查询转换:在检索前进行查询转换以提高准确性,如通过查询重写或分解复杂问题,改进系统的检索表现。
- 重新排序与文档打包:在文档检索后,通过 reranking 技术提升结果的相关性,并进行文档重新打包,以优化信息呈现。
- 摘要:生成之前进行文档摘要,有助于去除冗余信息,降低生成成本。
- 微调生成模型:通过对生成模型进行微调,提高模型处理复杂查询和去除无关信息的能力。
- 多模态检索:整合多模态技术处理图像查询,并基于类似内容进行检索,进一步提高系统的响应准确性。
意见
- Wang 等人的研究被认为是 RAG 系统的“洞察金矿”。
- 查询分类对于确定何时需要检索至关重要。
- 数据的最佳块大小介于 256 到 512 个令牌之间,但可能因数据集而异。
- 元数据和混合搜索是高效检索的首选,而不是 HyDE 等更复杂的方法。
- 建议使用 FlagEmbedding 的 LLM,因为它在性能和大小之间取得了平衡。
- Monot5 是最受欢迎的重新排名模型,因为它在性能和效率之间取得了平衡。
- 建议以“相反”的顺序重新打包文档,以改进 LLM 的生成过程。
- 像 Recomp 这样的摘要工具对于减少提示长度和成本很有价值。
- 使用相关文档和随机文档的混合来微调生成器有利于处理不相关的信息。
- 多模态检索是处理文本和图像的系统的一个重要考虑因素。
- 该论文承认了未来研究的局限性和领域,例如猎犬和发电机的联合训练。
探索每个组件
大家早上好!我是 Towards AI 的联合创始人兼首席技术官 Louis-Francois,今天,我们正在深入研究可能是最好的检索增强一代 (RAG) 技术栈——这要归功于 Wang 等人在 2024 年的一项出色研究。
这是构建最佳 RAG 系统的见解金矿,我在这里为您分解它。
那么,是什么让 RAG 系统真正成为顶级的系统呢?是组件,对吧?让我们回顾一下最好的组件以及它们的工作原理,这样您也可以使您的 RAG 系统成为顶级系统并获得多模式奖励。
图片
查询分类
让我们从 Query Classification
Wang 等人创建了 15 个任务类别,确定查询是否提供了足够的信息或是否需要检索。他们训练了一个二元分类器来分隔任务,在不需要检索的地方标记为“sufficient”,在需要检索时标记为“insufficient”。在此图像中,黄色表示不需要,红色表示去获取一些文档!
分块
接下来:分块。这里的挑战是为您的数据找到完美的数据块大小。太长了?您会增加不必要的噪音和成本。太短了?你错过了上下文。
Wang 等人发现 256 到 512 个标记之间的块大小效果最好。但请记住,这因数据而异 - 因此请务必运行您的评估!专业提示:使用 small2big(从小块开始进行搜索,然后移动到较大的块进行生成),或尝试滑动窗口以重叠块之间的标记。
元数据和混合搜索
利用您的元数据!添加标题、关键字甚至假设问题等内容。将其与 Hybrid Search
HyDE(生成伪文档以增强检索)很酷,可以带来更好的结果,但效率非常低。现在,坚持使用 Hybrid Search——它取得了更好的平衡,尤其是在原型设计方面。
嵌入模型
选择正确的 嵌入模型
你不想要打网球的足球鞋。
来自 FlagEmbedding 的 LLM 最适合这项研究——性能和大小的完美平衡。不太大,也不太小——恰到好处。
请注意,他们只测试了开源模型,因此 Cohere 和 OpenAI 被淘汰出局。否则,Cohere 可能是您最好的选择。
矢量数据库
现在是数据库。对于长期使用,Milvus
查询转换
在检索之前,您必须 转换 这些用户查询!无论是通过 查询重写 以使其清晰,还是通过查询 分解 将复杂问题分解为更小的问题并检索每个子问题,甚至生成伪文档(如 HyDE
重新排名
现在我们来谈谈 Reranking
在这项研究中,monoT5 脱颖而出,成为平衡性能和效率的最佳选择。它微调 T5 模型,以根据文档与查询的相关性对文档重新排序,确保最佳匹配优先。 RankLLaMA 总体性能最好,但 TILDEv2
文档重新打包
重新排名后,您需要进行一些 Document Repacking
综述
然后,在调用 LLM,您希望使用 Summarization
使用 Recomp
微调生成器
最后,您是否应该微调用于生成的 LLM?绝对!使用相关文档和随机文档的混合进行微调可以提高生成器处理不相关信息的能力。它使模型更加健壮,并有助于它给出更好的整体响应。论文中没有提供确切的比率,但结果很明确:微调是值得的!不过,这显然也取决于您的域。
多模态
处理图像?实施多模式检索。对于文本到图像,在数据库中查询相似图像可以加快该过程。在图像到文本中,匹配相似的图像可检索准确的预存储字幕。这一切都与接地气有关——检索真实的、经过验证的信息。
结论
简而言之,Wang 等人的这篇论文为我们提供了一个构建高效 RAG 系统的坚实蓝图。但请记住,这只是一篇论文,并未涵盖 RAG 管道的各个方面。例如,猎犬和发电机的联合训练没有被探索,这可能会释放更多的潜力。由于成本原因,他们也没有深入研究分块技术,但这是一个值得探索的方向。
我强烈建议您查看完整的论文以获取更多信息。我们最近还出版了《Building LLMs for Production》一书,其中充满了 RAG 和微调见解、技巧和实际示例,可帮助您构建和改进基于 LLM 的系统。该链接也位于下面的实体书和电子书版本的描述中。
一如既往,感谢您的阅读。如果您觉得此分析有帮助或有任何评论,请在下面的评论中告诉我,我们下次见!
引用
用于生产的构建LLMs:https://amzn.to/4bqYU9b
Wang et al., 2024 (论文参考):https://arxiv.org/abs/2407.01219
LLM(嵌入模型):https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/llm_embedder
Milvus (vector database):https://milvus.io/
Liu et al., 2024 (文档重新包装): https://arxiv.org/abs/2307.03172
Recomp (摘要工具):https://github.com/carriex/recomp
RagLlmFine Tuning人工智能嵌入
本文转载自 AI大模型世界,作者: Louis-Francois