首页 > 其他分享 >前端大模型入门:Langchain的不同文本分割器对比和效果展示-教你根据场景选出最合适的方式

前端大模型入门:Langchain的不同文本分割器对比和效果展示-教你根据场景选出最合适的方式

时间:2024-10-11 08:48:57浏览次数:10  
标签:分割 文本 处理 分割器 Langchain Markdown 最合适 Document pageContent

在前端开发大模型应用的时候,处理和分割文本是常见需求,毕竟现在的大模型输入输出都有限-嵌入等也是有token限制的,合理的文本分割能显著提高模型的表现。Langchain提供了多种文本分割方式,本文将对比五种文本分割器:CharacterTextSplitterRecursiveCharacterTextSplitterTokenTextSplitterMarkdownTextSplitterLatexTextSplitter,从原理、优缺点和适用场景等多个维度进行分析,帮助你选出最合适当前续期的文本分割器。

如果你没有阅读过之前的文章,推荐看看前端大模型入门:编码(Tokenizer)和嵌入(Embedding)解析 - llm的输入,以了解本文的作用和文本切割发生时机。

准备工作

准备好nodejs20+,yarn,安装依赖"@langchain/textsplitters" 或者 “langchain/text_splitter”; 具体的代码实现,可以参考本文绑定的资源,可以在nodejs或者web页面测试。

1. CharacterTextSplitter

原理

CharacterTextSplitter通过简单地按字符进行分割。用户可以指定分割的字符数,以便将文本切分为固定长度的片段。

分词示例

这个分割器按字符分割文本,每个chunk包含30个字符,相邻chunk之间有5个字符的重叠。中间可能被截断

CharacterTextSplitter 结果:
[
  Document {
    pageContent: '人工智能(AI)是计算机科学的一个分支,致力于创造智能机器。',  
  },
  Document {
    pageContent: '智能机器。它已经在多个领域取得了重大突破,如自然语言处理、计',
  },
  Document {
    pageContent: '言处理、计算机视觉和机器学习等。\n\n近年来,深度学习技术的发',
  }
]

优缺点

  • 优点:

    • 实现简单,易于理解和使用。

    • 适用于需要快速分割的简单文本场景。

  • 缺点:

    • 无法识别文本中的语义结构,可能导致信息碎片化。

    • 对于长句子或段落,可能会导致上下文缺失。

适用场景

适用于对文本分割要求不高、上下文关系不强的情况,比如简单的日志文件处理或非结构化数据的初步处理。

2. RecursiveCharacterTextSplitter

原理

RecursiveCharacterTextSplitter在CharacterTextSplitter的基础上,使用递归算法来分割文本。首先按指定字符数分割,然后尝试合并相邻的片段,直到满足某些条件。

分词示例

这个分割器递归地分割文本,使用了多个分隔符(换行符、句号、逗号等),每个chunk最多50个字符,相邻chunk之间有10个字符的重叠。

RecursiveCharacterTextSplitter 结果:
[
  Document {
    pageContent: '人工智能(AI)是计算机科学的一个分支,致力于创造智能机器',
  },
  Document {
    pageContent: '。它已经在多个领域取得了重大突破,如自然语言处理、计算机视觉和机器学习等。',
  },
  Document {
    pageContent: '近年来,深度学习技术的发展使得AI的能力大幅提升',
  },
  ...
  ]

优缺点

  • 优点:

    • 保留了更多的上下文信息,尤其在长段落中。

    • 更加灵活,适合处理多样化的文本。

  • 缺点:

    • 实现复杂,可能导致性能开销增加。

    • 需要调节更多参数以适应不同文本类型。

适用场景

适用于对上下文保留有较高要求的场景,例如长篇文章或报告的处理。

3. TokenTextSplitter

原理

TokenTextSplitter基于词元(Token)进行分割,通常与语言模型的输入结构相结合。用户可以指定每个片段的最大Token数。

分词示例

这个分割器使用适合中文的cl100k_base编码,每个chunk包含20个token,相邻chunk之间有5个token的重叠。

