感谢捉虫:聊聊自动更正的前世今生
2024-10-8 15:0:0 Author: sspai.com(查看原文) 阅读量:1 收藏

如果将各种常见错误的危险性做一个排行,那么拼写错误很可能进入榜单的前三名。自从人们开始使用文字记录一切,拼写错误就一直伴随着人类的历史,它对我们的影响和文字一样大,比如 Google 的名字实际上是拼错的 Googol,大力水手喜欢吃菠菜是因为 1870 年的德国化学家 Erich von Wolf 写错了菠菜铁含量的小数点,这些看似趣闻的拼写错误其实已经深深渗透进了我们的生活。

如果你喜欢更具爆炸性的类似事件,NASA 损失价值 1700 万美元的「水手 1 号」太空探测器是因为代码中将代表圆半径的符号 R̄ 写成了 R;Google 的有害网站列表里多出了一个正斜杠符号,这导致全球互联网在 2009 年 1 月 31 日陷入混乱接近 1 小时。

Ozf5bciJuosQfcxkZwqcpfvjnog
水手 1 号探测器因偏离轨道,在发射后 239 秒被摧毁。图源 Gunter's Space Page

小错字可能造成大麻烦,每天使用文字处理软件和社交媒体的现代人可能会更有感触。PC 和智能手机承包了我们的生活,键盘成为了连接世界的重要工具,随着输入量的增加,拼写错误出现得越来越频繁。2024 年 7 月,Microsoft 开始在 WIndows 11 的记事本应用中启用拼写检查和自动更正功能,此时距离 Microsoft 推出他们的首个拼写检查器软件已经过去了 31 年。

就像许多影响至今的伟大发明一样,拼写检查器并不是直接从某个天才脑袋里取出来的发光灯泡,它有着 60 年以上的历史,期间经历过不计其数的改进和创新以适应人们的需求。最早的拼写检查器可以追溯到个人电脑被发明之前,那时,全世界大概只有 100 多位程序员,没有专利保护,没有软件收入,他们只是认真工作和彼此分享想法,每人每年就能产生数百项新发明。

7 卷纸带和 10000 个单词

Lester Donald Earnest 是 20 世纪 50 年代的佼佼者之一。1953 年,他从加州理工学院获得了电气工程学士学位,从此开始了自己的职业生涯。作为世界上的第一批计算机程序员,Earnest 受到了军方的重用,他于 1954 年进入海军航空发展中心,成为了负责航电系统和计算机项目的官员;随着铁幕缓缓降下,他被调入麻省理工学院的林肯实验室,协助设计 SAGE 防空系统,以应对可能来袭的苏联轰炸机。

SAGE 是一个技术奇迹,它是世界上第一个实时计算机系统,这意味着它的响应速度足够快,操作者不必等待它像其他大型机一样慢吞吞的吐出数据,而是几乎立刻就能拿到运算结果。SAGE 的许多技术来自 IBM,包括控制整个系统的电子管计算机,它的覆盖面积约有一个足球场那么大,但在此之前,比它大得多的计算机都没有如此神速。

YJKVbqhX0ojpYyx3ulTc79L7nFe
四层楼高,占地 1.4 公顷的 SAGE 碉堡。图源 wikipedia

电子管计算机带来的技术进步让 Earnest 有了在工作之余实现自己创意的机会。1959 年,Earnest 和同事们开发了世界上最早的手写识别系统,运行它的计算机比足球场小得多,但也足够填满一个相当大的房间。根据描述,这个系统的识别效率可能比 90 年代的 Palm 和 Newton 更好,它可以准确识别手写的潦草字迹。不过,在 60 年代初,该系统没有用武之地,因此也就没了下文。

Earnest 决定创造更加实用的计算机系统,他很快从自己身上找到了灵感。Earnest 每天通过计算机输入的文字比其他人都多,他不仅要操作各类计算机系统,还要写作大量的报告和论文,在这些工作中,任何一个微小的拼写错误都会引发严重问题。因此,从 1961 年开始,Earnest 开始着手于拼写检查器的开发,他和学生一共开发了三个原型,虽然过程不是一帆风顺,但他们最终成功了。

Earnest 的首个拼写检查器基于他发明的手写识别系统,它能够根据手写单词查询词汇表,然后列出最相近的几个匹配项。这个原型的工作方式类似现代手写输入法的候选词列表功能,它的效率不高,词汇表只有记录在 7 卷纸带上的 10000 个单词,并且需要使用者从匹配项中手动输入每个结果,因此只被用作手写识别系统的子程序。

CAjUb2YfFoDm23xVNLxceh6UnFc
Earnest 的 7 卷纸带。图源 Stanford University

