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实现批量分割PDF文件

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

Python利用自带模块实现屏幕像素高效操作

《Python利用自带模块实现屏幕像素高效操作》这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、获取屏幕放缩比例2、获取屏幕指定坐标处像素颜色3、一个简单的使用案例4、总结1、获取屏幕放缩比例from

nginx-rtmp-module模块实现视频点播的示例代码

《nginx-rtmp-module模块实现视频点播的示例代码》本文主要介绍了nginx-rtmp-module模块实现视频点播,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录预置条件Nginx点播基本配置点播远程文件指定多个播放位置参考预置条件配置点播服务器 192.

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

使用Python将长图片分割为若干张小图片

《使用Python将长图片分割为若干张小图片》这篇文章主要为大家详细介绍了如何使用Python将长图片分割为若干张小图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果1. Python需求

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

C#中字符串分割的多种方式

《C#中字符串分割的多种方式》在C#编程语言中,字符串处理是日常开发中不可或缺的一部分,字符串分割是处理文本数据时常用的操作,它允许我们将一个长字符串分解成多个子字符串,本文给大家介绍了C#中字符串分... 目录1. 使用 string.Split2. 使用正则表达式 (Regex.Split)3. 使用