首页 > 其他分享 >[NLP/AIGC/GPT] RAG : 检索增强型生成技术,智能体的外挂知识库

[NLP/AIGC/GPT] RAG : 检索增强型生成技术,智能体的外挂知识库

时间:2024-09-13 12:46:52浏览次数:11  
标签:检索 NLP 分块 AIGC 文档 RAG 文本 LumberChunker

1 概述 : RAG

RAG 技术的概念、起源

大家每天都会看到各种 RAG 框架、论文和开源项目,也都知道 RAG (Retrieval-Augmented Generation) 是检索增强型生成
但大家还记得 RAG 这个概念源自哪里吗?
RAG 概念来自 Facebook AI Research在 2020 年的一篇论文:

《** Retrieval-Augmented Generation forKnowledge-Intensive NLP Tasks **》
https://arxiv.org/pdf/2005.11401

为什么2020年提出,如今才火起来,很大部分原因是由于基线大模型能力变强,让大模型+知识库的方式,可以回答的问题确实能够满足企业的相当部分需求。

  • 内容小结
  • RAG概念

RAG(Retrieval-Augmented Generation)是检索增强型生成,来源于Facebook AI Research 2020年的一篇论文,用于知识密集型NLP任务。

  • 兴起原因

基线大模型能力的增强使得大模型+知识库的方式可以满足企业部分需求,从而推动了RAG概念的普及。

关键技术:文本分块策略

文本分块算法的产生背景

  • 文本分块技术的产生背景、意义

遇到很多人在使用RAG功能时,都知道一些概念,大概知道怎么做,拿到原始文档,导到系统中,进行自动分块,自动embedding,结果召回效果并不好。
这时候有些人可能会抱怨功能不行,然后探索怎样才能达到好的效果,这时候我们注意到原始文档的分块对于检索是非常重要的。

  • RAG 开发者在使用RAG框架时,最常常疑惑:如何制定正确的分块策略

文本分块的作用 / 为什么要文本分块?

  • 文本分块的定义:

从技术角度来说,“分块”是指将大量文档分割成更小更易于管理的部分,以便模型有效地检索和处理。

分块策略至关重要,原因如下:

  • 相关性精确度

适当分块的文档可确保检索到的信息与查询高度相关。
如果分块太大,它们可能包含大量不相关的信息,从而稀释有用的内容。
相反,如果分块太小,它们可能会错过更广泛的背景,导致响应准确但不够全面。

  • 效率和性能

区块的大小和结构会影响检索过程的效率。
较小的区块可以更快地检索和处理,从而减少系统的整体延迟。
但是,需要取得平衡,因为太多的小区块可能会使检索系统不堪重负并对性能产生负面影响。

  • 生成质量

生成的输出质量在很大程度上取决于检索到的输入
分块良好的文档可确保RAG生成器能够访问连贯且上下文丰富的信息,从而产生更具信息性、连贯性和上下文恰当的响应。

  • 可扩展性

随着语料库规模的增长,分块变得更加重要。
经过深思熟虑的分块策略可确保系统能够有效扩展,管理更多文档,而不会显著降低检索速度检索质量

不同的领域和查询类型可能需要不同的分块策略。灵活的分块方法允许 RAG 系统适应各种领域和信息需求,从而最大限度地提高其在不同应用程序中的有效性。

文本分块的具体算法

从简单到复杂的分块

我们在使用Llamindex、Langchain等框架时,都提供了一些封装好的分块技术。

固定大小分块

  • 这是最粗暴、最简单的文本分块方法。它将文本分解为指定字符数的块,而不考虑其内容或结构。

递归分块

  • 虽然固定大小分块更容易实现,但它没有考虑文本的结构。

递归分块提供了一种替代方案。
在此方法中,我们使用一组分隔符以分层和迭代的方式将文本划分为较小的块。
如果首次尝试拆分文本未产生所需大小的块,则该方法将使用不同的分隔符对生成的块进行递归调用,直到达到所需的块大小。

