Chunk的五种方法

文摘   2024-09-01 15:32   新加坡  

本文涉及到的详细测试代码和测试步骤放置于:

https://github.com/xinyuwei-david/david-share.git

的:LLMs/5-ways-chunking,本文中不再赘述代码实现。

1. 固定大小分块(Level 1: Fixed Size Chunking)

描述

固定大小分块是一种最简单的文本分割方法,它将文本按固定的字符数分割成块,不考虑文本的内容或结构。

实现

这种方法实现简单,按照指定的字符数进行分割。例如,如果设定每块不超过100个字符,文本将被直接分割成每块100个字符的片段。

优点

  • 实现简单,适用于对文本结构要求不高的场景。

缺点

  • 可能会在不合适的位置(如单词中间、句子中间)进行分割,导致语义不完整,影响后续处理。

举个例子

假设我们有一段文本:

这是第一段。这段话有点长,需要分割。
这是第二段。它也需要分割。

 
如果我们设定每块不超过20个字符,分割结果可能是:

1: 这是第一段。这段
2: 话有点长,需要分
3: 割。这是第二段。
4: 它也需要分割。

可以看到,分割在单词和句子中间进行,语义不完整。

 

2. 递归分块(Level 2: Recursive Chunking)

 

描述

递归分块是一种考虑文本结构的分块方法,通过分层和迭代的方式将文本分割成较小的块。它使用一组分隔符(如段落、句子、单词等)来逐步分割文本。

实现

首先尝试使用较大的分隔符(如段落),如果分割后的块仍然太大,则使用较小的分隔符(如句子),依此类推,直到达到所需的块大小。

优点

  • 能够更好地保留文本的结构和语义关系,避免在不合适的位置进行分割。

缺点

  • 实现相对复杂,需要考虑多层次的分隔符和递归调用。

举个例子

假设我们有一段文本:

这是第一段。这段话有点长,需要分割。
这是第二段。它也需要分割。

 
递归分块过程:

  1. 第一步:使用段落分隔符“\n\n”进行分割,得到两个段落:

    段落1: 这是第一段。这段话有点长,需要分割。
    段落2: 这是第二段。它也需要分割。

 
2. 第二步:检查每个段落的长度,如果段落1仍然太长,则使用句子分隔符“.”进行分割:

句子1: 这是第一段。
句子2: 这段话有点长,需要分割。

 
3. 第三步:检查每个句子的长度,如果句子2仍然太长,则使用单词分隔符“ ”进行分割:

单词1: 这段话有点长,
单词2: 需要分割。

 
通过这种逐层分割的方法,递归分块能够在尽量保持语义完整性的前提下,将文本分割成合适大小的块。

 

3. 基于文档的分块(Level 3: Document Based Chunking)

 

描述

基于文档的分块方法根据文档的自然结构(如章节、段落、标题等)来分割文本。这种方法特别适用于结构化文档,如书籍、报告、论文等。

实现

通过识别文档中的自然分隔符(如章节标题、段落标记等)来分割文本。

优点

  • 能够保留文档的自然结构,适用于结构化文档。

  • 分割点通常在自然的语义边界上,保留了文本的完整性。

缺点

  • 依赖于文档的结构,适用范围有限。

  • 对于非结构化文本,效果不佳。

举个例子

假设我们有一篇文章:

# 第一章
这是第一章的内容。
# 第二章
这是第二章的内容。

 
基于文档的分块过程:

  1. 识别章节标题:使用“#”作为章节标题的标记。

  2. 分割文本:根据章节标题分割文本。

    分割结果:

1: 第一章\n这是第一章的内容。
2: 第二章\n这是第二章的内容。

 

4. 语义分块(Level 4: Semantic Chunking)

 

描述

语义分块是一种高级的文本分割方法,旨在根据文本的语义内容和上下文关系来分割文本,而不是简单地依赖字符数或固定的分隔符。

实现

利用嵌入(embeddings)技术,将文本转换为向量表示,然后通过计算这些向量之间的相似性来确定分割点。

优点

  • 能够保留文本的语义关系,提高信息检索和处理的效果。

  • 适用于各种类型的文本,尤其是结构复杂的文本。

缺点

  • 需要计算嵌入和相似性,计算量较大。

  • 需要依赖预训练的语言模型,可能需要较高的计算资源。

举个例子

假设我们有一段文本:

机器学习是一种人工智能技术。它使计算机能够从数据中学习和改进。深度学习是机器学习的一个子领域,使用神经网络进行复杂的数据分析。

 
语义分块过程:

  1. 文本嵌入:将文本转换为嵌入向量。

  2. 相似性计算:计算每个句子之间的相似性得分。

  3. 确定分割点:根据相似性得分,确定分割点。

    假设相似性得分如下:

  • 句子1和句子2的相似性得分高

  • 句子2和句子3的相似性得分低

    根据相似性得分,我们可以将文本分割为两个块:

1: 机器学习是一种人工智能技术。它使计算机能够从数据中学习和改进。
2: 深度学习是机器学习的一个子领域,使用神经网络进行复杂的数据分析。

 

5. 代理分块(Level 5: Agentic Chunking)

 

描述

代理分块是一种利用大型语言模型(LLM)来动态确定文本分割策略的方法。它依赖于LLM的智能和上下文理解能力,根据具体的任务和上下文来决定如何分割文本。

实现

通过让LLM作为“代理”来分析文本,并根据需要生成或调整分块策略。

优点

  • 利用LLM的智能和上下文理解能力,能够动态调整分块策略。

  • 适用于各种类型的文本和任务,能够根据具体需求进行调整。

缺点

  • 需要依赖LLM进行分析,计算量较大。

  • 实现过程相对复杂,需要结合多种技术和方法。

参考:https://medium.com/@anuragmishra_27746/five-levels-of-chunking-strategies-in-rag-notes-from-gregs-video-7b735895694d

大魏分享
https://github.com/davidsajare/david-share.git
 最新文章