拼写纠错(Spelling Correction)指的是:系统识别出输入里的错字,把它换成最可能的正确写法;在搜索场景里,也可以是“不管你怎么打错,都按你大概率想找的那个词去查”。
原理:分两步,而非“查字典”
纠错几乎从来不是拿输入去词典里对一遍。它拆成两步。
第一步,生成候选。用很小的改动去改写输入:换一个字母、删一个、插一个、把相邻两个字母对调;中文还要覆盖同音字、形近字、键盘上挨着的键。改动次数叫编辑距离(Edit Distance),改动越少越像的候选排得越前。这一步只负责广泛生成候选。
第二步,给候选打分排序。这里用噪声信道模型(Noisy Channel Model):把用户的输入想象成“正确词穿过了一条嘈杂的线路,被打坏了”,纠错就是反过来推——哪个原词被打坏之后,最可能变成现在这个样子。
打个生活化的比方。在很吵的饭馆里,朋友说了一句话,你听成“明天去机厂”。你脑子里不会去检索“机厂”这个词,而是自动找一个“听着接近、但讲得通”的表达——机场。你其实用了两股力量:听起来像不像,以及这个词在上下文里合不合理。
噪声信道模型就是把这两股力量乘起来打分:候选词本身有多大可能出现 × 从它变成你实际输入的可能性有多大。分最高的胜出。
和相邻概念的区别
| 概念 | 它假设什么 | 输出什么 | 典型场景 |
|---|---|---|---|
| 拼写检查(Spell Checking) | 输入可能拼错 | 只标出可疑词 | 编辑器里那条红波浪线 |
| 拼写纠错(Spelling Correction) | 输入可能拼错 | 给出、或直接采用最佳改法 | 搜索容错、输入法自动更正 |
| 自动补全(Autocomplete) | 输入还没打完 | 预测后半截 | 搜索框下拉建议 |
| 查询重写(Query Rewriting) | 输入没拼错,只是说法和文档对不上 | 改写或扩展查询 | 同义词扩召回、语义检索 |
对从业者的意义
容易出问题的三处:候选要覆盖中文的拼音、形近、简繁和混排,照搬英文那套字母编辑距离会漏;打分要带上下文,“在即”和“在级”单看都像词,得看整句;最难的是决策,改还是不改,以及要不要同时保留原查询。宁可少改,不可错改——用户的品牌名、人名、生僻术语被“纠正”一次,信任就掉一截。稳妥做法是纠错后仍把原查询一起送进检索,或只在无结果、结果稀少时兜底纠错。具体阈值各家用得不同,以官方文档为准。
对普通人的意义
你打错两个字照样能搜到东西,不是系统会读心,是它在后台默默算了概率。这也解释了输入法为什么老把你的名字改成常用词:它按统计办事,而你的名字在概率上“不像话”。被改错,多半是缺上下文,或缺一份你自己的词表。
