语音识别引擎是基于大多数人使用的语言进行训练的,这意味着它误听的词从来都不是常见的词 —— 它可能是你每周说五十次的姓氏,是你的团队内部命名的服务,是会议中十八个月前发明的缩写。这些都不是你能够等待它自行纠正的错误。这是引擎之前听到的内容与你实际说的内容之间的差距,而要弥合这个差距需要两个因素协同作用:你如何大声说出这个词,以及一个字典条目,它能永久地解决这个问题。
- 09:142.8sPing Kowalczyk about the staging rollout.Slack
- 09:213.4sThe client's API still returns the old schema.Notion
每次都说同样的方式
你在控制中最重要的事情就是一致性。如果你有时说“Kubernetes”全称,有时又说“k8s”,你就是在要求两个不同的词都能正确识别,而字典条目只能修复你实际输入的那个词。为一个给定的词选择一种方式来说,并坚持使用。这在专有名词和缩写中尤为重要,因为引擎对这些词的先前接触远少于普通词。
让这个词在一个句子中存在
一个名字或缩写在孤立的情况下对任何语音识别引擎来说都是最难处理的情况,因为周围没有任何东西来缩小它可能是什么。不要把它当作一个测试词单独说出来,而是放在你实际想表达的句子中 —— “请向Priyanka询问Redis迁移情况”给引擎提供了两个相邻的上下文词,“Priyня”单独时就没有。这不是这个应用特有的现象;这是语音输入的一般规律,而且这样做没有任何成本。
为尚未添加字典条目的缩写逐个字母拼出
对于尚未添加到你字典中的三到四个字母的缩写,逐个字母地说出 —— “A P I”,每个字母之间短暂停顿 —— 通常会被转写为单独的大写字母,而不是被合并成一个普通词。并不是每个缩写都以相同的方式工作,因此第一次使用一个新缩写时,先看一下它被转写成什么,然后继续。如果它转写错了,那就是你添加字典条目的提示,而不是每次手动拼写。
在词实际失败后才建立字典条目
不要提前将你可能说的所有专有名词都添加到字典中 —— 如何教语音输入应用你的术语 介绍了完整的方法来建立一个字典条目,包括应该包含什么内容以及匹配规则如何工作。这个页面的简短版本是:等待一个词出现错误,然后添加一个重写条目,将引擎听到的词与你实际想表达的词一一对应,包括大小写。一个干净的“kubernetes → Kubernetes”条目可以一次解决错误的大小写和任何一致的误听,因为这个条目会在转写完成之后作为重写应用。
这就是这两种技术的交汇点。逐个字母说出缩写可以让它在转写中一开始就以大写字母形式出现;而字典条目则能确保那些无法清晰拼写的词 —— 比如姓氏、复合产品名称、团队以特定方式缩写的短语 —— 在你下次不改变说话方式的情况下保持正确。
复合名称和多词术语
一个单词是简单的情况。一个复合产品名称 —— 两个普通单词通过中间大写字母合并成一个,或者公司总是以特定方式说的短语 —— 更难处理,因为引擎没有理由猜测“数据管道”应该作为某个内部工具的正式名称,而不是两个普通单词来描述一个概念。将整个短语视为一个词典条目,而不是分别处理每个单词:一个匹配整个短语并一步重写条目比两个条目希望自行正确组合更可靠。如果你的团队有多个相关术语以相同方式构建 —— 例如一组共享前缀的内部服务名称 —— 请将它们作为单独的条目添加,而不是一个带有通配符的条目;这里的匹配是精确且字面的,因此永远不会重写你不想重写的词。
技术语音输入中的符号和标点
名称和缩写是技术语音输入的一半;另一半是普通散文中不需要的标点和符号 —— 下划线、点号、括号、斜杠。像向同事解释一样说出它们:“左括号”、“下划线”、“点号”、“正斜杠”。这样会在转写文本中产生实际的字符,因为标点和空格是同一固定后处理链的一部分,该链运行在每次语音输入上,而不是你切换进的一个独立模式。如何语音输入代码注释 对于大部分时间都在围绕代码库进行语音输入的人来说,对此有更深入的说明,但这个页面所讨论的基本习惯是一样的:说出你确切的意思,让少量的词典条目处理那些即使精确说出仍不足以满足的部分。
在责怪引擎之前检查原始转写文本
每次语音输入都会保留两个版本:说话时的词语,以及规则运行后的词语。当某个术语出现错误时,首先查看原始转写文本。如果原始版本已经正确,而只有处理后的版本错误,那么问题出在你的词典中 —— 某个条目没有正确触发,或者缺失。如果原始版本也错误,那么问题出现在你任何规则的上游:音频质量、麦克风与说话者之间的距离,或者背景噪音足够大以至于完全掩盖了词语。如何使用耳机进行语音输入 值得在你假设某个名称完全超出引擎能力之前阅读 —— 很多“它永远无法正确识别”实际上是笔记本电脑麦克风距离三英尺远,拾取风扇的声音造成的。
那些引擎从未听过的名称,以及这里的诚实限制
有些名称没有音节缩写。一个不常见的姓氏、一个来自发音无法准确映射到英文拼写的语言的名称、一个你从未输入过的客户名称——第一次时,你和引擎一样有可能拼错。这个应用的词库不会从上下文中学习,也不会根据某个名称听起来如何来猜测拼写;它只会执行你输入的内容,而不会做更多。纠正一次,将确切的拼写作为条目添加,之后的所有语音输入都会正确。这比那些在使用过程中学习你词汇的应用程序需要更多的手动工作——这一点应该明确说明,而不是一带而过。
Wispr Flow 是另一种类型的工具:它的词库文档描述了可以从你所做的更正中“自动学习” 的条目,这与你手动添加的条目是分开的。对于那些每周的名称和术语词汇都在变化、不想维护列表的人来说,这确实是一个真正的优势,而且可以坦率地说明这一点。这种权衡在本库的每一页比较中都存在:一个从你的语音中学习的系统需要一个账户来学习,而这个工具则将整个词库,像你其他的数据一样,保留在你面前的机器上,并且不接触任何其他内容。哪一种更有价值取决于你是更愿意输入十个条目一次,还是让一个账户在数月内悄悄地建立你的档案——Coii VoiceInput vs Wispr Flow 会详细地讨论这种权衡的其余部分。
两个术语听起来几乎相同
当两个技术术语听起来相似但意思不同时,上下文通常会完成大部分的区分工作——“queue”和“cue”,一个名为“Sable”的服务与“stable”这个词,一个名为“Loom”的客户与字面意义的“loom”这个词。如上所述,说出整个句子而不是单独说出术语,是第一道防线,因为周围的词语通常会让正确读法变得显而易见,即使系统对任何一个专有名词的指代一无所知。当特定的一对术语即使这样仍然不断冲突时,词库条目只能可靠地重写一个方向——匹配错误的读法并将其替换为正确的读法——因此选择在你的语音输入中出现频率较低的那一个,并将条目设置为纠正你需要的那个。
在历史记录中修复,而不是重新输入
一旦你纠正了一个条目,你就不需要再次说出整段内容。该语音输入的原始和处理后的转写文本已经存在于你的历史记录中——如何在 Mac 上使用语音输入 介绍了历史记录行的机制——因此修复的方法是更新词库并重新处理现有的行,而不是重新录制。这在代码注释和技术写作中尤为重要,因为误听的术语周围的句子通常很长,重新说出所有内容来纠正一个错误单词所花的时间,往往比修复本身还要多。如何语音输入代码注释 介绍了将同样的想法应用于一个充满函数和变量名称的代码库中的情况,这些名称通用语音引擎从未见过。
数字、版本和测量值
技术写作中也充满了数字,这些数字在语音中读出的方式与输入时不同:版本字符串、IP 风格的地址、测量值、货币。以与输入符号相同的方式说出标点符号——例如,版本号读作“two dot four dot one”,地址读作“one hundred ninety two dot one six eight dot one”——这样它会以实际的字符形式出现,而不是让应用猜测你写出来的数字。当某个数字多次读错时,修复方法与任何其他条目相同:匹配引擎实际生成的内容,将其重写为你想要的内容。这里没有专门的数字模式来学习,这是有意为之的——一个机制处理所有类型的更正,比五个专门的机制各自有自己的规则更容易理解。
在重要场合使用新术语前先进行测试
在你将要发送的电子邮件或即将提交的拉取请求中,先在某个低风险的地方(比如空白笔记或草稿文档)说出这个术语一次,然后检查最终结果。这只需要十秒钟,同时能告诉你三件事:语音识别引擎是否能独立正确识别该术语、是否需要通过拼写来辅助识别,以及是否需要在自定义词库中添加该术语。跳过这一步可能会导致错误的客户名称出现在已发送的电子邮件中,而不是测试笔记中,而事后修复的成本总是比这十秒钟要高得多。
这个习惯在你第一次使用新术语时尤为重要,而不是之后的任何时间。一旦一个名称或缩写词已经通过自身证明了可靠性,或者已经添加了自定义词库条目,它就会保持稳定——除非你改变了发音方式,否则无需重新测试。
这个习惯最能发挥作用的场景
开发者、阅读简历的招聘人员,以及在代码库或充满专有名词的CRM系统中进行语音输入的任何人,都会每天遇到这个问题,而不是偶尔遇到。开发者语音输入 和 开发者最佳语音识别 都基于本文中描述的相同方法,只是将其应用于这些工作所涉及的特定词汇。一个开发者的自定义词库通常在第一周内就会填满服务名称和第三方库名称;而招聘人员的自定义词库则会填满候选人的姓氏以及每个客户公司对其名称的具体写法。一旦这些列表停止增长(通常在实际使用几十次语音输入后),它们就不会变得很长。
无论哪个领域,这个习惯都是一样的:始终如一地使用术语,为其提供上下文,对需要拼写的部分进行拼写,并让一个自定义词库条目完成之后所有语音输入的工作。
准备好看看你的词汇量能撑多久了吗?尝试 Coii VoiceInput,并从你工作中最常使用的五个术语开始建立自定义词库——这通常是单次操作中完成大部分修改的关键。