Langchain 框架提供了RecursiveCharacterTextSplitter类,它使用默认分隔符(“\n\n”、“\n”、“ “, ”)拆分文本。

基于文档的分块

  • 在这种分块方法中,我们根据文档的固有结构对其进行拆分。这种方法考虑了内容的流程和结构,但对于缺乏清晰结构的文档可能不那么有效。

带有Markdown的文档

  • Langchain提供MarkdownTextSplitter类来分割以markdown为分隔符的文档。

使用 Python/JS 的文档

  • Langchain 提供 PythonCodeTextSplitter 来根据类、函数等拆分 Python 程序,并且我们可以将语言提供给RecursiveCharacterTextSplitter 类的 from_language 方法。

包含表格的文档

  • 处理表格时,基于 1 级和 2 级的拆分可能会丢失行和列之间的表格关系。
  • 为了保留这种关系,请以语言模型可以理解的方式格式化表格内容(例如,使用HTML 中的标签、以“;”分隔的 CSV 格式等)。
  • 语义搜索期间,直接从表格中匹配嵌入可能具有挑战性。
  • 开发人员通常在提取后总结表格,生成该摘要的嵌入,并将其用于匹配。

语义分块

  • 以上三个层次都涉及文档的内容和结构,并且需要保持块大小的恒定值。
  • 此分块方法旨在从嵌入中提取语义含义,然后评估这些块之间的语义关系。
  • 核心思想是将语义相似的块放在一起。

LumberChunker

  • 我们在实际使用过程中,有些人想将长篇的文章甚至小说导入RAG中,基于长篇叙述文档分割,这边论文提供了一个方法:

《Long-Form Narrative Document Segmentation》 https://arxiv.org/pdf/2406.17526
使用LumberChunker

  • LumberChunker 是一种利用 LLM 将文档动态分割成语义独立的块的方法。

它以迭代方式提示 LLM 识别一组连续段落中内容开始转变的点。
这种方法基于一个前提:当内容块的大小可以变化时,检索效率会提高,因为这样可以更好地捕捉内容的语义独立性

  • LumberChunker通过迭代地提示LLM,在一系列连续段落中识别内容开始转变的点,从而确保每个块在上下文中是连贯的,但与相邻块有所区别。

  • LumberChunker遵循一个三步流程:

首先,按段落对文档进行分割。
其次,通过追加连续的块,创建一个组(Gi),直到超过预定义的标记计数θ。
最后,将Gi作为上下文输入到Gemini,Gemini确定显著内容转变开始出现的ID,从而定义了Gi+1的开始和当前块的结束。

这个过程在整个文档中循环重复。

  • LumberChunker也有不足:
  • 尽管它在性能上更优,但它需要使用LLM,这使得它在成本和速度上比传统方法要更高更慢
  • LumberChunker专门设计用于叙事文本,对于高度结构化的文本,可能不是最优解决方案。

最佳实践

  • 网友经验[1]:

首先,在上传文档的时候需要对文档进行处理,将文档相关的内容做为一段,每段之间使用特殊符号分隔,例如“||||”;
然后,在自定义参数中按照上述配置。

虽然这样,前期工作会比较复杂,但是这样处理之后检索的效率会高很多。

  • 分块技术作为RAG中不可或缺的一环,选择一个合适自己知识库的分块方式,尤其重要。

理解和利用这些方法可以优化文本处理和分析,从而提高 RAG 模型和类似任务的性能。

X 参考文献

标签:检索,NLP,分块,AIGC,文档,RAG,文本,LumberChunker
From: https://www.cnblogs.com/johnnyzen/p/18411998

