AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


深入解析LangChain Document Transformers:文本分割器的应用与实战
发布日期:2024-07-18 12:12:56 浏览次数: 1857


在处理自然语言处理 (NLP) 项目时,文档转换是一个关键步骤。加载文档后,通常需要对其进行转换以更好地适应您的应用程序需求。本文将介绍 LangChain 中的核心模块之一:Data Connection 的 Document Transformers,重点是如何使用文本分割器将长文档拆分为适合处理的小块。


一、Text Splitters 文本分割器

在处理长篇文本时,有必要将文本分成块。虽然听起来很简单,但这里存在潜在的复杂性。理想情况下,你希望将语义相关的文本片段放在一起。"语义相关"的含义可能取决于文本类型。LangChain 提供了多种内置的文本分割器,使得这一任务变得简单而高效。

文本分割器的基本工作原理:

  • 将文本分成小而有意义的块(通常是句子)。
  • 开始将这些小块组合成较大的块,直到达到某个大小(通过某个函数进行测量)。
  • 一旦达到该大小,使该块成为独立的一部分,并开始创建一个具有一定重叠(以保持上下文关系)的新文本块。


定制文本分割器的两个主要轴向:

  • 如何拆分文字
  • 如何测量块大小

二、使用文本分割器RecursiveCharacterTextSplitter 

RecursiveCharacterTextSplitter 是一种非常灵活和强大的文本分割器,它接受一个字符列表作为参数,根据第一个字符进行切块,但如果任何切块太大,则会继续移动到下一个字符,并以此类推。默认情况下,它尝试进行切割的字符包括 ["\n\n", "\n", " ", ""]

主要参数和功能:

  • length_function用于计算切块长度的方法。默认只计算字符数,但通常可以传递一个令牌计数器。
  • chunk_size切块的最大大小(由长度函数测量)
  • chunk_overlap:切块之间的最大重叠部分。保持一定程度的重叠可以使得各个切块之间保持连贯性(例如滑动窗口)
  • add_start_index:是否在元数据中包含每个切块在原始文档中的起始位置。

    def transformer_doc():# 加载待分割长文本    with open('sys_boss.txt',encoding='UTF-8') as f:state_of_the_union = f.read()text_splitter = RecursiveCharacterTextSplitter(chunk_size = 100,chunk_overlap= 20,length_function = len,add_start_index = True,)docs = text_splitter.create_documents([state_of_the_union])print(docs[0])print(docs[1])metadatas = [{"document": 1}, {"document": 2}]documents = text_splitter.create_documents([state_of_the_union, state_of_the_union], metadatas=metadatas)print(documents[0])


三、代码分隔器

下面是一个使用 RecursiveCharacterTextSplitter 的代码示例,展示了如何将文本分割成小块:
def spit_code():print([e.value for e in Language])html_text = """<!DOCTYPE html><html><head><title>?️? LangChain</title><style>body {font-family: Arial, sans-serif;}h1 {color: darkblue;}</style></head><body><div><h1>?️? LangChain</h1><p>⚡ Building applications with LLMs through composability ⚡</p></div><div>As an open source project in a rapidly developing field, we are extremely open to contributions.</div></body></html>"""html_splitter = RecursiveCharacterTextSplitter.from_language(language=Language.HTML, chunk_size=60, chunk_overlap=0)html_docs = html_splitter.create_documents([html_text])print(html_docs)


四、业务场景应用

假设您正在开发一个文档检索系统,用户需要从大量长篇文档中快速获取相关信息。通过将长文档拆分为小块,并在这些小块上运行搜索和匹配算法,可以显著提高系统的响应速度和准确性。
例如,在法律文档检索系统中,每个法律条款可能包含多段文字。通过将每个条款拆分为独立的块,用户可以快速定位到相关的法律条款,提高法律研究的效率。

总结

文本分割是文档处理中的关键步骤,使用 LangChain 提供的 RecursiveCharacterTextSplitter 可以简化这一过程。通过灵活设置切块大小和重叠部分,您可以确保文本块的语义连贯性,从而更好地满足您的应用需求。无论是开发文档检索系统还是处理其他类型的长文本,LangChain 的文本分割器都能为您提供强大的支持。
通过上述内容,希望能帮助您更好地理解和应用 LangChain 的核心模块,为您的 NLP 项目提供有力支持。如果您有任何问题或建议,欢迎在评论区留言,我们将及时回复。



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询