语义分块与中文预处理要点

话题来源: RAG系统优化全攻略:从召回率提升到幻觉抑制的7个技巧

很多中文检索系统一上来就谈向量模型,结果真正拖后腿的,往往不是模型,而是文本怎么切、怎么洗。句子没断好,标点噪声一堆,专有名词又被拆得七零八落,后面的召回、重排、摘要都会跟着发飘。说白了,语义分块和中文预处理不是“前处理”,它更像地基;地基歪了,楼再高也会晃。

语义分块:切的不是长度,是信息边界

固定字数切块看似省事,实际很容易把一个完整意思硬掰开。中文里尤其明显:一段关于“医保报销”的说明,可能前半句在定义政策,后半句才给条件,切断后检索出来只剩半截,用户看了更迷糊。语义分块的目标不是把文本切整齐,而是沿着主题转折、句群边界、标题层级去断开,让每个 chunk 保留一个相对完整的知识单元。

实践中常见的做法有三类:

  • 按标题和段落优先切分,保留层级结构
  • 按句号、分号、冒号等中文标点做软边界
  • 在主题突变处插入断点,而不是机械按长度截断

有些团队做过内部对比测试,语义分块后,技术文档类问答的命中率能比纯固定长度切分提升十几个百分点,尤其是流程说明、政策解读、产品手册这类“上下文依赖强”的文本,差异更明显。

中文预处理:别让噪声偷走召回

中文没有天然空格,预处理的价值比英文场景更高。最先要处理的是乱码、全半角混用、异常空白、重复标点,这些东西看起来不起眼,却会直接污染分词和检索词表。比如“AI”“AI”“A.I.”如果不统一,系统会把它们当成三组不同概念;再比如“5G/5 G/5G”,如果不归一,关键词检索几乎等于白做。

更关键的是分词策略。中文语义分块若依赖分词,词典必须贴近业务域。医疗、法律、金融、电商各有一套高频专有词,通用词库经常把“信用卡分期”“胰岛素泵”“劳动仲裁”切得很尴尬。一个很实际的办法是:先做领域词表补充,再做同义词归一,最后处理数字、单位、英文缩写的标准化。

一个容易被忽略的细节

很多人只关注“切多大”,却忽略“切之前是否理解文本结构”。Markdown 标题、列表、表格、引用,这些本来就是天然语义锚点。只要保住它们,块的质量通常会比纯字符截断稳定得多。相反,如果把表格内容洗成一长串无标记文本,检索时连字段关系都丢了,后续模型再聪明也只能猜。

真正成熟的中文预处理,不是把文本洗得“干净”,而是把该留下的结构留下来。

评估标准不该只看长度

判断语义分块好不好,别只看 chunk 数量。更值得观察的是三个指标:边界是否自然、命中内容是否完整、下游回答是否少废话。很多系统一开始块切得很碎,召回看似上去了,生成却更啰嗦,因为上下文拼接时充满重复和碎片。换句话说,分块不是越细越好,预处理也不是越狠越好,能让模型少猜一点,才算真本事。

评论