为了账号安全,请及时绑定邮箱和手机立即绑定

基于语义分块的检索增强生成应用优化技巧!

图片由 Pavan Belagatti 提供

大型语言模型(LLM)为志向远大的研究人员和AI爱好者创造了巨大的机会。但我们需要了解这些LLM的一个重要行为:它们有时会产生虚构的回应。有时它们会产生不准确、有偏见或虚构的回应。为了减轻这种“幻觉”行为,我们有几种方法。检索增强生成被认为是减轻LLM“幻觉”的一种高级策略。然而,构建稳健的RAG应用不仅需要选择适当的LLM,还需要考虑嵌入模型、分块大小和策略、AI框架、向量数据库、检索策略等。

今天,我们将看看语义分块如何增强RAG应用的效果,从而帮助RAG应用更准确地检索到符合上下文的片段。

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

检索增强生成(RAG)是一种通过利用存储在数据库中的外部数据来回应用户查询的方法。这通过提供更多上下文来提升响应生成的质量。RAG结合了检索技术和生成模型来生成更相关的响应。

假设一个场景,你希望从你的AI应用程序中获得定制的响应。首先,组织的文档通过嵌入模型转换为向量表示,然后存储在向量数据库中。当查询发送到AI应用时,查询被转换为向量,并在向量数据库中进行相似性搜索,找到最匹配的结果。这样,你的应用就不会凭空捏造信息,因为你已经告诉它要基于定制的数据来生成响应。

一个简单的用例是客户支持应用程序,其中定制数据被输入应用程序并存储在一个向量数据库中,当用户提出查询时,它会生成最相关的回应,而不是一些泛泛的回答。

RAG管道基本上包括三个关键部分:检索、扩充和生成。

  • 检索:此组件帮助你从外部知识库(如向量数据库)中获取与给定用户查询相关的信息。此组件非常重要,因为这是生成有意义和上下文正确的响应的第一步。
  • 增强:此部分涉及增强和补充与用户查询相关的上下文信息,以更好地回答用户的查询。
  • 生成:最后,通过大模型(LLM)为用户提供最终答案。结合自身知识和上下文,生成合适的回答来回应用户的问题。

这三个组件是RAG管道的基础,帮助用户获得他们想要的丰富且准确的上下文响应。这就是RAG在构建聊天机器人、问答系统等时特别的原因。

RAG应用中的分块处理

注:RAG指检索增强生成(Retrieval-Augmented Generation)。

图片由 Pavan Belagatti 提供

在检索增强生成(RAG)应用中,分块涉及将大量数据分解为更小、更易管理的片段或“块”。此过程通过使模型能够处理更精确、更相关的信息来提高信息检索的效率和准确性。在RAG系统中,当进行查询时,模型会搜索这些块以找到最相关的信息,而不是浏览整个文档。这不仅加快了检索速度,还通过专注于最相关的信息来提高生成响应的质量。分块在文档较长或包含多个主题的场景中特别有用,因为它确保检索到的信息准确且切题。

切分策略

在RAG应用中,分块策略对于提升检索效率和准确性至关重要。这些策略的使用取决于我们的具体场景。这里列出一些常见的分块策略。

  • 固定长度分块:固定长度分块策略将文本分成固定数量的单词或字符。这种策略易于实现,并能保证所有分块大小一致,但有时可能会将相关的信息分割到不同的块中。
  • 递归字符分块:递归字符分块是一种通过逐步基于字符数来分割数据的方法,同时确保语义连贯。最初,一个较大的文档会根据字符边界被分成较大的块。然后这些初始块会进一步递归地被分割成更小的段落,每次保留有意义的单位,如句子或短语,以保持上下文。
  • 代理分块:代理分块是一种在RAG中使用的策略,它利用自主AI代理动态地将文本分成连贯且上下文相关的块。
  • 基于文档的分块:基于文档的分块策略是相对于基于任意字符数或递归方法来分割文本,这种方法使得创建与文档逻辑结构(如段落或子部分)对齐的块。
  • 语义分块:语义分块是一种专注于在文本片段中提取和保留语义意义的方法。通过利用嵌入来捕捉底层语义,这种方法通过评估不同块之间的关系,以确保类似的内容被保留在一起。

通过关注文本的意义和上下文,语义分割显著增强了检索质量。它非常适合确保语义完整,确保检索的信息连贯且相关。

让我们通过一个简单的教程来实际理解一下语义分组是怎么操作的。

语义分块教程

我们将使用一个公开可用的PDF文件,对其进行朴素和语义分块,并将其存储在我们的数据库中,使用这两种分块策略来构建RAG流水线,看看它们如何响应。

技术堆栈
  • LangChain — 开源 AI 框架,用于加载、分割数据并创建数据嵌入。
  • SingleStore — 作为稳健的向量数据库来存储向量嵌入,并使用笔记本功能运行我们的代码。
  • Groq 和 HuggingFace — 选择我们的大语言模型(LLMs)和嵌入模型(来自Groq和HuggingFace)。

注册 SingleStore 后,你就可以在你的工作区中创建一个数据库了。

然后转到“数据工作室标签”以创建一个新的笔记本。

创建新笔记本后,从下拉菜单中选择相应的工作区和数据库,就像下面的例子一样。

这样你就可以开始运行你的代码。

完整的笔记本代码文件可在此处获得:这里

我们基本上采用简单分块和语义分块的方法来处理我们的数据。然后,为这两种方法构建RAG流程。

语义分割的RAG流程

用于初级分块的RAG流程

然后对每个方法问3个问题,看看回应。

在完成本教程之后,你将明白,采用语义分块技术生成的回复内容相比采用朴素分块生成的回复,这些回复内容更加详细且背景信息更丰富,这一点。

这说明了语义块在提取和展示细微信息上的优势,因此,在复杂环境中检索信息时,语义块是一种更好的策略。

别忘了注册SingleStore以获取您的免费共享层级。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消