在探索搜索技术近十年后,我可以诚实地说,没有什么比最近兴起的检索增强一代 (RAG) 更具颠覆性了。该系统使用矢量搜索和生成式人工智能,基于可信数据生成直接答案,正在彻底改变搜索和信息检索。
在搜索项目中,对 RAG 的试验让我考虑了它的潜在增强功能;我认为RAG仍然太有限,无法满足用户的需求,需要升级。
个人搜索系统(Project Ramble),黑曜石笔记与 GPT-3 相结合的矢量搜索连接起来。图片由作者提供。
不要误会我的意思,RAG 非常出色,并且绝对是信息检索技术朝着正确方向迈出的一步。自 2021 年 GPT-2 出现以来,我一直在使用 RAG,当我从自己的笔记或工作文档中查找有价值的信息时,它极大地帮助提高了我的工作效率。RAG有很多优点:
1)矢量搜索融合:RAG 通过将矢量搜索功能与生成模型集成,引入了一种新颖的范例。这种融合使得大型语言模型 (LLMs) 能够生成更丰富、更具上下文感知的输出。
2)减少幻觉:RAG 显着降低了 LLM 的幻觉倾向,使生成的文本更加基于数据。
3)个人和专业实用程序:从筛选笔记等个人应用程序到更专业的集成,RAG 展示了在提高生产力和内容质量方面的多功能性,同时基于值得信赖的数据源。
然而,我发现 RAG 的局限性越来越多:
1)当前搜索技术的限制:RAG 也受到限制我们基于检索的词汇和向量搜索技术的限制。
2)人类搜索效率低下:人类不擅长将自己想要的内容写入搜索系统,例如拼写错误、模糊的查询或有限的词汇量,这通常会导致错过明显的顶级搜索结果之外的大量信息。虽然RAG有所帮助,但并没有完全解决这个问题。
3)搜索过度简化:我们普遍的搜索范式将查询线性映射到答案,缺乏深度来理解人类查询的多维性质。这种线性模型通常无法捕捉更复杂的用户查询的细微差别和上下文,从而导致相关性较低的结果。
2023 年 RAG(检索增强生成)的搜索量猛增。作者截屏,来自 2023 年 9 月 Google 趋势。
那么,我们可以做些什么来解决这些问题呢?我们需要一个系统,它不仅能检索我们所询问的内容,还能掌握查询背后的细微差别,而不需要更高级的LLMs。认识到这些挑战并受到可能性的启发,我开发了一个更完善的解决方案:RAG-Fusion。
为什么选择 RAG-Fusion?
1)解决差距:它通过生成多个用户查询并对结果重新排名来解决 RAG 固有的约束。
2)增强搜索:利用倒数排名融合和自定义向量评分加权来获得全面、准确的结果。
RAG-Fusion 致力于弥合用户明确询问的内容与他们想要询问的内容之间的差距,逐步接近揭示通常隐藏的变革性知识。
几年前,我开始与 RAG 一起踏上这段旅程,我很遗憾没有分享这些最初的实验。但现在是做出弥补的时候了。让我们深入研究 RAG-Fusion 的技术复杂性。
仅供参考,对于那些只想查看代码并直接使用 RAG-Fusion 的人,请查看此处的 GitHub 存储库。
RAG Fusion 的基本三元组与 RAG 类似,并且具有相同的三项关键技术:
1)一种通用编程语言,通常是 Python。
2)专用的矢量搜索数据库,例如 Elasticsearch 或 Pinecone,指导文档检索。
3)一个强大的大型语言模型,比如 ChatGPT,可以制作文本。
RAG-Fusion 工作机制的图示。图片由作者提供。
然而,与 RAG 不同的是,RAG-Fusion 通过一些额外的步骤(查询生成和结果重新排名)来区分自己。
RAG-Fusion 的工作流程:
1)通过 Twist 进行查询重复:通过 LLM 将用户的查询转换为相似但不同的查询。
2)释放矢量搜索:对原始查询及其新生成的同级查询执行矢量搜索。
3)智能重新排名:使用倒数排名融合来聚合和细化所有结果。
4)将精心挑选的结果与新查询配对,引导大型语言模型精心设计输出,考虑所有查询和重新排序的结果列表。
RAG-Fusion 代码示例。图片由作者提供。
为什么要进行多重查询?
在传统的搜索系统中,用户经常输入单个查询来查找信息。虽然这种方法很简单,但它有局限性。单个查询可能无法捕获用户感兴趣的全部范围,或者可能太窄而无法产生全面的结果。这就是从不同角度生成多个查询发挥作用的地方。
技术实施(即时工程)
多查询生成流程图:利用即时工程和自然语言模型扩大搜索范围并提高结果质量。图片由作者提供。
提示工程的使用对于生成多个查询至关重要,这些查询不仅与原始查询相似,而且还提供不同的角度或观点。
它的工作原理如下:
1)对语言模型的函数调用:函数调用语言模型(在本例中为 chatGPT)。该方法需要特定的指令集(通常被描述为“系统消息”)来指导模型。例如,这里的系统消息指示模型充当“AI助手”。
2)自然语言查询:模型然后根据原始查询生成多个查询。
3)多样性和覆盖范围:这些查询不仅仅是随机变化。它们是精心生成的,旨在针对原始问题提供不同的观点。例如,如果原始查询是关于“气候变化的影响”,则生成的查询可能包括“气候变化的经济后果”、“气候变化和公共卫生”等角度。
这种方法确保搜索过程考虑更广泛的信息,从而提高生成的摘要的质量和深度。
为什么选择 RRF?
倒数排名融合 (RRF) 是一种将多个搜索结果列表的排名组合起来以生成单个统一排名的技术。RRF 是与滑铁卢大学 (CAN) 和 Google 合作开发的,用其作者的话说,“比任何单独的系统产生更好的结果,比标准的”重新排名方法更好。
RRF 算法,其中 k=60
通过组合不同查询的排名,我们增加了最相关的文档出现在最终列表顶部的机会。RRF 特别有效,因为它不依赖于搜索引擎分配的绝对分数,而是依赖于相对排名,这使其非常适合组合可能具有不同比例或分数分布的查询的结果。
通常,RRF 用于混合词汇和向量结果。尽管这种方法可以帮助弥补矢量搜索在查找诸如首字母缩略词之类的特定术语时缺乏特异性的缺陷,但我对结果并没有印象深刻,这些结果往往更多是多个结果集的拼凑而成,因为对于词法搜索和向量搜索的相同查询很少会出现相同的结果。
将 RRF 视为在做出决定之前坚持征求每个人意见的人。仅在这种情况下,它并不烦人,而且很有帮助。越多越好——或者,在这种情况下,越准确。
技术实施
函数 reciprocal_rank_fusion 采用搜索结果字典,其中每个键是一个查询,对应的值是按与该查询的相关性排名的文档ID列表。然后,RRF 算法根据每个文档在不同列表中的排名计算新分数,并对它们进行排序以创建最终的重新排名列表。
计算融合分数后,该函数按这些分数的降序对文档进行排序,以获得最终的重新排序列表,然后将其返回。
生成输出
用户意图保存
使用多个查询的挑战之一是可能会削弱用户的原始意图。为了缓解这种情况,我们指示模型在提示工程中给予原始查询更多的权重。
技术实施
最后,重新排序的文档和所有查询都被输入到 LLM 提示中,以典型的 RAG 方式生成生成输出,例如请求响应或摘要。
通过分层这些技术和技巧,RAG Fusion 提供了一种强大、细致的文本生成方法。它利用最好的搜索技术和生成人工智能来生成高质量、可靠的输出。
RAG-Fusion 的优点和缺点
1. 优质原材料
当您使用 RAG Fusion 时,您的搜索深度不仅会“增强”,而且会被放大。重新排列的相关文档列表意味着您不仅仅只是了解信息的表面,而是深入到观点的海洋中。结构化输出更易于阅读,并且直观上让人感觉值得信赖,这在对人工智能生成内容持怀疑态度的世界中至关重要。
2. 增强用户意图一致性
从本质上讲,RAG Fusion 被设计为一种具有同理心的人工智能,能够揭示用户正在努力表达但可能无法表达的内容。利用多查询策略捕获用户信息需求的多方面表示,从而提供整体输出并与用户意图产生共鸣。
3. 结构化、富有洞察力的产出
通过从不同的来源获取数据,该模型可以精心设计和富有洞察力的答案,预测后续问题并抢先解决它们。
4. 自动更正用户查询
该系统不仅解释而且细化用户的查询。通过生成多个查询变体,RAG Fusion 执行隐式拼写和语法检查,从而提高搜索结果的准确性
5. 复杂查询的导航
人类语言在表达复杂或专业的思想时常常会出现问题。该系统充当语言催化剂,生成可能包含更有针对性和相关搜索结果所需的行话或术语的变体。它还可能需要更长、更复杂的查询,并将它们分解成更小的、可管理的块以进行矢量搜索。
6. 搜索中的挖掘信息
考虑一下“未知的未知数”——在遇到之前您不知道自己需要的信息。RAG Fusion 允许这种偶然的发现。通过采用更广泛的查询范围,系统有可能挖掘出信息,尽管这些信息并未明确寻求,但却成为用户的顿悟时刻。这使得 RAG Fusion 有别于其他传统搜索模型。
1. 过于冗长的风险
RAG-Fusion 的深度有时会导致信息泛滥。输出可能会详细到令人难以承受的地步。将 RAG-Fusion 视为过度解释事物的朋友 - 信息丰富,但有时,您可能需要他们来切入要点。
2. 平衡上下文窗口
包含多查询输入和多样化的文档集可能会给语言模型的上下文窗口带来压力。想象一下舞台上挤满了演员,很难跟上情节。对于具有严格上下文约束的模型,这可能会导致输出不太连贯甚至被截断。