在当今竞争激烈的商业环境中,业务流程(尤其是文档处理工作流程)的自动化对于寻求提高效率和减少人工错误的公司来说变得至关重要。 传统方法往往难以跟上任务的数量和复杂性,而人工主导的流程速度缓慢、容易出错,并且可能并不总是能提供一致的结果。
OpenAI GPT-4 等大型语言模型 (LLM) 在处理涉及类人文本生成的复杂任务方面取得了重大进展。 然而,他们经常面临特定领域数据的挑战。 LLM通常接受广泛(公开)数据的培训,虽然他们可以提供一般性答案,但在涉及专业知识时,他们的回答可能不准确。 它们还可能产生看似合理但本质上是幻觉的输出------听起来似乎合理但虚假的信息。 此外,公司通常在文档中隐藏大量特定领域的数据,但缺乏有效利用这些信息的工具。
NSDT工具推荐 : Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包
1、检索增强生成的实践
在人工智能领域,RAG 方法作为一种强大的技术脱颖而出,它将信息检索的精确性与文本生成的复杂性相结合。 这种协同作用带来了一系列独特的功能,使 RAG 驱动的应用程序能够提供准确、上下文相关的动态响应。 让我们探索这些功能并深入研究它们在供应链、金融、保险和零售领域的各种业务用例中的实际应用。
这就是检索增强生成 (RAG) 的用武之地。RAG 提供了令人兴奋的突破,能够实时集成特定领域的数据,而无需不断地重新训练或微调模型。 它是通用LLM的一种更实惠、更安全、更可解释的替代方案,大大降低了产生幻觉的可能性。
在这篇博文中,我们将探讨 RAG 在各个领域和场景中的应用,并强调其优势。 我们还将深入研究 RAG 的体系结构,将其分解为构建块,并提供有关如何构建自动化文档处理工作流程的指导。
2、供应链中的RAG
在本小节中,我们将强调 RAG 对供应链格局的变革性影响,并探讨几个业务用例,如图 1 所示。我们将讨论每个用例并阐明 RAG 解决的挑战。
图 1:RAG 如何应对关键供应链挑战的概述
1.1 合规性检查:自动验证
RAG 的事实验证和合规验证功能使其成为法律和合规领域的宝贵资产。 在处理法律文件或监管要求时,RAG 可以交叉引用来自可信来源的信息,有助于创建准确的法律文件。 其事实核查能力可确保所提供的信息符合法律标准,最大限度地减少错误风险并提高整体合规性。
使用案例:
一家跨国公司向全球出口电子产品。 通过使用 RAG,该公司可以获取每个目的地的最新贸易法规。 在发货之前,RAG 会根据这些规定对其进行验证并自动生成必要的文件。 任何不合规行为都会触发实时警报。 这种自动化减少了错误,加快了运输流程,降低了违规处罚的成本,并确保了良好的全球声誉。
1.2 B2B 销售:自动填表
在 B2B 销售流程中,响应建议请求 (RFP) 或信息请求 (RFI) 可能非常耗时。 利用 RAG,公司可以通过检索相关产品详细信息、定价和过去的响应来自动填充这些表单。 RAG 确保生成响应的一致性、准确性和速度,简化销售流程,减少人工工作,并通过及时满足客户需求来提高中标机会。
使用案例:
Grid Dynamics 智能文档处理入门套件演示了如何使用 LLM 和 RAG 根据一般公司信息和产品规格生成对 RFP 的响应。 它提供了这些技术在实际应用中的威力和多功能性的具体示例。
1.3 采购建议:供应链管理
对于最佳采购决策,准确的建议是关键。 使用 RAG,组织可以分析过去的采购模式、供应商绩效和市场趋势,以自动生成量身定制的采购建议。 RAG 的见解可确保更好的供应商选择、节省成本和降低风险,指导企业进行战略采购并培养更牢固的供应商合作伙伴关系。
使用案例:
大型制造商可以利用 RAG 来优化其原材料采购策略。 通过处理多年的采购数据,RAG 可以识别哪些供应商始终满足质量标准、按时交货并提供有竞争力的价格。 这使得制造商能够优先考虑与高绩效供应商的合作伙伴关系,并有可能协商更好的条款。 这种由 RAG 提供支持的主动方法可确保制造商保持优质原材料的稳定供应,减少生产停机时间并培育更高效的供应链。
1.4 报告:自动报表
在当今复杂的供应链中,利用多方面的数据至关重要。 RAG 深入研究大量内部文档,包括实时库存日志、过去的采购订单、供应商信件和发货历史记录。 RAG 从这些不同的来源中自动生成复杂的供应链报告。 这些报告重点关注重要的绩效指标,揭示潜在的瓶颈,并提出需要改进的领域。 通过 RAG 的自动化报告,企业可以获得丰富的见解,促进敏捷决策、提高运营效率并增强供应链的稳健性。
使用案例:
希望优化假日季节供应链的全球零售商可以利用 RAG 处理过去季节的大量数据集,包括销售数据、库存水平和供应商交货时间。 随后,RAG 编制了一份详细报告,不仅强调了该零售商前几年的表现,还预测了下一季的潜在挑战。 有了这份报告,零售商可以提前调整策略,确保运营顺利,更有效地满足客户需求,实现利润最大化。
2、RAG 零售业
在本部分中,我们将深入研究 RAG 在零售业中的可能应用,展示各种业务场景,如图 2 所示。我们将详细说明每个场景,重点介绍 RAG 在零售业克服的具体挑战。
图 2:RAG 如何应对关键零售挑战的概述
2.1 客户支持:产品查询聊天机器人
利用 RAG,零售商可以让聊天机器人从庞大的数据库中近乎实时地获取特定的产品详细信息,从而提高客户查询的响应能力和准确性。 这不仅简化了客户支持,还确保传递准确的产品信息,从而提高客户满意度和购物体验。
使用案例:考虑一家在线时装零售商,列出了数千种产品。 顾客可能会询问某件衣服的面料细节。 由 RAG 驱动的聊天机器人可以立即从产品列表中提取特定的面料成分和护理说明,在几秒钟内为客户提供详细信息。 这种即时而准确的响应可以增强客户的信心,鼓励他们完成购买并返回零售商以满足未来的购物需求,延长浏览会话并提高转化率,所有这些都是通过 RAG 的数据合成和实时响应功能实现的。
2.2 客户反馈:反馈分析
通过深入研究评论、评论和评级,RAG 综合了客户情绪的整体视图。 它会自动生成详细的报告,突出显示普遍的偏好和可辨别的痛点。 有了这些触手可及的洞察力,零售商可以对产品、服务或策略做出明智的调整,确保为客户提供更加协调和增强的购物体验。
使用案例:想象一下一家在线商店最近推出了新产品线。 通过利用 RAG,商店可以汇总来自各种渠道的反馈,解读情绪,并确定是否存在反复出现的问题或对特定产品功能的赞扬。 然后,商店可以解决问题或利用积极的一面,从而提高顾客满意度并可能增加销售额。
2.3 营销:营销活动分析
在零售营销中,了解活动效果极其重要。 RAG 通过深入研究过去的营销活动数据,将其与客户反馈和观察到的销售趋势交织在一起,提供了强大的解决方案。 通过剖析这些信息,RAG 详细洞察哪些策略真正能引起共鸣,哪些渠道可以推动最大程度的参与。 此外,它还确定了过去活动中的潜在差距或需要改进的领域。 具备这些洞察力的零售商可以更好地完善未来的营销工作,确保吸引受众的注意力并培养持久的客户关系。
使用案例:考虑一个零售品牌在过去一年中通过各种渠道(从社交媒体促销到电子邮件通讯)开展了多次营销活动。 通过部署 RAG,品牌可以自动生成全面的分析,捕获客户参与度、点击率和销售转化率等指标。 这种数据驱动的洞察力使品牌能够确定最有利可图的营销策略,调整预算分配,并定制未来的营销活动以最大限度地提高投资回报率。
2.4 产品推荐:个性化推荐
RAG 利用客户数据(包括过去的购买和浏览历史记录)来了解个人偏好。 它动态生成符合用户兴趣的定制产品建议。 当用户实时交互时,推荐也会相应调整。 结果? 增强的用户参与度、延长的浏览会话和更高的转化率,所有这些都是通过 RAG 的数据合成和近乎实时的响应功能来实现的。
使用案例:想象一下,一家在线护肤品零售商提供从保湿霜到防晒霜等各种产品。 一位之前购买过干性皮肤保湿霜的用户几个月后再次登录。 利用 RAG 的功能,该网站立即推荐一款兼容的保湿精华液或冬季护理护肤套装。 这种量身定制的推荐不仅满足了用户的特定需求,还鼓励他们探索更多产品,从而增强他们的整体购物体验并增加零售商的销售机会。
3、金融和保险领域的RAG
在本节中,我们将描述如何在金融领域利用 RAG,详细说明各种业务场景,如图 3 所示。对于每种场景,我们将阐明 RAG 在金融领域解决的具体问题 。
图 3:RAG 如何应对关键财务挑战的概述
3.1 财务咨询:财务咨询聊天机器人
在瞬息万变的金融世界中,客户经常寻求有关投资策略、市场预测和复杂金融产品的见解。 为了满足这一点,金融机构可以使用 RAG 来自动化响应机制,从综合金融数据库中提取准确的信息。 这确保客户获得基于最新数据和专家分析的量身定制的建议。 因此,该流程不仅通过提供快速、准确的答案来提升客户体验,而且还优化了咨询功能,使其更加高效和数据驱动。
使用案例:以一家提供投资咨询服务的大型银行为例。 一位希望实现投资组合多元化的高净值客户使用银行的聊天界面来查询新兴市场的潜在投资机会。 借助 RAG 支持的聊天机器人,该系统可以立即梳理大量全球经济报告、新兴市场基金过去的业绩指标以及当前的地缘政治趋势。 然后,它为客户提供潜在投资途径的详细分析,强调风险和回报,所有这些都是近乎实时的。 这种即时且富有洞察力的反馈不仅使银行成为值得信赖的顾问,而且还培养了客户忠诚度,因为他们感到自己得到了高精度和快速响应的服务。
3.2 保险索赔:自动处理保险索赔
保险索赔通常涉及筛选大量文件和数据。 在处理索赔时,RAG 可用于快速检索相关保单详细信息、索赔历史记录和监管指南。 它可以生成初步评估,根据历史模式标记潜在的欺诈活动,或自动填充包含相关详细信息的表格,从而简化索赔审批流程并确保一致性和准确性。
使用案例:考虑一家汽车保险公司每天收到数千份索赔,尤其是在风暴或洪水等自然灾害之后。 手动处理这些索赔既耗时又容易出错。 通过实施RAG,一旦投保人提交索赔,系统可以立即获取保单详细信息,将索赔与之前的索赔进行比较,甚至根据现有保单指南和历史索赔数据立即提供初步评估。 这种快速响应不仅加快了索赔处理速度,而且还显着增强了客户体验,尤其是在事故发生后的紧张情况下。
3.3 财务报告:自动财务报告
金融世界充满了复杂的数据,从个人交易到广泛的经济趋势。 穿越这个迷宫并提出简洁的见解对于利益相关者的理解和明智的决策极其重要。 RAG 作为一种变革性工具介入实现这一目的。 通过访问和分析大量数据集,RAG 可以将复杂的财务叙述提炼成连贯、易于理解的报告。 有了这些清晰的总结,利益相关者就可以更好地做出战略决策。 通过这种自动化,财务报告不仅变得高效,而且始终准确和及时。
使用案例:考虑一家在全球拥有众多子公司的跨国公司。 每个月,公司都必须整合和审查所有这些实体的财务数据,以提交给董事会。 手动整理这些数据并起草报告可能是一项乏味且容易出错的任务。 然而,借助 RAG,金融数据在中央系统中更新后,它会从各种来源获取相关数据点,将其与过去的表现进行比较,并纳入宏观经济指标。 结果是自动生成的综合财务报告,突出显示趋势、潜在问题和增长领域。 这使董事会能够一目了然地了解公司的财务状况并制定相应的策略,同时确保报告的合规性和准确性。
3.4 增强的投资组合管理:投资组合建议
投资组合管理是一种平衡风险和回报的微妙舞蹈,受到许多因素的影响。 RAG 成为该领域的重要工具。 通过深入研究过去的交易历史、衡量当前的市场动态并了解个人投资者的风险偏好,RAG 可以制定优化的投资组合策略。 这些策略植根于全面的数据分析,为投资者提供量身定制的建议或必要的调整。 因此,投资组合变得更加符合市场机会和个人财务目标。 借助 RAG 的功能,新手和经验丰富的投资者都可以在财富最大化方面获得数据驱动的优势。
使用案例:想象一下,一位 40 多岁的投资者致力于多元化和最大回报,以实现提前退休的目标。 随着时间的推移,他们建立了一个包含各种股票、债券和其他资产的投资组合。 然而,由于全球市场的不可预测性,他们不确定要采取的最佳策略。 使用 RAG 提供支持的平台,他们的财务顾问可以快速评估过去的投资决策、当前的市场动态以及投资者的风险状况。 然后,RAG 提供重新平衡的投资组合建议,就保留哪些资产、新投资的潜在行业以及理想的债券-股票组合提供建议。 这种及时、量身定制的建议不仅简化了决策过程,而且还为投资组合的未来增长做好了定位,与投资者提前退休的愿望紧密结合。
4、案例研究:使用 RAG 处理 RFP
现在我们已经探索了各种行业应用,是时候看看 RAG 的实际应用了。 本案例研究深入探讨了如何使用 RAG 创建一个应用程序,该应用程序旨在自动执行复杂的文档处理,主要侧重于撰写和填写 RFP 的响应。
图 4:使用 RAG 的自动化 RFP 处理工作流程
第1步:上传RFP和补充文件
如图 4 所示,工作流程从用户上传 RFP 文件和补充文档开始,其中可能包括产品详细信息、公司信息等。 这些文档的格式各不相同,从 PDF 和 Excel 工作表到 Word 文档、纯文本文件等。
第 2 步:预览 RFP 并提出查询
上传后,用户可以预览 RFP 并提出与内容相关的查询。 问题的范围可以从寻求 RFP 的摘要到更细致的询问,例如了解 RFP 的主要问题。
第 3 步:接收 RAG 的建议
该应用程序利用 RAG 的强大功能,提供富有洞察力的建议,以提高赢得 RFP 投标的可能性。
第 4 步:激活自动答案生成
预览和初始查询后,用户可以选择激活自动答案生成功能。 该功能可识别 RFP 中概述的所有问题和要求,并制定相应的答复。
第五步:答案预览和修改
生成后,用户将看到问题-答案对的预览,从而使他们能够自主选择和修改他们认为不满意的任何答案。
第 6 步:答案细化阶段
这导致了答案细化阶段。 在这里,用户可以提供关于他们如何设想答案的提示或指令,并且带有 LLM 的集成 RAG 将相应地重新生成响应。 如果对改进感到满意,用户可以保存他们的选择并进入后续阶段。
值得注意的是,虽然工作流程提供了完全自动化的效率,但用户保留了评估和调整中间结果、通过文本提示提供反馈以及根据需要重复和重新访问任何阶段的灵活性。
第 7 步:导出最终的 RFP
此工作流程的最终步骤是导出最终的 RFP,其中包含定制的答案,准备提交给 RFP 发行人。
该案例研究举例说明了 RAG 如何重振传统 RFP 流程,消除手动填写表格、响应不一致和不准确等低效率问题,同时大幅缩短响应时间。 有关此应用程序的更多详细信息可以在此处找到。
5、组装 RAG 流程:从基本构建块到有价值的用例
毫无疑问,你现在已经意识到 RAG 的价值和潜力,并且可能想知道如何在你的组织中开始使用它。 RAG 的主要优势之一是其模块化。 其基础构建块可以以各种配置进行组装,使企业能够根据其特定需求制定定制解决方案。 在深入研究各个构建块之前,我们先了解如何将这些组件紧密集成以形成有价值的 RAG 流程和用例。
- 确定业务挑战或目标:首先确定你想要解决的具体挑战或目标。 无论是通过聊天机器人增强客户支持、简化财务报告还是优化投资组合管理,拥有明确的目标都将指导你的 RAG 组装流程。
- 选择正确的数据源:为了让 RAG 提供准确、相关的结果,你必须为其提供正确的数据。 确定包含与你的挑战相关的信息的数据库、存储库或知识库。
- 配置检索机制:决定你希望 RAG 如何获取信息。 它应该扫描整个文档,还是专注于摘要? 它应该引用多少个来源? 此步骤涉及微调 RAG 的"检索"方面。
- 优化生成模型:有了正确的数据,下一步就是确保 RAG 有效地处理和呈现它。 这涉及配置模型的"生成"方面,对其进行定制以生成清晰、简洁且与上下文相关的输出。
- 实施反馈循环:没有一个系统从一开始就是完美的。 纳入收集用户反馈的机制,以便持续改进 RAG 系统。 这可以确保系统随着时间的推移保持相关性和准确性。
- 迭代和完善:RAG 的模块化特性意味着它具有高度的适应性。 随着业务需求的变化或更多数据可用,重新审视和完善您的 RAG 配置以确保价值最大化。
在接下来的部分中,我们将深入研究 RAG 的架构及其构建块,深入了解每个构建块的功能以及如何优化它们以获得最佳结果。
8、检索增强生成的架构
了解 RAG 架构是充分利用其优势和潜力的关键。 该过程本质上由两个主要组件组成:检索器和生成器,它们共同形成了无缝的信息处理流程。 这个过程如下图所示:
图 5:RAG 流程的高级示意图
8.1 检索器
检索器(Retriever)的作用是从数据存储中获取相关文档以响应查询。 检索器可以使用不同的技术进行检索,最显着的是稀疏检索和密集检索。
稀疏检索传统上用于信息检索,涉及 TF-IDF 或 Okapi BM25 等技术来创建文档的高维稀疏向量表示。 然而,这种方法通常需要查询和文档之间的精确单词匹配,限制了其处理同义词和释义的能力。
另一方面,密集检索将查询和文档转换为密集的低维向量表示。 这些向量表示通常使用 BERT、RoBERTa、ELECTRA 等 Transformer 模型或其他类似模型创建,捕获查询和文档的语义,从而可以更细致地理解语言并更准确地检索相关信息。
8.2 生成器
一旦检索器获取了相关文档,生成器(Generator)就开始发挥作用。 生成器通常是 GPT、Bard、PaLM2、Claude 或 Hugging Face 的开源 LLM 等模型,它接受查询和检索到的文档,并生成全面的响应。
9、编排 RAG 流程
我们之前讨论的基本 RAG 流程可以被细化并编排成一个全面的自动化工作流程,最终形成一个整体业务解决方案,如图 6 所示:
图 6:将 RAG 流程编排为业务自动化解决方案
9.1 RAG操作
这个精心安排的过程可以组合各种 RAG 操作:
- 问答:提取查询的相关详细信息并生成简洁的答案。
- 信息检索:搜索语料库以根据查询获取相关数据或文档。
- 文档分类:使用获取的上下文将文档分类为特定标签。
- 信息摘要:根据已识别的相关详细信息生成摘要。
- 文本完成:使用提取的上下文完成文本。
- 建议:针对所提供的提示提供基于上下文的建议或建议。
- 事实检查:使用语料库中的证据验证或事实检查陈述。
- 对话代理:聊天机器人或虚拟助理使用 RAG 进行知情对话响应。
9.2 编排器组件
为了将这些操作无缝地融入自动化解决方案中,我们需要一个具有以下组件的编排器:
- 提示工程:解释UI查询,根据RAG操作创建合适的提示,并将其转发给决策者。
- 决策者:分析输入/输出以确定后续步骤。 例如,文档分类可能会影响后续的提取方法。 然后,它将决策和提示发送到操作排序器。
- 操作顺序器:规定操作顺序。 确保工作流程连贯、高效地进展,与自动化流程的目标保持一致。 与决策者和查询调度程序交互。
- 查询调度程序:将查询路由到指定的 RAG 操作,确保正确的模块及时处理每个查询。
- 结果处理程序:管理每个 RAG 操作的结果,其中可能包括存储、记录或预处理结果以供后续步骤使用。 它与反馈积分器同步。
- 反馈积分器:利用之前的RAG运算输出来指导下一步的运算,作为一个连续的增强循环。 分析后,它将这些结果转发给决策者。
9.3 处理流程
在本小节中,我们将编译 RAG 流程的所有步骤和构建块,如图 7 所示:
图 7:RAG 工艺流程示意图
- 文档加载:初始步骤包括从数据存储加载文档、文本提取、解析、格式化和清理,作为文档拆分数据准备的一部分。
- 文档拆分:接下来,文档被分解为可管理的小片段或块。 策略的范围可以从固定大小的分块到内容感知的分块,内容感知的分块理解内容的结构并相应地进行分割。
- 文本嵌入:接下来,使用 Word2Vec、GloVe、BERT、RoBERTa 和 ELECTRA 等技术将这些块转换为向量表示或嵌入。 此步骤对于文档块的语义理解至关重要。
- 向量存储:生成的向量每个都与唯一的文档块 ID 相关联,存储在向量存储中。 这里,对存储的向量进行索引以进行有效检索。 根据所使用的向量存储,这可能涉及创建搜索树或哈希表,或者将向量映射到多维空间中的容器。
- 查询处理:收到查询后,也会使用与第三个"文本嵌入"步骤相同的技术将其转换为向量表示。
- 文档检索:检索器使用查询的向量表示来定位并获取语义上与查询最相似的文档块。 该检索是使用相似性搜索技术来执行的。
- 文档块获取:然后使用其唯一 ID 从原始存储中检索相关文档块。
- LLM 提示创建:将检索到的文档块和查询组合起来形成 LLM 的上下文和提示。
答案生成:最后一步,LLM根据提示生成答案,从而结束 RAG 过程。
10、构建 RAG 管道:基本构建块
在本节中,我们将深入研究在 RAG 流程中实现每个构建块的最佳实践,提供额外的阐述以确保更全面的理解。
10.1 文件加载
文本数据是LLM的原材料,可以有多种形式,包括非结构化纯文本文件 (.txt)、PDF (.pdf) 或 Microsoft Word(.doc、.docx)等丰富文档、以数据为中心的格式,例如 如逗号分隔值 (.csv) 或 JavaScript 对象表示法 (.json)、超文本标记语言 (.html、.htm) 中的 Web 内容、Markdown 中的文档 (.md),甚至是用不同语言编写的编程代码 (. py、.js、.java、.cpp 等)等等。 准备和加载这些不同的源以供法学硕士使用的过程通常涉及文本提取、解析、清理、格式化和转换为纯文本等任务。
在协助这一过程的工具中,LangChain脱颖而出。 这个流行的框架在LLM应用程序开发领域得到了广泛的认可。 它的与众不同之处在于其处理 80 多种不同类型文档的令人印象深刻的能力,使其成为极其通用的数据加载工具。 LangChain的数据加载器非常全面,包括Transform Loaders,用于将不同的文档格式转换为LLM可以轻松处理的统一格式。 此外,它还支持公共数据集加载器(可提供对流行且广泛使用的数据集的访问)以及专有数据集或服务加载器(可与私有(通常是公司特定的)数据源或 API 集成。
10.2 文件分割
一旦文档成功加载、解析并转换为文本,文档分割过程就开始了。 此阶段的核心活动包括将这些文本分割成可管理的块,该过程也称为文本分割或分块。 在处理大量文档时,这一点变得至关重要。 考虑到许多 LLM 施加的令牌限制(例如 GPT-3 的大约 2048 个令牌的限制),并考虑到文档的潜在大小,文本分割变得必不可少。 所选择的文本分割方法主要取决于数据的独特性质和要求。
图 8:固定大小文本分割的示例,导致句子作为一个整体阅读时所携带的丰富上下文含义丢失。 在查尔斯·狄更斯的《两个城市的故事》的著名开场白中,狄更斯巧妙地建立的自然流动和对比被打乱了。 例如,如果没有第二部分中的"时代",第一部分中的"It was the best of"就失去了上下文。同样,如果没有第二部分中的"age of smartness, it was",第四部分中的"age ofwise, it was"就不完整。 从第 5 块开始
即使将这些文档划分为更小、可管理的部分的过程看起来很简单,但这个过程充满了复杂性,可能会严重影响后续步骤。 一种幼稚的方法是使用固定的块大小,但如果我们这样做,我们最终可能会在一个块中得到一个句子的一部分,在另一个块中得到另一个句子的一部分,如图 8 所示。当我们进行问答时,我们就不会' 任一块中都没有正确的信息,因为它是分开的。
因此,在将文档划分为块时考虑语义至关重要。 大多数文档分割算法都按照块大小和重叠的原则运行。 下面的图 9 是描述这一原理的简化图。 块大小可以通过字符数、字数或标记数来衡量,是指每个段的长度。 重叠允许两个相邻块之间共享文本的一部分,就像滑动窗口一样操作。 这种策略促进了连续性,并允许一段上下文出现在一个块的末尾和下一个块的开头,从而确保语义上下文的保存。
图 9:块之间的重叠确保了块之间的语义上下文不会丢失
具有重叠的固定大小分块是一种简单的方法,由于其简单性和计算效率而经常受到青睐。 除了固定大小的分块之外,还有更复杂的"内容感知"分块技术:
- 句子拆分:句子分块有多种方法,包括朴素拆分(按句点和换行符拆分)、使用自然语言工具包 (NLTK) 或使用 Python 库 spaCy。 NLTK 和 spaCy 都是强大的自然语言处理 (NLP) 库,可提供将文本拆分为句子的有效方法。 一些高级工具使用较小的模型来预测句子结尾,并使用这些点进行句段划分。
- 递归分块:此方法以分层和迭代的方式将输入文本划分为更小的块。 它使用不同的分隔符或标准,直到达到所需的块大小或结构。
- 专门的分块技术:对于像 Markdown 和 LaTeX 这样的结构化和格式化内容,专门的分块技术可以根据内容的结构和层次结构智能地划分内容,生成语义连贯的块
在决定块大小时,如果常见的分块方法不适合你的用例,一些提示可以指导你选择最佳的块大小:
- 预处理数据:在确定应用程序的最佳块大小之前确保数据质量。 例如,如果您的数据是从网络检索的,您可能需要删除 HTML 标签或只会增加噪音的特定元素。
- 选择一系列块大小:预处理数据后,选择一系列潜在的块大小进行测试。 此选择应考虑内容的性质、要使用的嵌入模型及其功能(例如令牌限制)。 目标是在保留上下文和保持准确性之间找到平衡。
- 评估每个块大小的性能:使用代表性数据集,为要测试的块大小创建嵌入。 运行一系列查询、评估质量并比较不同块大小的性能。 这个过程很可能是迭代的。
总之,没有一种万能的文档拆分解决方案,适用于一种用例的方法可能不适用于另一种用例。 本节应有助于直观地了解如何针对特定应用程序进行文档分块。
10.3 文本嵌入
在文档分割过程之后,文本块会转换为向量表示,可以轻松比较语义相似性。 这种"嵌入"以类似的块在向量空间中聚集在一起的方式对每个块进行编码。
图 10:文本块到向量表示的转换
向量嵌入构成了现代机器学习 (ML) 模型的一个组成部分。 它们涉及将数据从复杂的非结构化形式(例如文本或图像)映射到数学空间中的点(通常是较低维的)。 这个数学空间或向量空间可以实现高效的计算,而且至关重要的是,这个空间中的空间关系可以捕获原始数据的有意义的特征。 例如,在文本数据的情况下,嵌入捕获语义信息。 传达相似含义的文本,即使措辞不同,也会映射到嵌入空间中的接近点。
举例来说,"猫追老鼠"和"猫追啮齿动物"这两个句子可能有不同的表面形式,但它们的语义内容却非常相似。 训练有素的文本嵌入模型会将这些句子映射到嵌入空间中的邻近点。
图 11:句子的语义接近度
文本嵌入的可视化可以提供对其工作原理的直观了解。 在嵌入空间的二维或三维表示中,相似的单词或句子聚集在一起,表明它们的语义接近度。 例如,"狗"、"猫"、"宠物"的嵌入可能比"汽车"的嵌入更接近,如图 12 所示。
图 12:相似词分组在向量空间中
生成这些嵌入涉及复杂的机器学习模型。 最初,Word2Vec 和 GloVe 等模型通过学习捕获许多有用语义关系的词级嵌入取得了长足的进步。 这些模型本质上是孤立地处理单词,从大型文本语料库中的共现统计数据中学习。
目前最先进的模型已经转向基于 Transformer 的模型,如 BERT、RoBERTa、ELECTRA、T5、GPT 及其变体,这些模型可生成上下文感知嵌入。 与以前的模型不同,这些转换器在生成单词或句子的嵌入时会考虑整个句子上下文。 这种上下文感知可以更丰富地捕获语义信息和解决歧义。
例如,"我坐在河岸上"和"我把钱存入银行"中的"银行"一词具有不同的含义,这可以通过基于变压器的模型中的不同嵌入来捕获。 这种基于 Transformer 的模型是 NLP(包括 RAG)最新进展的核心。 在 RAG 中,基于 Transformer 的模型用于从大量文档中检索相关信息("检索"部分),并使用它来生成详细的响应("生成"部分)。 Transformer 模型生成的高质量嵌入对于此过程至关重要,既可以检索语义相关的文档,也可以生成连贯且适合上下文的响应。
10.4 矢量数据库
将文档分割成语义上有意义的块并随后转换为向量空间后,所得嵌入将存储在向量存储中。 矢量存储是独特的搜索数据库,旨在实现矢量搜索并处理存储和矢量管理的某些方面。 本质上,向量存储是一个允许直接查找相似向量的数据库。 RAG 模型的高效执行需要有效的向量存储或索引来容纳转换后的文档块及其关联的 ID。向量存储的选择取决于许多变量,例如数据规模和计算资源。 一些值得注意的矢量存储库是:
- FAISS:FAISS 由 Facebook AI 开发,是一个以高效管理大量高维向量以及在高维环境中执行相似性搜索和聚类而闻名的库。 它采用了旨在优化内存使用和查询持续时间的先进方法,即使在处理数十亿个向量时,也能实现向量的熟练存储和检索。
- SPTAG:SPTAG是微软的产品,是为高维数据量身定制的库。 它提供多种索引和搜索算法类型,根据具体要求在精度和速度之间进行平衡。
- Milvus:Milvus 是一个开源矢量数据库,在数据科学和机器学习领域赢得了相当多的尊重。 它通过尖端算法利用强大的矢量索引和查询功能,即使在广泛的数据集背景下,也有助于快速检索可比较的矢量。 Milvus 广受赞誉的一个因素是它与 PyTorch 和 TensorFlow 等现有框架的兼容性,从而能够顺利过渡到现有的 ML 工作流程。
- Chroma:Chroma 是一个开源轻量级内存向量数据库,专门为促进各种规模的开发人员和组织创建 LLM 应用程序而定制。 它为高维向量的存储、搜索和检索提供了一个高效、可扩展的平台。 Chroma 受到广泛欢迎的一个关键因素是它的多功能性。 它提供云和本地部署选项,可满足不同的基础设施需求。 此外,它对多种数据类型和格式的支持增强了其在一系列应用程序中的实用性。
- Weaviate:Weaviate 是一个强大的开源矢量数据库,专为自托管或完全托管服务而设计。 这个多功能平台为组织提供了管理和处理数据的高级解决方案,重点是高性能、可扩展性和可访问性。 无论选择何种部署策略,Weaviate 都会提供全面的功能和灵活性,以适应各种数据类型和应用程序。 Weaviate 的一个重要特性是它能够存储向量和对象,这使其有利于需要融合不同搜索技术的应用程序,例如基于向量和基于关键字的搜索。
- Elasticsearch:这是一个分布式、RESTful 搜索和分析引擎,可有效存储和搜索高维向量。 其可扩展性和处理海量数据的能力使其适合大规模应用程序。
- Pinecone:Pinecone 于 2021 年初推出,是一个基于云的托管矢量数据库,专门设计用于简化企业和组织大规模 ML 应用程序的开发和部署。 与许多流行的矢量数据库相反,Pinecone 使用专有的封闭源代码。 它为高维向量数据库提供的强大支持使 Pinecone 适用于各种应用,包括相似性搜索、推荐系统、个性化和语义搜索。 它还具有单级过滤功能。 此外,其执行实时数据分析的能力使其成为网络安全领域威胁检测和网络攻击监控的最佳选择。 Pinecone 还有助于与各种系统和应用程序集成,包括但不限于 Google Cloud Platform、Amazon Web Services (AWS)、OpenAI、GPT-3、GPT-3.5、GPT-4、ChatGPT Plus、Elasticsearch、Haystack 和 其他的。
通过选择正确的文本嵌入技术和向量存储,可以建立一个高效且有效的系统来索引文档块。 这样的系统可以快速检索与任何查询最相关的块,这是 RAG 中至关重要的一步。
在下一节中,我们将探讨管理传入查询并从索引中检索最相关块的过程。
10.5 文档检索
检索过程是任何信息检索系统的组成部分,例如用于文档搜索或问答的系统。 检索过程在收到查询时开始,并使用与文档索引相同的嵌入模型将其转换为向量表示。 这会产生用户问题的语义上有意义的表示,随后可以将其与存储在索引(也称为向量存储)中的文档的块向量进行比较。
检索的主要目标是返回与接收到的查询相对应的相关文档块。 相关性的具体定义取决于所使用的检索器的类型。 检索器不需要存储文档; 其唯一目的是检索相关文档块的 ID,从而通过识别可能包含相关信息的块来帮助缩小搜索空间。
图 13:相关文档块的检索
检索器可以采用不同类型的搜索机制。 例如,"相似性搜索"根据余弦相似性识别与查询相似的文档。 另一种搜索类型是最大边际相关性 (MMR),如果向量存储支持它,则非常有用。 这种搜索方法确保检索到的文档不仅与查询相关,而且具有多样性,从而消除了冗余并增强了检索结果的多样性。 相比之下,"相似性搜索"机制仅考虑语义相似性。
RAG还利用相似性分数阈值检索方法。 该方法设置相似度分数阈值,并且仅返回分数超过该阈值的文档。 在搜索相似文档期间,通常使用"k"参数指定要检索的前"k"个文档。
还有另一种检索类型,称为自我查询或LLM辅助检索器。 当处理的问题不仅涉及我们想要在语义上查找的内容,而且还涉及一些用于过滤的元数据时,这种类型的检索变得特别有用。 LLM可以有效地将查询拆分为搜索词和过滤词。 大多数矢量存储都可以促进元数据过滤器,以帮助根据特定元数据过滤记录。 从本质上讲,LLM辅助检索将预训练语言模型的强大功能与传统检索方法相结合,提高了文档检索的准确性和相关性。
一种更重要的检索方法包括压缩,其目的是减少索引文档或嵌入的大小,从而提高存储效率和检索速度。 此过程涉及压缩LLM检查所有文档并提取与最终LLM最相关的文档。 虽然这种技术需要进行更多的LLM调用,但它也有助于将最终答案集中在最关键的方面。 这是一个需要考虑的必要权衡。 在处理大型文档集合时,检索中的压缩尤其重要。 压缩方法的选择取决于多种因素,包括具体的检索系统、文档集合的大小、可用的存储资源以及存储效率和检索速度之间的首选平衡。
图 14:使用 Compression LLM 提取最相关的块
还值得注意的是,存在其他不涉及向量数据库的检索方法,而是使用更传统的 NLP 技术,例如支持向量机 (SVM) 和词频-逆文档频率 (TF-IDF)。 然而,这些方法并不常用于 RAG。
10.6 答案生成
在最后阶段,识别为相关的文档块与用户查询一起使用,为 LLM 生成上下文和提示。 该提示(图 15)本质上是一个精心构建的问题或陈述,指导LLM生成既相关又富有洞察力的回答。
图 15:包含相关上下文文档和问题的提示示例
默认情况下,我们将所有块集中到单个 LLM 调用中的同一上下文窗口中。 在浪链中,这种方法被称为"Stuff"法,是最简单的问答形式。 它遵循一种简单的方法,处理提示,并根据 LLM 的理解立即返回答案。 "Stuff"方法不涉及任何中间步骤或复杂的算法,因此非常适合需要直接答案的简单问题。 然而,在处理大量文档时会出现限制,因为将所有文档容纳在上下文窗口中可能变得不切实际,从而可能导致在面对复杂查询时缺乏深度。 尽管如此,还是有一些不同的方法可以解决短上下文窗口的问题,例如:"Map-reduce"、"Refine"和"Map-rerank"。
Map-reduce 方法受到广泛接受的并行处理范例的启发,其工作原理是首先将每个文档分别发送到语言模型以获得单独的答案。 然后,通过对法学硕士的最终调用,将这些单独的响应合并为最终响应。 尽管这种方法需要与语言模型进行更多的交互,但它具有处理任意数量的文档块的明显优势。 事实证明,这种方法对于复杂的查询特别有效,因为它可以同时处理问题的不同方面,从而生成更全面的响应。 然而,这种方法并非没有缺点。 它往往会比较慢,并且在某些情况下可能会产生次优的结果。 例如,由于响应是基于各个文档块的事实,可能会出现基于给定文档块的明确答案的缺乏。 因此,如果相关信息分散在两个或多个文档块中,则可能缺乏必要的上下文,从而导致最终答案可能不一致。
图 16:用于问答的 Map-reduce 链类型
Refine 方法遵循迭代方法。 它通过使用相关信息迭代更新提示来完善答案。 它在动态和不断变化的环境中特别有用,在这种情况下,第一个答案可能不是最好或最准确的。
图 17:问答的细化链类型
Map-rerank 方法是一种复杂的方法,它根据检索到的文档与查询的相关性对它们进行排名。 此方法非常适合存在多个看似合理的答案并且需要根据其相关性或质量对它们进行优先级排序的场景。
图 18:用于问答的 Map-rerank 链类型
每种提到的方法都有其自身的优点,可以根据问答所需的抽象级别进行选择。 总之,不同的问答链类型为从文档中检索和提取答案提供了灵活性和定制选项。 它们可用于提高语言模型提供的答案的准确性和相关性。
RAG 流程中所有这些步骤的成功相互作用可以形成一个高效的系统,用于自动化文档处理并针对各种查询生成富有洞察力的响应。
19、结束语
业务流程自动化的采用率显着增加,这在很大程度上归因于其能够提高效率、最大限度地减少错误以及释放人力资源以担任更具战略性的角色。 然而,特定领域数据的有效整合和利用仍然面临相当大的挑战。 RAG 和LLM为这些挑战提供了有效的解决方案,具有以下几个关键优势:
- 实时数据集成:与需要不断重新训练和微调以合并新数据的传统模型不同,RAG 有助于实时数据集成。 一旦新文档进入系统,它就会成为知识库的一部分,可供将来查询使用。
- 降低成本:使用新数据重新训练大型模型可能需要大量计算、耗时且成本高昂。 RAG 通过从文档存储中索引和检索相关信息来规避此问题,从而显着减少计算成本和时间。
- 增强安全性:在传统的LLM中,敏感数据通常必须包含在训练阶段才能生成准确的响应。 相比之下,RAG 将敏感数据保留在文档存储中,从不直接暴露给模型,从而增强了数据的安全性。 此外,可以实时应用对文档的访问限制,确保并非所有人都可以访问受限制的文档,而这是微调方法所缺乏的。
- 更好的解释性:RAG 的主要优势之一是它的可解释性。 每个生成的响应都可以追溯到检索信息的源文档,从而提供透明度和问责制------业务环境中的关键因素。
- 减少幻觉:幻觉,或者说看似合理但虚假的信息的产生,是通用和微调的LLM的一个常见问题,这些LLM在"一般"和"特定"知识之间没有明确的区别。 RAG 显着降低了产生幻觉的可能性,因为它依赖系统中的实际文档来生成响应。
- 克服上下文大小限制:LLM 通常有上下文大小限制,大多数允许每个请求大约 4000 个令牌。 这种限制使得提供大量数据变得具有挑战性。 然而,RAG 规避了这个问题。 相似文档的检索可确保仅发送相关文档,从而使模型能够依赖几乎无限的数据。