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中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

详解MySQL中DISTINCT去重的核心注意事项

《详解MySQL中DISTINCT去重的核心注意事项》为了实现查询不重复的数据,MySQL提供了DISTINCT关键字,它的主要作用就是对数据表中一个或多个字段重复的数据进行过滤,只返回其中的一条数据... 目录DISTINCT 六大注意事项1. 作用范围:所有 SELECT 字段2. NULL 值的特殊处

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

java中Optional的核心用法和最佳实践

《java中Optional的核心用法和最佳实践》Java8中Optional用于处理可能为null的值,减少空指针异常,:本文主要介绍java中Optional核心用法和最佳实践的相关资料,文中... 目录前言1. 创建 Optional 对象1.1 常规创建方式2. 访问 Optional 中的值2.1

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

Python logging模块使用示例详解

《Pythonlogging模块使用示例详解》Python的logging模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查,下面给大家介绍Pythonlogging模... 目录一、为什么使用 logging 模块?二、核心组件三、日志级别四、基本使用步骤五、快速配置(bas