什么是语义块?
无抓取抓取浏览器可以收集在语义分块之前保留结构和源元数据的渲染网页文档,以用于检索。
TL;DR
- 语义块是围绕一个连贯主题或命题组织的可检索文本单元。 它的边界遵循意义,而不仅仅是固定的字符或标记计数。
- 语义分块旨在提高检索精度。 一个查询应该恢复相关的想法,而不携带无关的周围文本。
- 更小并不总是更好。 非常小的块可能会失去定义、条件、引用和回答所需的上下文。
- 文档结构是有价值的证据。 标题、段落、列表、表格和章节关系通常比仅仅嵌入变换更能形成良好的边界。
- 分块必须用真实的问题进行评估。 没有普遍适用于每个语料库和检索器的大小或方法。
定义语义块
语义块是保留一致意义单元的内容段,用于搜索、检索或语言模型上下文。该段落可以包含一个命题、简短说明、程序步骤、包含标题的表格行,或几个讨论相同子主题的段落。定义特征是概念统一,而不是固定长度。
语义分块试图在主题变化处设置边界。一些方法比较相邻句子的嵌入,当相似性下降时进行分割。其他方法使用语言模型、话语解析器、标题或文档布局。许多生产系统将结构规则与语义信号相结合,因为布局通常承载了简单句子嵌入所忽略的意义。
该术语在检索增强生成中很常见,其中块成为可搜索的单元。检索器选择与问题相关的块,生成器将其作为证据读取。糟糕的边界可能隐藏所需的事实或将其从限定条件中分离。
为什么块边界很重要
块边界定义了检索器可以返回的内容。如果一个块包含几个无关的主题,语义相似性可能因错误的原因而匹配它,生成器将收到干扰文本。若一个块太窄,代词可能失去其指代,数字可能失去其单位,或规则可能在下一个段落中失去例外。
文档分割研究表明,广泛使用的基于规则的分割可能会创建过于宽泛或过于碎片化的单元。 ACL关于RAG文档分割的研究结果论文 将分割评估为基础检索问题,而不是将其视为中立的预处理。
分块还影响成本。更多的小块增加索引条目,可能需要检索更多单元以重建上下文。大块减少条目数量,但每个结果消耗更多的模型上下文。有效的平衡取决于问题的粒度、文档结构、嵌入行为、重新排序和生成器的上下文限制。
分块策略比较
| 策略 | 优点 | 常见弱点 |
|---|---|---|
| 固定大小 | 简单、快速且易于重复。 | 边界可能会切割思想或表格。 |
| 递归结构分割 | 在回退到大小之前使用段落、行和其他分隔符。 | 结构规则可能无法检测主题变化。 |
| 文档感知分割 | 保留标题、章节、列表、代码和表格关系。 | 需要特定格式的解析。 |
| 基于嵌入的语义分割 | 检测相邻单元之间意义的变化。 | 阈值对语料库敏感,并增加计算量。 |
| 模型辅助分割 | 可以识别命题和话语边界。 | 增加延迟、成本和输出可变性。 |
| 混合分割 | 结合结构、大小限制和语义检查。 | 有更多参数需要评估和维护。 |
固定大小的块仍然是一个有用的基线。更复杂的方法应证明它对目标语料库提高了检索或回答质量。如果语义复杂性导致边界不易重现而没有改善应用指标,那么它就不是一个好处。
良好语义单元的示例
政策条款及例外
将规则、其范围及其明确的例外保留在一起,以便检索时不能将规则呈现为普遍适用。
程序步骤与前提条件
在每个部分执行步骤安全时,包含所需的操作、所需状态和预期结果。
带有表头的表格行
重复或附加列标题和表格上下文,以便孤立值保留其含义和单位。
带有本地解释的定义
保留命名术语和将其与相邻概念区分开的句子。
元数据应携带不需要出现在每个块文本中的信息:源 URL、文档 ID、章节路径、出版版本、语言、管辖区和访问范围。检索可以在这些字段上过滤,然后进行语义排名。
一个实用的语义分块管道
一个实用的管道首先解析结构,然后应用语义逻辑。保留标题、列表、表格、代码块和源位置。在不将内容压平为一个字符串的情况下,标准化空白和导航噪声。从自然文档单元创建候选块,然后在大小和连贯性约束下合并或分割候选。
- 定义集合必须回答的问题及其需要的证据粒度。
- 解析源结构并分配稳定的文档和章节标识符。
- 创建句子或块候选,而不将标签与值分开。
- 合并相邻候选,前提是它们共享主题并适合目标上下文预算。
- 在最强结构或语义边界处拆分超大单元。
- 仅在跨越边界的引用证明有必要的地方添加小重叠。
- 用元数据索引块并保留返回完整源的路径。
- 在调整答案提示之前评估检索。
对于网页源,呈现的内容可能与初始 HTML 不同。无抓取界面浏览器可以捕捉 JavaScript 渲染的文档。管道应在分块之前保留标题和规范 URL,以便检索单元保持可追溯。
如何评估语义块
用代表性问题和已知相关段落评估块。检索召回询问证据是否在候选者中出现。精准度询问检索文本的相关性。边界质量询问块是否包含解释答案所需的上下文。引文质量询问审阅者是否能够将块追溯到确切的源位置。
包括不同问题类型:确切事实、定义、多步骤程序、跨章节比较、表格查找以及语料库中没有答案的问题。最后一组测试检索是否返回误导性的近似匹配。在相同检索器和 top-k 设置下,将语义分块与固定或递归基线进行比较。
端到端答案分数有用,但可能掩盖检索缺陷,因为模型可能从先前知识中回答。直接检查检索文本,并使用答案依赖于语料库的问题。原始 检索增强生成研究 解释了为何检索的证据和参数知识必须一起进行评估。 NIST AI 风险管理框架 有助于将这些测量与应用风险联系起来。
常见故障模式
主题转移阈值可能会过度细分短句或不足细分密集段落。嵌入可能将重复术语视为一个主题,即使文档从规则切换到例外。标题可能变成孤立块。表格可能被压平为没有意义的值序列。模板可能主导相似性。
父子检索可以提供帮助:搜索小的子块以获取精确度,然后返回较大的父部分以获取上下文。上下文扩展也可以在检索后附加相邻句子。这些方法减少了边界损坏,但增加了上下文大小,因此需要相同的评估规范。
结论
一个语义块是一个连贯的检索单元,其边界遵循含义。好的块保留解释事实所需的上下文,同时排除不相关材料。从文档结构开始,使用语义信号来改善边界,保留来源,并将每一个复杂策略与实际问题上的简单基线进行比较。
在索引后保留原始文档可寻址。检索单元是证据的优化视图,而不是审阅者必须检查的源的替代品。
准备建立更清晰的网络知识库吗?
收集结构完整的呈现页面,然后进行解析、分块、索引和检索。
今天注册并获得 $5 的免费信用 — 无需信用卡.
索取您的 $5 信用→常见问题
块与语义块有什么区别?
块是为处理或检索而创建的任何片段。语义块旨在包含一个连贯的主题或命题,因此其边界遵循含义,而不仅仅是固定的大小。
语义块总是比固定大小的块更好吗?
不。语义方法增加了计算和参数,并且可能不会改善每一语料库。固定大小或递归拆分是一个有价值的基准。选择能改善检索和答案指标的方法。
语义块应该重叠吗?
有限的重叠可以在边界之间保持上下文,但大范围的重叠会重复证据,扩展索引,并可能使检索结果充斥相似的文本。仅在评估显示跨边界引用需要时使用重叠。
语义块应该有多大?
没有通用的大小。有效范围取决于文档结构、问题粒度、嵌入行为、检索数量和模型上下文。将一个连贯的单位保持在一起,强加一个实用的最大值,并使用真实查询测量边界质量。
表格应该如何分块?
保持表格的身份、列标题、行标签、值和单位在一起。对于大型表格,创建重复必要标题并保留链接回完整表格和源文档的元数据的行或行组块。