[
  Document {
    pageContent: '人工智能(AI)是计算机科学的一个分支,�',
  },
  Document {
    pageContent: '一个分支,致力于创造智能机器。它已',
  },
  Document {
    pageContent: '器。它已经在多个领域取得了重大突',
  },
  Document {
    pageContent: '了重大突破,如自然语言处理、计算机视',
  },
  ...
  ]

优缺点

  • 优点:

    • 适合大多数自然语言处理任务,可以有效保留上下文信息。

    • 分割后的片段大小更符合模型的输入要求。

  • 缺点:

    • 对于非英语文本或特定领域文本,Token化效果可能不佳。

    • 需要根据模型的Token限制进行调整。

适用场景

适合与大语言模型配合使用的场景,特别是需要高保真度的语义解析时。

4. MarkdownTextSplitter

原理

MarkdownTextSplitter针对Markdown格式文本进行优化,按照Markdown语法规则分割文本,确保分割后的片段在结构上仍然保持有效性。

分词示例

这个分割器专门用于处理Markdown格式的文本,保留了Markdown的结构。

MarkdownTextSplitter 结果:
[
  Document {
    pageContent: '# 人工智能简介',
  },
  Document {
    pageContent: '## 发展现状\n\n人工智能技术已经在多个领域取得突破:',
  },
  Document {
    pageContent: '- 自然语言处理\n- 计算机视觉\n- 机器学习',
  },
  Document {
    pageContent: '## 未来挑战\n\n1. 隐私保护\n2. 算法偏见\n3. 就业影响',
  },
  Document {
    pageContent: '需要在技术创新和伦理考量之间取得平衡。',
  }
]

优缺点

  • 优点:

    • 保留了Markdown的语法结构,适合处理文档和笔记。

    • 使得分割后的片段可以直接用于渲染。

  • 缺点:

    • 只适用于Markdown格式的文本,通用性较差。

    • 对于复杂的Markdown文档,可能需要更复杂的逻辑来处理。

适用场景

适合处理Markdown文档的场景,比如技术文档、博客文章等。

5. LatexTextSplitter

原理

LatexTextSplitter专为处理LaTeX文档设计,遵循LaTeX的语法规则,确保数学公式和其他特性不会在分割时被破坏。

分词示例

LatexTextSplitter 被配置为每个 chunk 最多包含 100 个字符,相邻 chunk 之间有 20 个字符的重叠。