1965 年,Earnest 来到斯坦福大学,担任斯坦福人工智能实验室的执行官。他带来了自己的纸带词汇表。在此,Earnest 招募了一名研究生来开发新的拼写检查器。第二个原型在两天内完成,该原型全部由 LISP1.6 语言编写,但代码水平堪忧,功能不全。它的运行速度相当慢,只会列出不存在于词汇表中的单词,标出其所在页码和行数,程序本身不会识别错误字符,也不会提供正确拼写。

70 年代,以 Digital Equipment Corporation 生产的 DECsystem-10 大型计算机开始在世界各地的大学和实验室中广泛应用,斯坦福人工智能实验室亦选择了该产品。1971 年,Earnest 和另一位研究生 Ralph Ghorin 开始着手基于 DECsystem-10 的拼写检查器软件,第三个原型运行的非常好:它可以查找与正确单词匹配的单个字符错误,并以交互方式帮助用户进行更正。除此之外,高性能的 DECsystem-10 平台和汇编语言都让该原型变得高效和精准,它被命名为 SPELL。

尽管 SPELL 的原型也是基于 Earnest 的 7 卷纸带,但只靠这本词汇表并不能让它跻身于最流行的拼写检查器之列。Earnest 和 Ghorin 在 SPELL 中加入了一些基于规则的初级「智能」,除了照本宣科的从词汇表中查找原单词之外,SPELL 还学会了剥离和修改单词中的常见前缀和后缀,其中,trypref 和 tryword 函数用于剥离单词的前缀和后缀,这些前后缀规则存储于结构体数组 perftab 和 suftab 中;suffix 函数用于应用后缀规则,dict 函数用于查找单词,如果经处理过的单词在词汇表上依然「查无此词」,才会被判定为拼写错误。

从原理和工作方式上看,SPELL 可能是最早具备现代拼写检查器主要特性的原型,Earnest 没有为它申请专利,而是将其免费提供给世界各地的 DECsystem-10 用户。也正是因为 Earnest 的乐于分享,没有专利保护的 SPELL 产生了众多继任者,这让它的生命一直延续至今。比如 Unix 中常用的 International Ispell,它基本上是用 C 语言构建的 SPELL 移植;GNU 上的 Aspell 则是一个优秀的后来者,它支持约 70 种语言,同时还有可用于其他类 Unix 和 Windows 的分支。免费办公套件 OpenOffice 最初使用的 MySpell 是 C++ 编写的开源拼写检查器集成,它后来被支持复杂单词变化和复合词汇的 Hunspell 取代。

不过,早期的拼写检查器并不是 SPELL 一枝独秀,另一位捷克裔美国语言学家 Henry Kučera 也被公认为拼写检查器的先驱,他的发明成果促成了 International Correct Spell,一种被用于 WordStar 和 MicroSoft Word 等文字处理系统的应用程序。除此之外,还有许多人声称自己才是第一个发明人,比如宾夕法尼亚大学的 Zellig S. Harris 和 Henry Hiz,他们领导的团队于 1959 年创建了世界上第一个可以分析英语语法的计算机程序,这个程序可以检查动词的时态和大小写,进而确定句子的格式和拼写正确。宾夕法尼亚大学坚称该项目是所有拼写检查器和语法检查器的鼻祖,但就实现原理和代码而言,这些话的说服力显然还不够强。

更先进的……穷举法?

尽管拼写检查器在 60 年代出现,但它们终归是大学和实验室的专属。软件是计算机功能的扩展和延伸,当 PC 开始流行,拼写检查器才获得了真正的普及。1993 年 10 月,Microsoft 推出的文字处理软件 Word 6.0 附带了一项名为 AutoCorrect 的全新功能。它的创造者是 Dean Jacob Hachamovitch,他毕业于哈佛大学,拥有数学学士学位。

自 90 年代初进入 Microsoft 的 Word 部门时,Hachamovitch 的工作就和拼写检查器绑在了一起。Hachamovitch 认为,人们在 PC 上做的最多的事情就是打字,如果能让打字变得像说话一般流畅自然,那么人们的表达欲和创造力就不会被蹩脚的输入工具所限制。他要做的就是优化 Word 的输入体验,将用户从不断检查和纠错的折磨中解救出来。

