【指南】用于增强RAG应用程序的语义分块

2024年08月02日 由 alex 发表 275 0

大型语言模型(LLM)为有抱负的研究人员和人工智能爱好者创造了巨大的机遇。但是,我们需要了解这些 LLM 的一个重要行为:它们会产生幻觉。它们有时会产生不准确、有偏见或编造的答案/回应。为了减少这种幻觉行为,我们采用了多种技术。检索增强生成被认为是减轻 LLM 幻觉的复杂策略之一。但是,构建强大的 RAG 应用程序同样取决于各种因素,不仅仅是选择 LLM,还有其他因素,如嵌入模型、分块大小和策略、人工智能框架、向量数据库、检索策略等。


今天,我们将了解语义分块如何增强 RAG 应用,从而检索出最准确、上下文最正确的分块。


什么是检索增强生成(RAG)?

检索增强生成(RAG)是一种利用数据库中存储的外部数据来响应用户查询的方法。这可以通过更多的上下文来提高生成响应的质量。RAG 同时利用检索技术和生成模型来生成与上下文相关的响应。


5


想一想你希望从人工智能应用程序中获得自定义响应的场景。首先,通过嵌入模型将组织的文档转换为嵌入,并存储在矢量数据库中。当向人工智能应用程序发送查询时,它会被转换为矢量查询嵌入,并通过矢量数据库的矢量相似性搜索找到最相似的对象。这样,你的 LLM 驱动的应用程序就不会产生幻觉,因为你已经指示它将自定义数据作为其响应的基础。


一个简单的使用案例是客户支持应用程序,自定义数据被输入存储在矢量数据库中的应用程序,当用户查询时,它会生成与你的产品或服务相关的最合适的响应,而不是一些通用的答案。


RAG 管道基本上包括三个关键部分: 检索组件、增强组件和生成组件。

  • 检索: 该组件可帮助你从外部知识库(如矢量数据库)中获取任何给定用户查询的相关信息。该组件非常重要,因为这是策划有意义且上下文正确的回复的第一步。
  • 增强: 这部分涉及增强和添加更多相关上下文到为用户查询检索的回复中。
  • 生成: 最后,在大型语言模型(LLM)的帮助下,向用户提供最终输出。LLM 利用自身的知识和所提供的上下文,为用户的查询提供合适的回复。


这三个组成部分是 RAG 管道的基础,可帮助用户获得他们正在寻找的上下文丰富且准确的回复。这就是 RAG 在构建聊天机器人、问题解答系统等方面如此特别的原因。


RAG 应用程序中的分块


6


在检索-增强生成(RAG)应用中,分块是指将大块数据分解成较小的、可管理的片段或 "块"。这一过程能使模型处理更精确、更相关的数据部分,从而提高信息检索的效率和准确性。在 RAG 系统中,当进行查询时,模型会通过这些数据块来查找最相关的信息,而不是翻阅整个文档。这不仅能加快检索过程,还能通过关注最相关的信息来提高生成回复的质量。在文档较长或包含不同主题的情况下,分块法尤其有用,因为它能确保检索到的数据与上下文相符且准确无误。


分块策略

在 RAG 应用中,分块策略对于提高检索效率和准确性至关重要。这些策略的使用取决于我们的使用案例。下面列出一些著名的分块策略。


  • 固定长度分块: 固定长度分块策略将文本划分为固定字数或字符数的块。这种方法实施简单,能确保统一的分块大小,但有时可能会将相关信息分割到不同的分块中。
  • 递归字符分块法:递归字符分块法是一种在确保语义连贯的前提下,根据字符数将数据逐步分解成较小片段的策略。最初,大型文档会在字符边界处被分成相当大的块。然后再递归地将这些初始块进一步分割成更小的片段,每次都会保留有意义的单位,如句子或短语,以保持上下文的一致性。
  • 代理分块:代理分块是 RAG 中的一种策略,它利用自主人工智能代理将文本动态分割成连贯且与上下文相关的块。
  • 基于文档的分块: 基于文档的分块策略:这种方法不是根据任意字符数或递归方法来分割文本,而是创建与文档的逻辑部分(如段落或小节)相一致的分块。
  • 语义分块: 语义分块法侧重于提取和保留文本片段中的语义。通过利用嵌入来捕捉基本语义,这种方法可以评估不同分块之间的关系,确保相似的内容被保存在一起。


通过关注文本的含义和上下文,语义分块技术大大提高了检索质量。它是维护语义完整性、确保信息检索连贯性和相关性的理想选择。


因此,让我们通过一个简单的教程来了解语义分块是如何实际运作的。


语义分块教程

我们将使用一份公开的 pdf 文件,使用天真分块和语义分块对其进行分块,将其存储到我们的数据库中,然后使用这两种分块策略进行检索,以构建 RAG 管道,了解它们的响应情况。


使用的技术栈

  • LangChain - 用于加载、分割和创建数据嵌入的开源人工智能框架。
  • SingleStore - 用于存储向量嵌入的强大向量数据库。此外,我们还使用笔记本功能来运行代码。注册并获得免费账户。
  • Groq 和 HuggingFace - 用于选择我们的 LLM 和嵌入模型。


注册 SingleStore 后,在工作区中创建一个数据库。


7


然后进入 "数据工作室 "选项卡,创建一个新笔记本。


8


创建新笔记本后,从下拉菜单中选择工作区和相应的数据库,如下图所示。


9


然后就可以开始运行代码了。


10


我们基本上使用天真分块和语义分块技术对数据进行分块。然后为这两种技术构建 RAG 管道。


语义分块的 RAG 管道


11


用于简单分块的 RAG 管道

12


然后,我们针对每种策略提出 3 个问题,看看大家的回答。


13


在本教程的最后,你将了解到使用语义分块生成的回复与使用原始分块生成的回复相比,能提供更详细、语境更丰富的解释。


这证明了语义分块在提取和呈现细微信息方面的优越性,使其成为在复杂场景中进行信息检索的更好策略。



文章来源:https://medium.com/gitconnected/semantic-chunking-for-enhanced-rag-applications-b6bc92942af0
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
写评论取消
回复取消