LatexTextSplitter 结果:
[
  Document {
    pageContent: '\\documentclass{article}\n  \\usepackage{CJKutf8}\n  \\usepackage{amsmath}',
  },
  Document {
    pageContent: '\\begin{document}\n  \\begin{CJK*}{UTF8}{gbsn}\n\n  \\section{人工智能简介}',
  },
  Document {
    pageContent: '\\section{人工智能简介}\n' +
      '\n' +
      '  人工智能(AI)是计算机科学的一个分支,致力于创造智能机器。\n' +
      '\n' +
      '  \\subsection{发展现状}\n' +
      '\n' +
      '  近年来,AI在多个领域取得了重大突破:',
  },

优缺点

  • 优点:

    • 专门针对LaTeX,适合处理学术论文和技术文档。

    • 能够有效保留复杂公式和排版。

  • 缺点:

    • 仅限于LaTeX格式,不具备通用性。

    • 学习曲线较陡,对于不熟悉LaTeX的用户可能不友好。

适用场景

适合处理学术论文、技术报告和需要精确排版的文档。

最佳实践推荐

在实际应用中,选择合适的文本分割器应根据具体需求进行。例如:

  • 对于简单文本,可以选择CharacterTextSplitter

  • 处理长文本或需要上下文信息的场合,推荐使用RecursiveCharacterTextSplitterTokenTextSplitter

  • 中文文章推荐用 RecursiveCharacterTextSplitter

  • 处理Markdown文档时,MarkdownTextSplitter是最佳选择,而对于LaTeX文档,则应使用LatexTextSplitter

综合考虑文本类型、上下文需求和输出质量,合理选用文本分割方式,将有助于提高模型的处理能力和效果。

标签:分割,文本,处理,分割器,Langchain,Markdown,最合适,Document,pageContent
From: https://blog.csdn.net/m0_38015699/article/details/142822379

相关文章

  • 开源模型应用落地-LangChain实用小技巧-文档分割器-自定义文档分割器(十三)
    一、前言  在LangChain框架中,文档分割器是一种将大段文本拆分成较小块或片段的算法或方法。其目标是创建可单独处理的可管理的片段,这在处理大型文档或数据集时通常是必要的。  而自定义文档分割器可以根据特定的需求和数据类型进行定制和配置,以便更好地适应应用程......
  • 基于 LangChain 的自动化测试用例的生成与执行
    在前面的章节中,分别介绍了Web、App、接口自动化测试用例的生成。但是在前文中实现的效果均为在控制台打印自动化测试的用例。用例需要手动粘贴,调整之后再执行。那么其实这个手动粘贴、执行的过程,也是可以直接通过人工智能完成的。应用价值通过人工智能代替人工操作的部分,节省时间,......
  • 基于 LangChain 的自动化测试用例的生成与执行
    在前面的章节中,分别介绍了Web、App、接口自动化测试用例的生成。但是在前文中实现的效果均为在控制台打印自动化测试的用例。用例需要手动粘贴,调整之后再执行。那么其实这个手动粘贴、执行的过程,也是可以直接通过人工智能完成的。应用价值通过人工智能代替人工操作的部分,节省......
  • 基于 LangChain 的自动化测试用例的生成与执行
    在前面的章节中,分别介绍了Web、App、接口自动化测试用例的生成。但是在前文中实现的效果均为在控制台打印自动化测试的用例。用例需要手动粘贴,调整之后再执行。那么其实这个手动粘贴、执行的过程,也是可以直接通过人工智能完成的。应用价值通过人工智能代替人工操作的部分,节省时间,......
  • 2025秋招LLM大模型多模态面试题(八)- langchain完整面试题
    目录什么是LangChainLangChain包含哪些核心模块模型输入/输出(ModelI/O)组件管理数据处理链式组合记忆与上下文管理外部集成一些核心概念什么是LangChainAgent?什么是LangChainmodel?LangChain包含哪些特点?LangChain如何使用?LangChain如何调用......
  • RAG技术全面解析:Langchain4j如何实现智能问答的跨越式进化?
    LLM的知识仅限于其训练数据。如希望使LLM了解特定领域的知识或专有数据,可:使用本节介绍的RAG使用你的数据对LLM进行微调结合使用RAG和微调1啥是RAG?RAG是一种在将提示词发送给LLM之前,从你的数据中找到并注入相关信息的方式。这样,LLM希望能获得相关的信息并利用......
  • 漂亮师娘守寡多年终究耐不住寂寞与徒弟一起学习AI大模型应用【LangChain+LlamaIndex+A
    上节传送门: 三只羊女主播狂欢自学AI大模型应用开发却换来嘲讽,回复:我有更多优点——理论开篇-CSDN博客文章浏览阅读944次,点赞19次,收藏6次。33岁丰腴女自学AI大模型应用开发却换来嘲讽,回复:我有更多优点——导论——1-CSDN博客这也是我这么多年来的一个心得和实际的体会,以后的日......
  • 使用LangChain4J实现Agent与Tool调用
    一些LLM除了生成文本,还可触发操作。所有支持tools的LLMs可在此处找到(参见“Tools”栏)。有一个被称为“工具(tools)”或“函数调用(functioncalling)”的概念。它允许LLM在必要时调用一或多个由开发者定义的工具。工具可以是任何东西:网页搜索、外部API调用、或执行一段特定代码等......
  • LangChain4j支持的API类型
    本文描述了底层的大语言模型(LLM)API。高级的LLMAPI参见AI服务。1LLMAPI的类型1.1LanguageModel非常简单—,接受一个String作为输入,并返回一个String作为输出。该API现正逐渐被聊天API(第二种API类型)取代。1.2ChatLanguageModel这种API接受一或多个ChatMessage作为输入,并返......
  • LangChain4j支持的API类型
    本文描述了底层的大语言模型(LLM)API。高级的LLMAPI参见AI服务。1LLMAPI的类型1.1LanguageModel非常简单—,接受一个String作为输入,并返回一个String作为输出。该API现正逐渐被聊天API(第二种API类型)取代。1.2ChatLanguageModel这种API接受一或多个ChatMessage作为输入,并返......