TSz5bCckroJSjmxKuG6c8wwlnwh
Word 6.0 并不是当时唯一流行的文字处理软件,他们的竞争对手 WordPerfect 也有拼写检查器。图源 Eli`s Software Encyclopedia

不过,Hachamovitch 并不想开发一款外挂在 Word 上的拼写检查软件,他看上的是 Word 的词汇表。Word 的创造者 Charles Simonyi 设计这个功能的本意是为了在文档中快速插入预设内容,比如将「kk」设置为「Kiririn」,在文档中键入 kk 并按下 F3,刚刚输入的内容就会被替换为 Kiririn。

Hachamovitch 意识到这个功能可以被用于纠正输入错误,他带领团队整理了一份常见输入错误与正确拼写的对照清单,将其输入 Word 的词汇表。但这样的拼写检查不是实时的,它也无法检查上下文,总不可能要求用户每输入一个单词就按一下 F3,但 Hachamovitch 用一个天才的蠢办法解决了这个问题:他将触发替换的功能键从 F3 换成了空格,因为英文单词本身是用空格分隔的,这样每输入一个单词就会「自动」触发一次拼写检查。

Hachamovitch 和他的团队花费了很大力气才将拼写检查器做进了 Word 里,除了那张似乎永远填不完的对照清单之外,最令人头痛的是如何让程序学会区分各种例外情况,比如常见的双大写错误(如 THis)和单词缩写(CD),他们不得不制作了另一份清单,将那些容易被识别为拼写错误的词汇筛选出来;还有一些非书面用语和惯用语,内置词典无法识别它们,解决这个问题的又是一份新的清单,这份清单中收录了词典中没有、但被用户判断为正确的单词。随着时间推移,Hachamovitch 的团队还做了更多的词汇表以覆盖各种情况,他们根据收录单词的特征为这些词汇表做了一个总索引,这样程序就可以快速调用它们。

最后,Hachamovitch 的拼写检查器还得通过 Microsoft 这一关。不用说也能猜到,Microsoft 的审查主要针对敏感词,他们当然不想让自家的软件推荐某些「粗鄙之语」的正确拼写,Hachamovitch 只好对照词典,删除了所有被标记为粗俗的词。

尽管做了这些努力,AutoCorrect 依然存在许多缺点,比如它很容易将人名替换成近似的单词,一些愤怒的用户因此向 Bill Gates 发邮件抱怨此事;另外,其自动更正机制产生了一些不易被用户察觉的奇怪错误,比如合作(cooperation)被替换成了加州城市库比蒂诺(Cupertino),可能是欧洲的官僚们首先发现了会议上的发言稿被改成了「加强国家之间的库比蒂诺」或「在两国之间加入库比蒂诺」,在此之后,「库比蒂诺效应」一词应运而生,用以在语言学上指代被计算机系统错误猜测的词语。

在移动时代

AutoCorrect 当然不是首个用于 PC 的拼写检查器,但在它之前,用于文字处理软件的拼写检查器一般是一个独立的程序,它们扫描整个文档,然后发现和更正错误,而不是像 AutoCorrect 一样高度集成,并且实时检查用户输入的每个词。

不过,AutoCorrect 一开始只是 Word 的独占,在进入 2000 年以前,为每个软件单独开发一个拼写检查器是行业主流。直到 Apple 为 Mac OS X 开发了世界第一个操作系统层级的拼写检查器 NsSpellChecker,它是 macOS 应用程序框架 Cocoa 上的拼写检查服务接口,开发者只需在自己的 Cocoa 应用程序中创建一个实例即可调用 NsSpellChecker,这使其检查范围覆盖系统和第三方应用程序中几乎所有可以输入的地方。

如今,系统层级的拼写检查器无处不在,它们的工作方式大相径庭:或是检查一切文本输入框,或是提供开发者可调用的 SDK,亦或是尝试学习用户的输入习惯。在智能手机的地位逐渐上升时,适用于移动端的拼写检查器成为了人们交流的担保:当由双手掌控的物理键盘变成了掌心大小,只有精确的预测和更正才能修复输入的笨拙。

BlackBerry OS 上的拼写检查功能可能是经典智能手机的代表。限于设备形态和操作方式,尽管实时的拼写检查器已经出现了近二十年,但 BlackBerry OS 依然采用了较传统的方式。在完成文本输入后,用户需按下 BlackBerry 键并选择检查拼写,随后系统会检查整个文本并给出拼写建议。为了最大程度的避免错误,BlackBerry OS 允许用户对拼写检查器的规则进行有限的自定义,包括忽略特定类型和长度的单词。基本上,BlackBerry OS 的拼写检查器就像一个手动版本的 AutoCorrect,它依赖内置词典工作,无法理解上下文和语义来提供合理的建议。

Y7YubjNtZo0DfBxDcc9cIATrnMk
这份 BlackBerry Bold 9650 的指南说明了进行拼写检查的步骤。

自 iPhone 和 Android 智能手机登上舞台并成为主流之后,触屏输入很快取代了手机上的实体键盘。iOS 和 Android 都提供了系统层级的拼写检查器,它们最常见的工作方式是与内置输入法集成,包含输入预测、文本建议和自动更正等进阶功能。可以说,是拼写检查器构成了现代智能手机的输入体验,它在小屏幕上变得更灵活、集成和全局化,屏幕键盘和候选框让拼写检查器不只是在错误下方画红线,而是在手指每次落下时都避免错误的发生。

不过,变聪明的手机并不是从一开始就有聪明的输入方式,换而言之,它们因为耍小聪明而犯的错误更多。在 iPhone 发布的最初几年,总有用户抱怨其输入法会自以为是的更正输入内容,比如将传统脏话「fucking」换成「ducking」,还有人说他的 iPhone 差点将「3D」写成了「3P」。随着这些情况的愈演愈烈,reddit 上出现了著名的「自动黄瓜」笑话,它的内容可能是伪造的,但吐槽却十分真实可信。

OthtbjHzeouSPtxjvnqcjMp3nHv
这张截图至今挂在 reddit 上。图源 reddit

现在,由 AI 提供的拼写和语法建议逐渐流行,历史超过 60 年的拼写检查器可能因此迎来新的发展。不过,AI 拼写检查和传统的词典拼写检查有着本质区别,它更倾向于预测用户的输入内容并做出判断,而不是在输入行为结束后再进行检查。Android 的死忠用户可能对 Gboard 印象深刻,它利用了多种主动、手动的纠错功能来让打字变得轻松。一般来说,当用户在文本框中输入和粘贴文字时,Gboard 就会开始检查输入内容中可能存在的拼写错误、语法错误和标点符号错误,并给出更正建议;在候选框中,Gboard 会根据用户的输入习惯进行更准确的单词补全、预测和候选。除此之外,为那些专注于键盘而非输入内容的速录高手,Gboard 也有更可靠的高级纠错技术,研究人员为其引入了强调语法错误检查和强化学习调整的模型,系统可以利用它来模拟和避免频繁的输入错误。

不过,基于模型的拼写检查器目前只在 Pixel 8 及更新的机型上可用,并且仅支持英语。对于主要输入汉字的用户,Gboard 为人称道的一点是对双拼输入法上拼写检查器的支持。与 Gboard 有相似之处的是 Samsung 在 One UI 中提供的 Galaxy AI 帮写能力,该功能同样集成在系统输入法中,但它并非实时检查输入内容,而是需要用户手动调用以优化文本,Samsung 也没有对系统输入法的键盘做更多优化,不能说这种简单粗暴的组合没有发挥效用,但 AI、屏幕键盘和拼写检查器的高度集成确是更加高效的方案。

不过,真正改变拼写检查器的并不是 AI 和屏幕键盘,而是网络和商业模式。为了占据尽可能多的市场,Google 和 Apple 这样的公司会创建和维护基于不同语言的拼写检查器,以此作为全球营销战略的一部分。拼写的标准化是理论和实践的双向妥协,如今的拼写检查器不再是一个数十人团队用两三年时间完成的词典,而是需要借助庞大而复杂的算法检查无数的词语,赋予它们在不同语义下的优先级,这些数据最终由云端推向终端。

从电子管大型机到 PC,从人工统计的词典到云服务器和大模型,拼写检查器是一个容易被忽视的奇迹。不过,就像许多改变和影响我们生活方式的科技产品一样,看似无害的拼写检查器也有失控的风险。在移动互联网和 AI 的介入下,如今的拼写检查器正缓慢剥离克制的工具属性,它比任何时候都更加主动和隐秘,并且利用输入建议和文本优化等方式潜移默化的改变了我们的习惯。由科技公司创建和掌控的纠错机制可能缺乏开放和包容的互联网精神,它们更专注于让内容变得更加符合规范,而不是优先尊重用户的表达。

诸如拼写检查器一类的技术就像是电子空气,我们需要它,但倘若无人提醒,很少人会意识到自己正在进行的「呼-吸-呼-吸」。同样的,大众意识下的空气总不会有害,但在涌动的数据涡流之中,操控这些透明软件的无形之手未必不会作恶。如今,键盘上的每一次敲击都可能是内容审查与个人表达的较量,「库比蒂诺效应」将永远存在,而我们真正需要的是让每一个文字更加贴近心里的真实。

© 本文著作权归作者所有,并授权少数派独家使用,未经少数派许可,不得转载使用。

Kiririn

少数派打字系人形宝可梦|赛博编辑:摸鱼行者|熬夜赶稿高手高手高高手|上班打怪猎终身成就奖| 手柄毁灭计数器 < 8 >


文章来源: https://sspai.com/post/92657
如有侵权请联系:admin#unsafe.sh