欢迎光临
我们一直在努力

中文检索为什么比英文难,分词这一步就决定召回上限

中文检索为什么比英文难,分词这一步就决定召回上限

做过英文检索的人转到中文,第一件事就会觉得意外。英文按空格切开就是词,中文连切都不好切。一句话里哪两个字该连在一起,哪两个该分开,不同切法给出的检索结果能差出一大截。

这件事在 LLM 应用的检索环节里尤其要命。召回没拿到正确的文档,后面重排再强、模型再好,也只能在错误的材料上做文章。

分词为什么难

中文没有天然分隔符。字符串按字切,粒度太细,召回一堆噪音。按词典最长匹配切,遇到新词和专有名词就失灵。用户说的一款型号、一个缩写、一个新造的说法,词典里可能都没有。

难在几个地方。歧义切分,同一串字有两种合理切法,语义完全不同。未登录词,产品名、人名、型号,词典里没有。领域词,同一个词在医疗和电商里的边界不一样。

工程上通常不追求最准,追求够用且稳定。常见选择是按词切加按二元字组合兜底,或者两个索引同时建,一个粗一个细,混合出结果再融合。

型号和编号最容易被切碎

这是中文检索里最容易被忽略的问题,也是实际投诉最多的一类。

内部编号、型号、订单号这类东西,分词器很容易按字符或者按标点切碎。用户搜一个完整的编号,切开之后匹配不上,检索返回空。而这类查询往往是最精确、最该命中的,用户输入完整编号的意思就是要那一条。

解法是单独建字段。把编号类的内容抽出来,按原文整串存成一个不分词的字段,检索时走精确匹配或者前缀匹配。别指望同一个字段既做语义又做精确,两边的要求相反。

命名也不统一的时候更麻烦。同一个型号有带横线和不带横线两种写法,有全角有半角,有大小写差异。入库时做一次归一化,去掉分隔符、统一大小写、全角转半角,两个版本都存,检索时也归一化。这一步做了,命中率会有肉眼可见的提升。

同义词和口语表达

用户说的词和文档里的词经常不是同一个。用户说退换货,文档里写售后服务。用户说电池不耐用,文档里写续航衰减。用户说卡顿,文档里写响应延迟。

纯向量检索能部分解决这类问题,语义相近会被检索出来。但词法那一路如果完全没有同义扩展,混合检索的效果就发挥不出来。

常见做法是维护一份同义词词典,放在检索层做查询扩展。用户输入之后,把同义词一起送进词法检索,权重降低一些。词典不用很大,几百条覆盖业务高频说法就够用,而且可以持续补。

这份词典的价值在于它是人工确认过的映射,比模型猜的可靠。用户投诉某类问题总检索不到的时候,第一件事就是看这个说法在不在词典里。

大小写、繁简、全半角这些琐事

这些看起来是小事,做成自动化才不占人脑。归一化放在写入和查询两端,同一套规则。

英文大小写统一转小写。全角字符转半角,中文标点也一并处理,很多人复制粘贴过来的内容带全角。繁体转简体,这套转换要谨慎,有些专有名词繁体写法反而是标准写法,那就保留原文另外存一份。

还有一个容易忽略的,数字和单位。一千和 1000,五百克和 500g,同一件事两种写法。检索层能做的有限,常见做法是在解析阶段抽结构化字段,数值单独存,支持范围查询。这件事交给检索解决不如交给数据库。

词法那一路怎么建

前面的混合检索篇讲过两路召回加融合排序,这里补中文场景下词法那一路的具体建法。

分析器的选择决定了分词方式。通用中文分析器适合正文,粒度适中。按二元字组合的分析器召回高但噪音多,适合做补充。精确字段的分析器不分词,只适合编号和枚举值。同一个索引里对不同字段用不同分析器,这是标准做法。

停用词要谨慎。通用停用词表里常有不太这个词,删掉之后否定语义就丢了。检索里丢否定词,会让用户搜不支持退货,召回一堆支持退货的文档。宁可多留一些词,也别把语义关键的分词删掉。

同义词在索引期还是查询期展开,是个取舍。索引期展开会让索引变大,但查询快。查询期展开灵活,改词典立刻生效。业务词典经常变,选查询期。

中文召回率怎么测

评测方法是承认这个环节需要数据说话。准备一批真实问题,人工标出每条问题该命中哪几个文档,然后用检索跑一遍,看目标文档有没有进前二十。

这个过程和评测篇讲的是一个路子,不测就不知道改动有没有用。中文检索的改动特别容易互相抵消,调了分词召回上升但噪音也上升,重排能压住噪音,但如果没测就判断不了。

有一个便宜的替代指标,检索结果被采纳的比例。用户在拿到答案之后点了追问换个说法,或者手动去翻原文,说明这次检索没满足他。把这个行为埋点统计,能发现一批需要补词典或者补文档的地方。

英文混排和技术文档

技术文档里中英混排是常态。缩写、库名、函数名、错误码,这些都不该被中文分词器处理。做法是识别出英文片段单独处理,按整词匹配或者按前缀匹配。

错误码这类东西尤其要精确。用户贴一段报错来问,系统检索不到就答非所问。把错误码、异常名抽出来建精确字段,这条链路的命中率会明显提升。

结合系列

混合检索与重排那篇讲的是两路召回的结构,这篇补上中文场景下词法那一路的具体建法。扫描件解析那篇的解析质量直接决定这边的分词效果,解析错的字,分词也跟着错。上下文压缩篇的原则在这里同样适用,检索回来五条准的胜过二十条杂的,噪音会挤占模型的注意力。评测篇的方法直接用在这里,中文检索的每一次调整都应该有标注集验证。

赞(0)
未经允许不得转载:171主机测评 » 中文检索为什么比英文难,分词这一步就决定召回上限
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址