返回列表

语义分块 vs 固定长度切分:一个影响 RAG 效果的关键细节

检索答不准,换大模型就能解决吗?其实问题可能出在更前面。

 

通常卡系统的,多半在更前面。文档怎么切,很大程度上决定知识进向量库的最小单位,召回能捞到的最好结果,切片那一刻就基本确定。语义分块顺着文意断句,固定长度按字数切分,差距在后面三层被放大。

 

 

固定长度切分在切什么

 

固定长度按字符数或 token 数推进,数到阈值就落刀。落点在哪,内容说了不算。

 

表格可能最先受到影响。表头留上一块,数值推下一块,召回片段只剩没列名的数字,模型可能难以准确理解。条款同样可能不完整,责任约定里的例外情形常被切走,条件和结论分居两处,查到前半段可能产生偏差。论证段也可能受影响:因果连词和代词指向上一块,“因此”“上述”“该方案”一断,孤立片段可能丢失指代对象,向量里信息不完整。

 

代码文件按固定长度切可能问题更明显。一个函数被劈成两半,检索到函数签名却拿不到实现,或拿到实现丢了定义,补全代码时模型可能缺乏足够依据。

 

overlap 是一种常见的工程手段,相邻块共享几十token当缓冲。它缓解断句,也造冗余。块数变多,存储和嵌入成本跟着涨,召回里还冒出两个高度重复的块,挤掉真正相关的第三块。

 

 

 语义分块的三道判据

 

 

标题层级是第一道。章、节、条自带结构标记,标题一出现就是边界,标题路径还能写进块的元数据,检索时圈范围。段落和版式边界是第二道,换行、列表、表格块、代码块都指向完整表达单元。句间相似度是核心。

 

句间相似度把每句转成向量,算相邻句的余弦相似度。一段连贯文字相似度维持高位,话题一转就掉下去,掉到局部低点的位置就是切点。工程上取整篇相似度分布的某个百分位当阈值,低于阈值断开,过短的碎片并回相邻块,块既完整又不太长。阈值没有银弹,常见实践中可在一定区间内尝试,行业文档语义稠密取低些,闲聊类取高些。中英混排文档,单语嵌入模型对跨语种句对不敏感,切点会漂,先按语种分段再切更稳。

 

还有两条加强线。迟分块,先让长文整体过模型拿 token 级向量,再按边界池化成块,每块向量仍带全局上下文,代词不落空。命题级切分,把文本拆成能独立成立的最小陈述句,先补全代词再入库,粒度更细,存储开销也明显膨胀。

 

 

切分质量很大程度上影响召回上限

 

很多团队把不准怪到嵌入模型头上,接着换模型加 rerank,提升有限。问题可能出在优化顺序上。

 

切分定候选集,嵌入模型定候选集内排序,重排只是把候选再排一遍。。

 

成本跟着切分走。块太碎,单条查询指标 recall@k 的上限很大程度上由切分决定,某块被截断可能无法召回,cross-encoder效果也有限,它只处理已进列表的内容。

 

要召回更多块才凑齐答案,prompt 变长,延迟和开销一起涨。块太长,噪声混进上下文,模型在无关段落挑答案,幻觉概率抬头。粒度太粗时改一句话要重建整块向量,增量维护发沉。

 

常见实践中可参考不同档位:较短片段适配 FAQ 短问答,中等片段适配研报段落,较长片段适配整表或长论证,但越大噪声越多,不是越大越好。

 

 

 两个误区要避开

 

你以为块切得越碎越准?

 

错了。块越小,语义越不自足。百来字片段里"该方案""其核心"没落脚点,向量表达被拉偏,匹配反而更飘。影响精度的是块内语义是否闭合,块大小在很大程度上是结果。几百字、块内能独立讲清一件事的切法,多数时候比整齐的 256 字更稳。

 

切完不复检,是第二个坑。切分是流水线最早一环,也是最少回头看的一环。

 

复检通常可参考两步。抽样审计:随机抽取若干块人工读,统计读不懂、缺主语、缺表头的比例,超过一定比例就调整策略。真实问题回测:准备若干条业务常问问题,人工标正确片段,测 recall@10,看多少题压根没召回对的,逐条溯源到块,分清切分问题还是参数问题。

 

小艾智能体

 

小艾的文档处理引擎可采用语义分块路线。文件可支持 PDF、Word、Excel、CSV、TXT、MD、HTML 与图片,上传后可自动识别格式、提取原文,按语义完整性切分为短片段,交 BGE-M3(北京智源研究院发布,1024 维)转换为向量存入 Milvus(Zilliz 开源向量数据库),并可建立向量与文本索引。检索端可提供向量、Elasticsearch(Elastic 公司全文检索引擎)全文、混合三种模式,语义相似与关键词命中可支持融合,为 RAG 提供相对更稳定的知识片段。切好的知识还可接入 Neo4j(Neo4j 公司图数据库)构建实体关系图谱,接入 Skills 技能系统与多种预置节点,把沉淀的知识关联到报告生成、智能问答这类具体流程上。

 

检索不准,别急着动模型。先回去看怎么切的。