【引】“枯萎,无法回避,如人之生老病死;荒芜,无法接受,如碌碌无为一生。” 这是周六回乡下除草的感受。有所得,有所感,对工程技术也是如此。
将大文档分割成较小的分块是一项关键而复杂的任务,对RAG系统的性能有着重大的影响。一般地,RAG系统旨在通过将基于检索的方法和基于生成的方法相结合,提高产出的质量和相关性。有多种框架提供了文档分块方法,每种方法都有自己的优点和典型用例。或许,利用主题感知的句子嵌入来识别文档中的主题变更,确保每个块封装一个主题会是一种不错的选择。
1.回顾RAG
RAG系统是一个复杂的机器学习模型,它融合了基于检索的技术和生成式AI。RAG 系统的主要目标是通过合并从数据集中检索的信息来提高生成内容的质量和相关性。回顾一下 RAG 系统的工作原理:
- 检索阶段: 系统首先根据输入查询检索相关文档或信息。这个阶段依赖于搜索算法和索引方法来快速识别大量集合中最相关的数据。
- 生成阶段: 一旦检索到相关文档,就会使用一个通常是基于transformer的大语言模型,如 GPT-4来创建一个连贯的、与上下文相适应的响应。此模型使用检索到的信息来确保生成的内容是准确的,而且信息丰富。
RAG 系统的混合特性使它们对于知识密集型任务特别有效,在这些任务中,检索和生成的结合极大地提高了总体性能。关于RAG 的更多信息,可以参考《大模型系列——解读RAG》和《RAG的10篇论文-2024Q1》。
2. 常见的文本分块技术
文本分块是许多自然语言处理任务的基础步骤,可以采用多种技术来确保分块方式保留了语义和上下文。根据任务的具体要求,可以以多种方式来实现文本分块,下面是针对不同需求分块方法:
2.1 按字符分块
此方法将文本分解为单个字符。它适用于需要细粒度文本分析的任务,例如字符级语言模型或某些类型的文本预处理。
2.2 按Token分块
将文本分割成token,是自然语言处理中的一种标准方法。基于令牌的组块对于文本分类、语言建模和其他依赖于token化输入的 NLP 应用程序等任务来说是必不可少的。
2.3 按段落分块
按段落分段整理文本有助于维护文档的整体结构和流程。此方法适用于需要较大上下文的任务,如文档摘要或内容提取。
2.4 递归分块
这涉及到重复地将数据分解成更小的块,通常用于分层数据结构。递归组块有利于需要多级分析的任务,如主题建模或层次聚类。
2.5 语义分块
根据意义而非结构元素对文本进行分组对于需要理解数据上下文的任务至关重要。语义块利用诸如句子嵌入等技术来确保每个块代表一个连贯的主题或想法。
2.6 代理分块
这种方法的重点是在识别和分组文本的基础上增加参与的代理,如人或组织。它在信息抽取和实体识别任务中非常有用,因为理解不同实体之间的角色和关系非常重要。
3.基于Langchain的文本分块技术——5行代码
Langchain 框架中提供了很多可以开箱即用的技术,常见的文本分块技术如下:
- 递归字符分块
- token分块
- 句子分块
- 正则分块
- Markdown分块 </