趋近智
虽然固定大小分块提供了一种直接划分文档的方式,但它常常随意分割文本,可能在句子或段落中间截断思绪。这会妨碍检索器查找真正相关且连贯的信息,因为语义可能分散在多个分块中。为解决这个问题,我们可以使用依据文档固有结构的内容感知分块方法。
内容感知分块的主要目标是创建代表完整语义单元的分块,从而提高检索到的分块包含准确回答查询所需上下文的可能性。这些方法不是仅仅依靠字符或词元计数,而是寻找文本中的自然边界。
根据文档内容和结构分割文档,存在几种方法:
段落分割: 这通常是一个不错的起点。大多数文档使用段落来组织相关想法。沿着段落中断处分割(通常由双换行符表示,例如 \n\n),可以产生包含相对独立思想或主题的分块。这种方法在一定程度上尊重作者预期的结构。然而,段落长度差异很大;有些可能仍然超出上下文窗口或嵌入模型的合理尺寸限制,而有些可能非常短。
句子分割: 为实现更细粒度的控制,可以将文本分割成独立的句子。NLTK(自然语言工具包)或spaCy之类的库提供句子边界检测工具,能够处理标点符号的复杂情况(例如缩写中的句点)。句子分块高度连贯,但可能非常小。检索单个句子有时可能缺少足够的周围上下文。一种常见做法是将几个连续的句子组合成一个分块,或将句子分割与重叠结合使用。
按文档章节分割: 对于具有明确结构(例如HTML、Markdown或LaTeX文件)的文档,根据章节、标题或特定标签进行分割会非常有效。例如,您可以将HTML中 <h2> 标签下的每个章节或Markdown中 ## 标题下的内容视为一个潜在分块。这通常与文档的主题结构很好地吻合,创建出主题集中的分块。实施此方法需要解析文档格式以识别这些结构元素。
递归分割: 这种方法尝试使用按优先级排序的分隔符列表来分割文本。它首先尝试依据最高优先级的分隔符(例如,段落中断符)进行分割。如果生成的分块仍然太大,它就对这些过大的分块应用列表中的下一个分隔符(例如,句子中断符),依此类推。常见的分隔符列表可能包括 ["\n\n", "\n", ". ", " ", ""]。这种方法旨在通过优先处理较大的语义单元,然后再转向较小的单元,从而尽可能将相关文本保持在一起。LangChain之类的框架提供了这种策略的实现(例如,RecursiveCharacterTextSplitter)。
固定大小分块与基于段落的内容感知分块的比较。固定大小分割可以随意打断句子和段落,而使用段落分隔符(
\n\n)的内容感知方法能保持逻辑单元的完整性。
最佳的内容感知策略取决于:
通常需要进行实验。您可以针对您的文档和查询的代表性样本,比较使用不同分块策略时的检索效果。目标始终是寻找平衡点,即生成的分块既足够小以便处理,又足够大以包含与潜在用户查询相关的有意义、连贯的信息。这有利于实现有效检索,并最终促成更准确且有上下文依据的生成。
简洁的语法。内置调试功能。从第一天起就可投入生产。
为 ApX 背后的 AI 系统而构建
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造