框架与工具链2700 字

LangChain多类型文本分割

·全库 328 / 611

《LangChain多类型文本分割》共 0.3 万字,通篇围绕 LangChain、上下文、向量 展开,归在「框架与工具链」这一层。

覆盖LangChain上下文向量

适合要选技术栈、不想把别人踩过的坑重踩一遍的人

目录骨架(4 节)
  1. 如何递归分割文本
  2. 按照语义块分割文本
  3. 如何按标题拆分 Markdown
  4. 如何按token来分割文本

示例代码

注:将ppt后缀名改为zip后解压

python版本:3.12.4

​

在处理文本数据时,文本分割是一个重要的步骤,尤其是在处理长文本或将文本数据输入到机器学习模型中时。LangChain 是一个用于构建大型语言模型应用程序的库,它提供了多种工具和策略来处理文本分割。下面是一些在LangChain中实现文本分割的常见方法:

如何递归分割文本

递归分割(recursively),这个文本分割器是用于通用文本的推荐工具。它接受一个字符列表作为参数。它会按顺序尝试在这些字符上进行分割,直到块足够小。默认的字符列表是 ["\n\n", "\n", " ", ""]。这样做的效果是尽可能保持所有段落(然后是句子,再然后是单词)在一起,因为这些通常看起来是语义上相关的文本块。

  1. 文本如何分割:根据字符列表。
  2. 块大小如何衡量:根据字符数量。

下面我们展示一个使用示例。

要直接获取字符串内容,请使用 .split_text。

要创建 LangChain Document 对象(例如,用于下游任务),请使用 .create_documents。

%pip install -qU langchain-text-splitters
#示例:recursively_split.py
from langchain_text_splitters import RecursiveCharacterTextSplitter

# 加载示例文档
with open("../../resource/knowledge.txt", encoding="utf-8") as f:
    state_of_the_union = f.read()
text_splitter = RecursiveCharacterTextSplitter(
    # 设置一个非常小的块大小,只是为了展示。
    chunk_size=100,
    chunk_overlap=20,
    length_function=len,
    is_separator_regex=False,
)
texts = text_splitter.create_documents([state_of_the_union])
print(texts[0])
print(texts[1])
page_content='I am honored to be with you today at your commencement from one of the finest universities in the'
page_content='universities in the world. I never graduated from college. Truth be told, this is the closest I've'
text_splitter.split_text(knowledge)[:2]
['\ufeffI am honored to be with you today at your commencement from one of the finest universities in the', "universities in the world. I never graduated from college. Truth be told, this is the closest I've"]

让我们来看看上述 RecursiveCharacterTextSplitter 的参数设置:

  • chunk_size:块的最大大小,大小由 length_function 决定。
  • chunk_overlap:块之间的目标重叠。重叠的块有助于在上下文分割时减少信息丢失。
  • length_function:确定块大小的函数。
  • is_separator_regex:分隔符列表(默认为 ["\n\n", "\n", " ", ""])是否应被解释为正则表达式。

从没有词边界的语言中分割文本

一些书写系统没有词边界,例如中文、日文和泰文。使用默认分隔符列表 ["\n\n", "\n", " ", ""] 分割文本可能会导致单词被分割在不同块之间。为了保持单词在一起,您可以覆盖分隔符列表,包括额外的标点符号:

  • 添加 ASCII 句号 ".",Unicode 全角 句号 "."(用于中文文本),以及表意句号 "。"(用于日文和中文)
  • 添加零宽空格 用于泰文、缅甸文、高棉文和日文。
  • 添加 ASCII 逗号 ",",Unicode 全角逗号 ",",以及 Unicode 表意逗号 "、"

资料里没有你的场景?

把你手上的数据和想解决的那个环节发上来,我们按具体情况回,不复述方法论。

发布需求