LangChain核心模块 Retrieval——文本分割

2024-03-25 01:52

本文主要是介绍LangChain核心模块 Retrieval——文本分割,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Text Splitters

  • 文本分隔

检索的关键部分时仅获取文档的相关部分,主要任务之一是将大文档分割为更小的块。

最简单的例子是,将长文档分割成更小的块,以适合模型的上下文窗口。

LangChain 有许多内置的文档转换器,可以轻松地拆分、组合、过滤和以其他方式操作文档。

理想情况下,希望将语义相关的文本片段保留在一起。“语义相关”的含义可能取决于文本的类型。下面展示了实现此目的的几种方法。

在较高层面上,文本分割器的工作原理如下:

  1. 将文本分成小的、具有语义意义的块(通常是句子)
  2. 开始将这些小块组合成一个更大的块,直到达到一定的大小(通过某些函数测量)。
  3. 一旦达到该大小,请将该块设为自己的文本片段,然后开始创建具有一些重叠的新文本块(以保持块之间的上下文)。

这意味着可以沿着两个不同的轴自定义文本拆分器:

  1. 如何分割文本
  2. 如何测量块大小

Types of Text Splitters

LangChain 提供了多种不同类型的文本分割器。这些都位于 langchain-text-splitters 包中。下表列出了所有这些以及一些特征:

  • Name:文本分割器的名称
  • Splits On:该文本分割器如何分割文本
  • Adds Metadata:该文本拆分器是否添加有关每个块来自何处的元数据
  • Description:分割器的描述,包括有关何时使用它的建议
NameSplits OnAdds MetadataDescription
Recursive用户定义的字符列表递归地分割文本,递归地分割文本的目的是尝试使相关的文本片段彼此相邻。(推荐)
HTMLHTML 特定字符根据 HTML 特定字符分割文本,值得注意的是,添加了有关该块来自何处的相关信息(基于 HTML)
MarkdownMarkdown 特定字符根据 Markdown 特定字符分割文本,值得注意的是,这添加了有关该块来自何处的相关信息(基于 Markdown)
Codecode(Python、JS)特定字符根据特定于编码语言的字符分割文本,有 15 种不同的语言可供选择。
TokenTokens根据token分隔文本,有几种不同的方法衡量tokens
Character用户定义的字符根据用户定义的字符拆分文本,比较简单的方法之一。
[Experimental] Semantic Chunker句子首先对句子进行分割。然后,如果它们在语义上足够相似,则将它们相邻地组合起来。

HTMLHeaderTextSplitter

概念上类似于 MarkdownHeaderTextSplitterHTMLHeaderTextSplitter是一个“结构感知”分块器,它在元素级别拆分文本,并为每个与任何给定块“相关”的标题添加元数据。它可以逐个元素返回块或将具有相同元数据的元素组合起来,目标是 (a) 保持相关文本在语义上(或多或少)分组;(b)保留文档结构中编码的上下文丰富的信息。它可以与其他文本分割器一起使用,作为分块管道的一部分。

使用示例:

  1. 使用 HTML 字符串
  2. 通过管道传输到另一个拆分器,并从 Web URL 加载 html

局限性:

一个 HTML 文档与另一个 HTML 文档之间可能存在相当多的结构变化,虽然 HTMLHeaderTextSplitter 会尝试将所有“相关”标头附加到任何给定块,但有时可能会丢失某些标头。

Split by character

最简单的方法,这基于字符(默认为“”)进行分割,并通过字符数来测量块长度。

  1. 通过单个字符进行文本分割
  2. 按字符数测量块大小

Split code

CodeTextSplitter 允许您使用支持的多种语言拆分代码。

Recursiverly split JSON

  • 递归拆分JSON

JSON分割器首先遍历JSON数据深度并构建更小的JSON块。

它尝试保持嵌套的 json 对象完整,但如果需要将块保留在 min_chunk_size 和 max_chunk_size 之间,则会将它们分割。

如果该值不是嵌套的 json,而是一个非常大的字符串,则该字符串将不会被拆分。

如果需要对块大小进行硬性限制,请考虑在这些块上使用递归文本拆分器。

有一个可选的预处理步骤来分割列表,首先将它们转换为 json (dict),然后这样分割它们。

  1. 按json值对文本进行分割
  2. 按字符数测量块大小

Recursiverly split by character

  • 按字符递归分割

对于一般文本,推荐使用此文本分割器。它由字符列表参数化,它尝试按顺序分割它们,直到块足够小。

默认列表为 [“\n\n”, “\n”, " ", “”]。

这样做的效果是尝试将所有段落(然后是句子,然后是单词)尽可能长时间地放在一起,因为这些通常看起来是语义相关性最强的文本片段。

  1. 按字符列表进行文本分割
  2. 按字符数测量块大小

Semantic Chunking

  • 语义分块:根据语义相似性分割文本。

在较高层次上,它会分成句子,然后分成 3 个句子为一组,然后合并嵌入空间中相似的句子。

这篇关于LangChain核心模块 Retrieval——文本分割的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/843490

相关文章

Python sys模块的使用及说明

《Pythonsys模块的使用及说明》Pythonsys模块是核心工具,用于解释器交互与运行时控制,涵盖命令行参数处理、路径修改、强制退出、I/O重定向、系统信息获取等功能,适用于脚本开发与调试,需... 目录python sys 模块详解常用功能与代码示例获取命令行参数修改模块搜索路径强制退出程序标准输入

Python pickle模块的使用指南

《Pythonpickle模块的使用指南》Pythonpickle模块用于对象序列化与反序列化,支持dump/load方法及自定义类,需注意安全风险,建议在受控环境中使用,适用于模型持久化、缓存及跨... 目录python pickle 模块详解基本序列化与反序列化直接序列化为字节流自定义对象的序列化安全注

Python异常处理之避免try-except滥用的3个核心原则

《Python异常处理之避免try-except滥用的3个核心原则》在Python开发中,异常处理是保证程序健壮性的关键机制,本文结合真实案例与Python核心机制,提炼出避免异常滥用的三大原则,有需... 目录一、精准打击:只捕获可预见的异常类型1.1 通用异常捕获的陷阱1.2 精准捕获的实践方案1.3

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

python pymodbus模块的具体使用

《pythonpymodbus模块的具体使用》pymodbus是一个Python实现的Modbus协议库,支持TCP和RTU通信模式,支持读写线圈、离散输入、保持寄存器等数据类型,具有一定的参考价值... 目录一、详解1、 基础概念2、核心功能3、安装与设置4、使用示例5、 高级特性6、注意事项二、代码示例

深入浅出Java中的Happens-Before核心规则

《深入浅出Java中的Happens-Before核心规则》本文解析Java内存模型中的Happens-Before原则,解释其定义、核心规则及实际应用,帮助理解多线程可见性与有序性问题,掌握并发编程... 目录前言一、Happens-Before是什么?为什么需要它?1.1 从一个问题说起1.2 Haht

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac