G3.14.3phonetic and lookalike matching设计研究
同音或形近字的纠错不同于按字符编辑距离的匹配
别名: 同音匹配 · Soundex · 形近字
概念解释
把 night 打成 knight、把「未」看成「末」、把「银行」打成「银杭」,这些误差在字符编辑距离上可大可小,根子却不是「差了几个字母」。同音匹配走的是读音编码(Soundex、Metaphone、拼音),形近匹配走的是字形或键盘几何。Levenshtein 数的是符号串上的插入删除替换,听不见也看不见。三类误差可以碰巧被同一次编辑距离命中,但那是巧合,不能互相替代。
「纠错」在口语里常被当成一件事。匹配层必须分开:字符邻域、语音邻域、字形邻域是三张不同的网,网眼对着不同的失败。
机制
打字误差来自手指走位,邻键、转置、漏击在编辑距离上通常是 1,读音可以完全不同。听写和拼音输入的误差来自音到字的映射,hong 会写成「红 / 虹 / 宏」,编辑距离对汉字往往是 1 且语义无关,对拼音串则可能距离为 0(同一拼音不同字)。扫描和屏幕识别的误差来自字形相近,l/I/1、未/末,编辑距离同样是 1,但语音编码完全合不拢。
用一张编辑距离网去捞三种鱼,会在每种上都既漏又误:同音词常常编辑距离很大(cough / coff),形近而不同音的字会被语音网放走、却被过宽的 k 连同无关短词一起拖进来。机制对不上误差来源,阈值再调也只是在错误的空间里折中。
怎么研究
按误差来源建三份测试集,分别跑编辑距离、语音编码、字形模型。
- 范式:从查询日志和输入法候选里标注「邻键型」「拼音/同音型」「OCR/形近型」;对每个子集比较三种匹配器的召回与误伤。人名检索里 Soundex 与编辑距离的对照是经典做法。
- 自变量:匹配器类型、是否按输入通道(键盘 / 语音 / 扫描)选用匹配器。
- 因变量:按误差类型分层的召回、跨类型误匹配(用语音网去打邻键误差)的比例。
- 方法论注意点:用英语键盘误差集去评中文拼音误差会得到无意义的「编辑距离更好」。通道和语言必须与部署一致。语音编码会把大量不同词压进同一桶(Soundex 的粗粒度是已知的),误伤要按桶的大小报,不能只报「命中了同音目标」。
边界
不以语音或拼音为输入通道的产品(纯点击筛选、扫描枪只出条码)不需要同音网。形态丰富的语言里,同音与词形变化会缠在一起,不要把词干化的结果误当成语音匹配成功。品牌故意设计的非常规拼写(全部小写、数字换字母)会被语音网和形近网同时误伤,应进专有词表走精确。
怎么落地
- 先给误差分类:键盘通道以编辑距离为主;拼音和语音通道加同音索引;扫描件、拍照检索加形近。不要只用 k 覆盖所有入口。
- 同音桶必须比编辑距离更谨慎地进入结果,并在摘要里标「读音相近」,避免被当成同一个词。
- 维护一张故意非常规拼写的专有词表,禁止语音和形近网改写它们。
- 验证:各拿一条邻键错误、一条同音错误、一条形近错误。只开编辑距离时,后两条应明显弱于第一条;为后两条打开对应网之后,目标应能出现,且不要把另外两种误差的无关词带进来。