前端大模型入门(四):不同文本分割器对比和效果展示-教你如何根据场景选择合适的长文本分割方式

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时计算 Flink 版,5000CU*H 3个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 本文详细介绍了五种Langchain文本分割器:`CharacterTextSplitter`、`RecursiveCharacterTextSplitter`、`TokenTextSplitter`、`MarkdownTextSplitter` 和 `LatexTextSplitter`,从原理、优缺点及适用场景等方面进行了对比分析,旨在帮助开发者选择最适合当前需求的文本分割工具,提高大模型应用的处理效率和效果。

在前端开发大模型应用的时候,处理和分割文本是常见需求,毕竟现在的大模型输入输出都有限-嵌入等也是有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

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

相关文章
|
2月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
141 2
|
2月前
|
人工智能 前端开发 JavaScript
前端架构思考 :专注于多框架的并存可能并不是唯一的方向 — 探讨大模型时代前端的分层式微前端架构
随着前端技术的发展,微前端架构成为应对复杂大型应用的流行方案,允许多个团队使用不同技术栈并将其模块化集成。然而,这种设计在高交互性需求的应用中存在局限,如音视频处理、AI集成等。本文探讨了传统微前端架构的不足,并提出了一种新的分层式微前端架构,通过展示层与业务层的分离及基于功能的横向拆分,以更好地适应现代前端需求。
|
15天前
|
编解码 前端开发 JavaScript
从入门到精通:揭秘前端开发中那些不为人知的优化秘籍!
前端开发是充满无限可能的领域,从初学者到资深专家,每个人都追求更快、更稳定、更用户体验友好的网页。本文介绍了四大优化秘籍:1. HTML的精简与语义化;2. CSS的优雅与高效;3. JavaScript的精简与异步加载;4. 图片与资源的优化。通过这些方法,可以显著提升网页性能和用户体验。
19 3
|
20天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
20天前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
29 0
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
|
2月前
|
人工智能 前端开发 JavaScript
拿下奇怪的前端报错(一):报错信息是一个看不懂的数字数组Buffer(475) [Uint8Array],让AI大模型帮忙解析
本文介绍了前端开发中遇到的奇怪报错问题,特别是当错误信息不明确时的处理方法。作者分享了自己通过还原代码、试错等方式解决问题的经验,并以一个Vue3+TypeScript项目的构建失败为例,详细解析了如何从错误信息中定位问题,最终通过解读错误信息中的ASCII码找到了具体的错误文件。文章强调了基础知识的重要性,并鼓励读者遇到类似问题时不要慌张,耐心分析。
|
2月前
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
|
2月前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
|
2月前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
|
2月前
|
前端开发 算法 测试技术
前端大模型应用笔记(五):大模型基础能力大比拼-计数篇-通义千文 vs 文心一言 vs 智谱 vs 讯飞vsGPT
本文对比测试了通义千文、文心一言、智谱和讯飞等多个国产大模型在处理基础计数问题上的表现,特别是通过链式推理(COT)提示的效果。结果显示,GPTo1-mini、文心一言3.5和讯飞4.0Ultra在首轮测试中表现优秀,而其他模型在COT提示后也能显著提升正确率,唯有讯飞4.0-Lite表现不佳。测试强调了COT在提升模型逻辑推理能力中的重要性,并指出免费版本中智谱GLM较为可靠。
前端大模型应用笔记(五):大模型基础能力大比拼-计数篇-通义千文 vs 文心一言 vs 智谱 vs 讯飞vsGPT
下一篇
无影云桌面