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

相关文章

Java Jackson核心注解使用详解

《JavaJackson核心注解使用详解》:本文主要介绍JavaJackson核心注解的使用,​​Jackson核心注解​​用于控制Java对象与JSON之间的序列化、反序列化行为,简化字段映射... 目录前言一、@jsonProperty-指定JSON字段名二、@JsonIgnore-忽略字段三、@Jso

Python datetime 模块概述及应用场景

《Pythondatetime模块概述及应用场景》Python的datetime模块是标准库中用于处理日期和时间的核心模块,本文给大家介绍Pythondatetime模块概述及应用场景,感兴趣的朋... 目录一、python datetime 模块概述二、datetime 模块核心类解析三、日期时间格式化与

Python如何调用指定路径的模块

《Python如何调用指定路径的模块》要在Python中调用指定路径的模块,可以使用sys.path.append,importlib.util.spec_from_file_location和exe... 目录一、sys.path.append() 方法1. 方法简介2. 使用示例3. 注意事项二、imp

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Python中的getopt模块用法小结

《Python中的getopt模块用法小结》getopt.getopt()函数是Python中用于解析命令行参数的标准库函数,该函数可以从命令行中提取选项和参数,并对它们进行处理,本文详细介绍了Pyt... 目录getopt模块介绍getopt.getopt函数的介绍getopt模块的常用用法getopt模

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo