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使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

使用Python实现文本转语音(TTS)并播放音频

《使用Python实现文本转语音(TTS)并播放音频》在开发涉及语音交互或需要语音提示的应用时,文本转语音(TTS)技术是一个非常实用的工具,下面我们来看看如何使用gTTS和playsound库将文本... 目录什么是 gTTS 和 playsound安装依赖库实现步骤 1. 导入库2. 定义文本和语言 3

Python实现常用文本内容提取

《Python实现常用文本内容提取》在日常工作和学习中,我们经常需要从PDF、Word文档中提取文本,本文将介绍如何使用Python编写一个文本内容提取工具,有需要的小伙伴可以参考下... 目录一、引言二、文本内容提取的原理三、文本内容提取的设计四、文本内容提取的实现五、完整代码示例一、引言在日常工作和学

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示

python中time模块的常用方法及应用详解

《python中time模块的常用方法及应用详解》在Python开发中,时间处理是绕不开的刚需场景,从性能计时到定时任务,从日志记录到数据同步,时间模块始终是开发者最得力的工具之一,本文将通过真实案例... 目录一、时间基石:time.time()典型场景:程序性能分析进阶技巧:结合上下文管理器实现自动计时

Linux find 命令完全指南及核心用法

《Linuxfind命令完全指南及核心用法》find是Linux系统最强大的文件搜索工具,支持嵌套遍历、条件筛选、执行动作,下面给大家介绍Linuxfind命令完全指南,感兴趣的朋友一起看看吧... 目录一、基础搜索模式1. 按文件名搜索(精确/模糊匹配)2. 排除指定目录/文件二、根据文件类型筛选三、时间

Java实现将Markdown转换为纯文本

《Java实现将Markdown转换为纯文本》这篇文章主要为大家详细介绍了两种在Java中实现Markdown转纯文本的主流方法,文中的示例代码讲解详细,大家可以根据需求选择适合的方案... 目录方法一:使用正则表达式(轻量级方案)方法二:使用 Flexmark-Java 库(专业方案)1. 添加依赖(Ma

Node.js net模块的使用示例

《Node.jsnet模块的使用示例》本文主要介绍了Node.jsnet模块的使用示例,net模块支持TCP通信,处理TCP连接和数据传输,具有一定的参考价值,感兴趣的可以了解一下... 目录简介引入 net 模块核心概念TCP (传输控制协议)Socket服务器TCP 服务器创建基本服务器服务器配置选项服

Linux使用cut进行文本提取的操作方法

《Linux使用cut进行文本提取的操作方法》Linux中的cut命令是一个命令行实用程序,用于从文件或标准输入中提取文本行的部分,本文给大家介绍了Linux使用cut进行文本提取的操作方法,文中有详... 目录简介基础语法常用选项范围选择示例用法-f:字段选择-d:分隔符-c:字符选择-b:字节选择--c

使用Python实现批量分割PDF文件

《使用Python实现批量分割PDF文件》这篇文章主要为大家详细介绍了如何使用Python进行批量分割PDF文件功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、架构设计二、代码实现三、批量分割PDF文件四、总结本文将介绍如何使用python进js行批量分割PDF文件的方法