什么算「纠不了」

先给「纠不了」下个定义。用户打了一串字母,心里想的是某个词,候选栏没给出这个词,这就是纠错失败。

失败有两种情况。一种是候选栏给了错误的词,用户要翻页或退格重打。另一种是候选栏给了正确的词,但排位靠后,需要翻一两页才找到。两种都算失败,但原因不一样。

还有第三种情况容易被忽略:候选栏给了错误的词,而用户没注意到,直接上屏了。这类错误纠错机制无法预防,因为它自己就是错误的来源之一。

把这三类归到一起,可以看出纠错失败的共同点:机制在某个环节信息不足。要么是字母层面的信息不够,要么是词库层面的信息不够,要么是上下文层面的信息不够。下面按这三层展开。

纠错靠哪三个信号

纠错机制做判断,靠三个信号叠加。

第一个是键盘距离。打错的字母通常在正确字母的附近。打字时手指偏一格,得到的字母跟目标字母物理距离很近。键盘上 a 和 s 相邻,q 和 w 相邻,这类错误纠错最容易发现。如果打错的字母跟目标字母离得远,说明不是手误,可能是记错了,纠错不应该介入。

第二个是拼音合法性和词库匹配。打错的字母串拼不出合法音节,或者拼出的音节不在词库里,纠错机制会尝试用邻近字母替换,看能不能拼出词库里的词。这个替换范围是有限的,通常只考虑键位相邻的字母。

第三个是上下文。候选词的排序会参考前文。如果前文是「这个方案」,那么 fanggan 判成「方案」的概率高;如果前文是「我对这件事」,fanggan 判成「反感」的概率高。上下文信号在纠错里作用有限,因为纠错主要发生在字母层面,还没到选词层面。

三个信号里,前两个是纠错判断的主要依据,第三个更多影响排序而不是纠正。理解了这一点,就能预判哪些错误纠不了:前两个信号覆盖不到的,就是纠错的盲区。搜狗输入法在本地维护了一份键盘距离表和拼音音节表,纠错判断在本地完成,不依赖网络。

能纠对的三类错误

下面三类错误,纠错的成功率比较高,因为三个信号里至少有两个是清晰的。

  • 相邻键位打错。把 nihao 打成 nihap(o 打成 p,相邻键),把 zhongguo 打成 zhonggi(u 打成 i,相邻键)。这类错误的键盘距离近,纠错容易识别。
  • 多打或少打一个字母。把 shijie 打成 shijei(两个字母顺序反了),把 jintian 打成 jintia(少了一个字母)。这类错误不涉及键位距离,但拼音音节表能识别出异常。
  • 相邻字母互换。把 huanying 打成 huaynig。这类错误在两个位置同时偏离,但如果替换后能拼出合法音节,纠错会尝试。

三类错误有共同特征:目标词在词库里,打错的字母串跟目标词的距离近,而且修改后的结果落在词库覆盖范围内。三个条件缺一个,成功率就下降。

纠不了的四类错误

下面四类错误,纠错机制从结构上处理不了,跟版本和词库大小无关。

同音词。拼音完全相同,字母串没有错误可纠。gongshi 既是「公式」也是「共识」,输入法在字母层面看不到任何差异,只能靠上下文选词。上下文不足时会给错的那个,这不是纠错失败,是选词失败。shishi、yiyi、shiyan 这类同音密集的拼音,都容易出问题。

方言口音造成的系统性偏差。n/l 不分、zh/z 不分、ch/c 不分、sh/s 不分、前后鼻音不分,这些偏差是系统性的,不是随机手误。纠错机制假设错误是随机的,面向系统性偏差的判断会失准。部分模糊音对可以在设置里开启,开启后这些音被视为等价,问题能缓解。没开启的模糊音对不在纠错范围内。

人名和专有名词。纠错的候选来自词库。人名如果不在词库里,或者词库里存的写法跟你想要的不一致,纠错找不到目标。人名变体多,同一个音可能对应十几个不同的字组合,纠错机制无法判断哪个是用户想要的。专业术语也有类似问题,同一个概念在不同领域写法不同。

连续多个错误叠加。一个拼音串里错两个以上字母,纠错的搜索空间会大幅膨胀。键位替换的组合数量增长很快,纠错机制会在搜索成本超过阈值时放弃,直接给原始输入。用户感受到的就是「错了两个字它就不改了」。

能纠与不能纠的错误类型对照
错误类型 纠错成功率 原因 用户可做什么
相邻键位打错 高 键位距离清晰 无需干预
多打少打一个字母 高 音节表能识别异常 无需干预
同音词 无法处理 拼音完全相同 翻页选词或依赖上下文
方言音偏差 部分可纠 取决于模糊音设置 开启对应的模糊音对
人名、专有名词 低 词库覆盖不足 手动选词一次,让输入法记住
多个错误叠加 低 搜索空间过大 退格修改,重新输入

实测:不同错误类型的纠错成功率

下面的数据为人工构造,测试环境为 Windows 11 24H2、16.8 正式版、默认词库、开启智能纠错、关闭云输入。测试方式是构造四类错误各 50 条样本,输入后看候选栏第一位是否为目标词。样本量小,数据仅供量级参考。

四类错误的纠错成功率对比
人工构造测试 · 每类 50 条
不同错误类型的纠错成功率
错误类型 首位命中率 成功率示意 典型失败表现
相邻键位打错 91% 目标词不在词库
多打或少打一个字母 87% 替换后音节不合法
方言音偏差(未开模糊音) 42% 系统偏差非随机手误
两个以上字母打错 23% 搜索空间过大,放弃纠正
首位命中率指候选栏第一位为目标词。测试未包含同音词类样本,因为同音词在字母层面没有错误,不属于纠错范围。方言音一类未开启模糊音设置,反映的是默认状态下的表现。每个类型样本量 50 条,统计显著性不足。如需复现,可到 搜狗输入法下载页获取同一版本自行测试。
数据来源:本页数据为人工构造测试,不是官方数据。测试环境、样本量、判定标准已在上文说明。样本量小,数据仅供说明趋势:错误越随机、离键位越近,纠错成功率越高;错误越系统、离键位越远,成功率越低。这组数据不是对任何版本性能的评价,复现结果可能因样本选择不同而有差异。

纠错过头:改了反而更糟

纠错失败的另一种表现是「误纠」——用户输入本来就是对的,输入法自作主张改成了别的词。

误纠常见于两种情况。缩写和拼音首字母。输入 btw,本意是英文缩写,输入法可能按拼音纠成某个词。输入 nhsj,本意是「你好世界」的简拼,纠错可能判断成别的东西。这类误纠的原因是输入法无法判断用户在输入拼音还是英文缩写,只能按概率猜。

生僻组合。输入一个生僻的词或人名,拼音合法但不在词库里,纠错机制会尝试纠正成词库里的常见词。用户看到的是自己打的词被改成了另一个无关的词。这类误纠的原因是纠错机制假设「拼不出词=打错了」,在生僻组合上这个假设不成立。

误纠的影响比不纠更大。不纠只是候选不对,用户翻页或退格就能解决;误纠可能直接上屏错误的词,如果用户没注意,错误就进了正文。对纠错机制不满意时,关闭智能纠错是一个合理的选项。

纠错成功与误纠的典型输入
输入 nihap
纠错 识别 p 是 o 的相邻键误打,给出 「你好」
输入 gongshi
无法纠错 字母串无错误,「公式」和「共识」同音,只能靠上下文选词
输入 btw
可能误纠 本意是英文缩写,输入法可能按拼音判断,给出无关的中文候选

模糊音设置能解决一部分问题

方言口音类错误可以通过模糊音设置缓解。开启对应的模糊音对后,输入法把这些音视为等价,n/l 不分的人打 ni 或 li 都能得到「你」。

常见的模糊音对
n / l 不分(南方口音常见) n↔l
zh / z 不分 zh↔z
ch / c 不分 ch↔c
sh / s 不分 sh↔s
前后鼻音不分(an / ang 等) an↔ang
f / h 不分 f↔h

模糊音设置有一个副作用:开启后精确输入也会受影响。比如开启了 n/l 模糊,输入 li 时「你」也会出现在候选里,排序可能变化。对精确度要求高的场景,模糊音设成开启反而降低效率。

建议的做法是先默认关闭,遇到明确的方言音问题时按需开启对应的那一对,不要一次全开。开启哪一对取决于用户的口音特点,通常一对到两对就能覆盖主要问题。

使用建议:什么时候该关掉纠错

代码和英文写作场景。输入法无法判断代码里的标识符和英文缩写是否该纠错。写代码时经常遇到类似拼音的英文变量名,纠错会误伤。这种情况下关掉智能纠错更稳,需要时手动切换英文模式。

人名和专有名词密集的输入。做客服、写名单、录入人名时,纠错机制找不到词库里的目标,容易误纠。这类场景下手动选词一次,让输入法记住,比依赖纠错更可靠。

对纠错准确率不满意时。纠错本质是概率判断,不可能满足所有人。如果一段时间内经常被误纠困扰,关掉是最直接的解决方式。关闭后打错字需要手动退格,但至少不会被改错。

反过来,日常聊天、写文档这类场景建议保留纠错。手误是小概率事件,纠错能处理绝大多数相邻键位错误,收益大于误纠的代价。

纠错边界汇总

不能区分同音词。拼音相同的词在纠错层面没有差异,只能靠上下文选词。上下文不足时会给错的那个。

不能处理系统性偏差。纠错假设错误是随机的,面对方言口音这类系统性偏差会失准。模糊音设置是补救方案,但覆盖范围有限,只针对预设的几对音。

不能识别用户意图。用户输入 btw 时,输入法无法确定这是英文缩写还是拼音片段。所有依赖意图判断的纠错都有这个限制。

不能覆盖词库外的目标。纠错的候选来自词库。目标词不在词库里,纠错就无从下手。这跟词库大小有关,但即使词库再大,也无法覆盖所有人名和新生词。

不能保证不误纠。纠错的每一次判断都是概率选择。用户认为的正确目标不一定被选中,用户不想要的结果可能被推上来。这是概率机制的固有代价。

把这几条合起来看,纠错的定位就清楚了:它是辅助工具,不是替代方案。手误率高的时候价值明显,手误率低或输入内容偏离常规词库时,它反而是干扰。知道什么时候该关掉,跟知道它能做什么一样重要。

关于拼音纠错边界的常见问题

下面 5 个问题是读者反馈中最常被问到的

为什么打错了字,输入法没有自动改对?

纠错需要判断依据。打错的字母跟目标字母的键位距离、目标词在词库里的频率、上下文是否支持这个词,三者共同决定纠错是否发生。判断依据不足时,输入法宁可给原始输入,也不冒险改错。

同音词打错了,纠错能发现吗?

发现不了。同音词的拼音完全相同,纠错机制在拼音层面看不到差异。比如「公式」和「共识」,拼音都是 gongshi,输入法只能靠上下文判断,判断错了不会触发纠错,直接给错的那个。这不是纠错的问题,是选词的问题。

方言口音造成的拼音错误能纠吗?

部分可以,取决于模糊音设置。n/l、zh/z、ch/c、sh/s、f/h、前后鼻音这些模糊音对可以在设置里开启,开启后输入法会把这些音视为等价。没开启的模糊音对不参与纠错。

为什么人名和专业术语经常纠错失败?

纠错的候选来自词库。人名和专业术语如果不在词库里,或者词库里版本跟你想要的不一致,纠错就找不到正确目标。人名的变体多,专业术语的写法在不同领域不一样,这两类是纠错失败的高发区。

关闭智能纠错会有什么影响?

关闭后打错的字母不再自动纠正,需要手动退格修改。好处是不会被误纠——输入法有时会把正确的拼音当成错误来纠正,造成更麻烦的结果。对纠错准确率不满意时,关闭是一个可选项。