相关文章

  • AIGC 工具可图KOLORS的使用感受
    可图KOLORS是一款基于人工智能的图像生成工具,它通过深度学习技术,能够根据用户输入的文字描述或关键词,自动生成相应的图像。以下是我对可图KOLORS的使用感受:一、界面设计直观易用可图KOLORS的界面设计简洁明了,操作流程直观易懂。无论是新手还是有一定经验的设计师,都能快速上手并熟练......
  • RAG+大模型在电商客服领域-商品推荐的应用
    本文是我们项目小组的技术负责人史蒂夫-彭贡献的重点在介绍基于大模型做商品推荐,这个一直是难点,我们到现在还在持续优化方案近年来,随着大型模型的发展,检索增强生成(RetrievalAugmentedGeneration)技术,简称RAG,再次引起了广泛关注。在客服管理领域,RAG被视为目前最具潜力的......
  • AI大语言模型LLM学习-RAG技术及代码实现
    系列文章1.AI大语言模型LLM学习-入门篇2.AI大语言模型LLM学习-Token及流式响应3.AI大语言模型LLM学习-WebAPI搭建4.AI大语言模型LLM学习-基于Vue3的AI问答页面5.AI大语言模型LLM学习-语义检索(RAG前导篇)前言大语言模型(LLM)已经取得了显著的成功,尽管它们仍然面......
  • [NLP/AIGC] 大语言模型:零一万物
    1概述:零一万物-首款开源中英双语大模型公司背景公司名称:零一万物(01.AI)创始人:李开复博士(知名投资人、创新工场董事长兼CEO)产品介绍产品名称:Yi系列大模型Yi-6B:数据参数量为60亿的双语(英文/中文)开源模型Yi-34B:数据参数量为340亿的双语(英文/中文)开源模型,全球多项评测基......
  • Langchain.js如何实现RAG
    前面介绍了Langchain的基本使用方法。仅仅是对GPT方法的封装还不足以让它赢得那么多的Start,以及获得融资。它还有另一个强大的功能-RAG(检索增强生成)。RAG是大模型跟企业内部业务落地的基石。是大模型的北斗导航,可以让大模型的结果更加精准。一、RAG的基本概念与实现流程基于大......
  • NLP(文本处理技术)在数据分析中的应用实例
    在Python中,你可以实现多种自然语言处理(NLP)技术。Python拥有丰富的库和框架,使得NLP任务变得更加容易和高效。接下来将列举一些NLP(文本处理技术)具体功能的Python实现。一:文本预处理1:英文版#文本预处理#导入所需的库importrefromtextblobimportTextBlobfromgensim......
  • 多维度智能体验:引领未来的RAG型知识图谱数字人
    随着人工智能技术的发展,传统的数字人已逐渐普及,但大多数仍然局限于简单的文本回复或预设答案,缺乏深入的语义理解和个性化互动能力,难以应对复杂、多维度的问题交互。不同于传统的数字人,英智知识图谱RAG型数字人提供的不仅是文本回复,而是能够通过知识图谱生成更为精准、上下文相关......
  • 多维度智能体验:引领未来的RAG型知识图谱数字人
    随着人工智能技术的发展,传统的数字人已逐渐普及,但大多数仍然局限于简单的文本回复或预设答案,缺乏深入的语义理解和个性化互动能力,难以应对复杂、多维度的问题交互。不同于传统的数字人,英智知识图谱RAG型数字人提供的不仅是文本回复,而是能够通过知识图谱生成更为精准、上下文相关的......
  • MemoRAG:迈向下一代基于记忆的知识发现
    在当今信息化快速发展的时代,如何有效地从庞大的数据中提取有用的信息,已经成为一个亟待解决的挑战。传统的检索增强生成(RAG)系统在处理复杂查询时往往面临诸多限制。为了解决这些问题,研究者们提出了MemoRAG,一个基于长期记忆的创新框架。本文将深入探讨MemoRAG的架构、功能及......
  • [AI/NLP] 大语言模型排行榜 | 2024.06
    0引言通过排行榜,能快速了解各模型/产品的技术竞争力、综合竞争力。1通用-总排行榜闭源+开源排名模型机构总分理科得分文科得分Hard得分使用方式国内/国外备注1GPT-4oOpenAI81817685API国外2Claude-3.5-Sonnet-200kAnthropic77757284A......