链载Ai

标题: RAG的五种分块策略 [打印本页]

作者: 链载Ai    时间: 前天 21:53
标题: RAG的五种分块策略
RAG 是将附加文档存储为嵌入向量,将传入的查询计算向量与这些向量进行匹配,并将最相似的信息与查询一起提供给LLM的过程。
由于附加文档可能非常大,流程的步骤1还需要分块,将大文档分成较小/方便管理的文本块,RAG的分块策略主要有五种,分别是固定大小分块、语义分块、递归分块、基于文档结构的分块、基于LLM的分块。
固定大小的分块是最直观和直接的方法,根据预定数量的字符、单词或标记将文本分成统一的段。
由于直接分割会破坏语义,因此在实际使用时在两个连续块之间保持一些重叠。还有一个问题,固定大小分块通常会打断句子或者语境。因此,重要的信息很可能会分散到不同的块中。
根据句子、段落或主题部分等有意义的单位对文档进行细分,为每个片段创建嵌入,如果多个文本段的嵌入向量具有较高的余弦相似度,一直持续到余弦相似度显著下降,则这些段就形成了一个文本块。

与固定大小的块不同,这保持了语言的自然流畅并保留了完整的想法。由于每个块都更加丰富、完整,它提高了检索准确性,进而使 LLM 产生更加连贯和相关的响应。

由于依赖于一个阈值来确定余弦相似度是否显著下降,而这个阈值在不同文档之间差异可能很大。


根据固有分隔符(如段落或章节)进行分块。接下来,如果每个块的大小超出了预定义的块大小限制,则将其拆分成更小的块。但是,如果块符合块大小限制,则不再进行进一步拆分。


与固定大小的块不同,这种方法还保持了语言的自然流畅性并保留了完整的语境。然而,在实施和计算复杂性方面存在一些额外的开销。

它利用文档的固有结构(如标题、章节或段落)来定义块边界,它就通过与文档的逻辑部分对齐来保持结构完整性。

基于文档结构的分块应用的前提条件是假设文档具有清晰的结构,但事实可能并非如此。此外,文本块的长度可能会有所不同,可能会超出模型token的限制。当出现这些问题时通常使用递归拆分进行合并。


基于LLM的分块可以按照 LLM 生成语义上孤立且有意义的块,这种方法将确保较高的语义准确性,因为 LLM 可以理解超越简单启发式方法的上下文和含义。

唯一的问题是,基于LLM的分块是这里讨论的五种技术中计算要求最高的分块技术,另外还需要考虑 LLM 的上下文窗口通常是有限的。


总之,每种文本分块技术都有其自身的优势和劣势。分块策略的选择将很大程度上取决于内容的性质、嵌入模型的功能、计算资源等具体情况。我在实际应用中发现语义分块在多数情况下效果很好,但你在使用语义分块时效果就有可能不理想。






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5