当前位置: 首页 > news >正文

自然语言处理从入门到应用——LangChain:索引(Indexes)-[文本分割器(Text Splitters)]

分类目录:《自然语言处理从入门到应用》总目录


当我们需要处理长文本时,有必要将文本分割成块。虽然这听起来很简单,但这里存在很多潜在的复杂性。理想情况下,我们希望将语义相关的文本块保持在一起,但什么是"语义相关"可能取决于文本的类型。本文就展示了几种实现这一目标的方法。

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

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

这意味着有两个不同的方向可以定制文本分割器:

  • 文本如何被分割
  • 块的大小如何衡量

默认推荐的文本分割器是RecursiveCharacterTextSplitter。该文本分割器接受一个字符列表作为参数。它尝试根据第一个字符进行分块,但如果有任何分块过大,它将继续尝试下一个字符,依此类推。默认情况下,它尝试进行分割的字符是\n\n\n等。除了控制分割的字符之外,我们还可以控制其他一些内容:

  • length_function:如何计算分块的长度。默认只计算字符数,但通常在这里传递一个标记计数器。
  • chunk_size:分块的最大大小(由长度函数测量)。
  • chunk_overlap:分块之间的最大重叠量。保持一些重叠可以保持分块之间的连续性(例如使用滑动窗口)。
  • add_start_index:是否在元数据中包含每个分块在原始文档中的起始位置。
# This is a long document we can split up.
with open('../../state_of_the_union.txt') as f:state_of_the_union = f.read()
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(# Set a really small chunk size, just to show.chunk_size = 100,chunk_overlap  = 20,length_function = len,add_start_index = True,
)
texts = text_splitter.create_documents([state_of_the_union])
print(texts[0])
print(texts[1])

输出:

page_content='Madam Speaker, Madam Vice President, our First Lady and Second Gentleman. Members of Congress and' metadata={'start_index': 0} page_content='of Congress and the Cabinet. Justices of the Supreme Court. My fellow Americans.' metadata={'start_index': 82}

我们还可以使用文本分割器分割下列类型的文件:

  • Character
  • HTML
  • Latex
  • Markdown
  • NLTK
  • Python
  • Recursive Character
  • spaCy
  • tiktoken(OpenAI)

参考文献:
[1] LangChain官方网站:https://www.langchain.com/
[2] LangChain 🦜️🔗 中文网,跟着LangChain一起学LLM/GPT开发:https://www.langchain.com.cn/
[3] LangChain中文网 - LangChain 是一个用于开发由语言模型驱动的应用程序的框架:http://www.cnlangchain.com/

http://www.lryc.cn/news/136532.html

相关文章:

  • Chrome如何安装插件(文件夹)
  • MySql 环境搭建
  • mysql 表的约束
  • 认识Redis
  • 同步、异步无障碍:Python异步装饰器指南
  • CodeSite for .NET Crack
  • 基于IMX6ULLmini的linux裸机开发系列九:时钟控制模块
  • 【数据结构与算法】1. 绪论
  • 2023年京东儿童智能手表行业数据分析(京东销售数据分析)
  • 数据结构(6)
  • C++学习|CUDA安装和配置
  • 3.若依前后端分离版开发用户自定义配置表格功能
  • 【操作系统】24王道考研笔记——第三章 内存管理
  • Spring缓存深入解析:@Cacheable的使用详解
  • 软件配置安装(破解)--- jdk下载配置
  • idea使用docker生成镜像(打包镜像,导入镜像,导出镜像)
  • wazuh环境配置
  • 【Linux】Linux下常用压缩解压缩指令及选项小结
  • 香蕉派社区推出带10G SFP+ 端口的Banana Pi BPI-R4 Wifi7开源路由器
  • A 题:震源属性识别模型构建与震级预测 :代码分析:
  • 源码分析CompletableFuture使用默认线程池ForkJoinPool的弊端
  • 连接pgsql数据库 sslmode sslrootcert sslkey sslcert 参数的作用
  • 从零学算法3
  • 宠物小程序开发
  • 07-Vue基础之综合案例——小黑记事本
  • vite4+vue3+electron23.3+ts桌面应用bs端开发 打包windows、linux、max三个系统的安装包
  • 限制 el-input 输入 emoji
  • 【AI】解决Number_Words的安装和使用
  • 开启MySQL的binlog日志
  • 【支付宝小程序】支付宝小程序自定义组件技术教程