一个团队如何将语音识别这一梦想变为现实
Françoise 于 2005 年加入 Google 时,语音识别功能尚属于实验性质的技术,仍处于使用统计建模来评估翻译准确性的初级阶段。“我们开始在 Google 小规模地研究语音识别这项技术。您要知道,这还是在市场上出现智能手机或任何此类技术之前进行的研究,因此语音识别目前的用途所表现出来的潜力在当时还不太明显。”
但是,Google 通过 MapReduce 快速处理大型数据集的能力,加上新的数据收集方法以及在手机上提供语音搜索服务的需求,将这项“小规模的研究”快速推向了引人注目的位置。
Google 语音团队在 2008 年推出了第一款智能手机应用,随后在 2011 年 6 月推出了桌面设备语音搜索服务,起初仅支持美式英语查询。他们最初通过基于 GOOG-411 语音模式的模型来调校将语音输入转换为文字的算法(GOOG-411 是 2007 年推出的一款颇有趣味的实验性语音识别产品,用于查询美国或加拿大的电话号码)。
在接下来的两年里,该团队将语音搜索服务的支持范围扩大到 50 种其他语言,使得世界各地的数百万人都可以使用该工具。他们使用相同的软件结构构建了不同的统计模型,并根据从 Google 产品收集的特定语言专属匿名字词数据库为每种模型提供特定语言的调校,例如,从 Google.com.br 收集的匿名文字数据将用于调校巴西葡萄牙语的语言模型,而从 Google.com.mx 收集的数据将用于调校墨西哥西班牙语。
然而,语音识别模型很快就出现了新的问题:随着使用频率的增加,语音搜索开始解译重复出现的无意义字词,而不是用户说出的字词。“我们在几种语言中都看到了这些奇怪的字词不断涌现出来。印象中,我们注意到的第一个这类字词是在韩语中出现的,这个字词立即引起了我们的关注,因为它实际上是拉丁字符:‘pp’。它可能代表 pfpf 之类的内容?再如,‘kdkdkd’这个字词开始在英语中出现,但没有任何意义。”
出现无意义的字词是第一个难题。紧接着又出现了第二个难题:语音识别工具开始越来越频繁地拼错常用字词。比如,用户说的是‘probably’,输出结果呈现的则是‘probly’。作为一个土生土长的法国人,Françoise 对法语识别模型输出也觉得不可思议。“我当时惊呆了。这看起来一点都不像法语…输出结果看起来更像是由完全不懂法语或者从未学过写字的人写出来的东西。我特别注意到,语音系统在处理由连字符连接的字词方面存在问题,这在法语中很常见。许多小镇的名称也有问题,例如‘Châlons-en-Champagne’可能会显示为‘Chalonsenchampagne’。像‘Jean-François’这样的常见法语名字在输出结果中可能会显示为‘Jeanfrancois’。当然,如果系统一开始就正确识别了相应音素,就不会出现这类问题了,但实际情况并非如此。因此,您可能会看到类似‘Chalossechempain’或‘Jeafracua’的内容。”
识别系统有 3 种独立的模型:声学模型、发音模型和语言模型。这 3 种模型经过单独调校后便会组成一个巨大的搜索图。实际上,语音识别就是采用一种音频波形,推动它通过此搜索图,然后让它找到阻力最小的路径,也就是找到最有可能的字词序列。
声学模型
声学模型会识别音频样本中最有可能存在的音素。它采用一种波形,将其切分为较小的时间段,执行频率分析,然后输出该特定输入的所有三音素动态的概率分布(除了基于其他近端音素的上下文差异之外,三音素动态还会根据自己是位于声音序列的开头、中间还是结尾,对音素波形的细微差异进行建模)。波形频率矢量与概率分布进行匹配,从而识别哪些音素更有可能包含在该音频样本中,由此提供在一段时间内该输入中存在的音素序列。
用户说出“Spa”,声学模型会缩小对所听到的音素的猜测范围。第一个字母的可能音素是 S 或 F,第二个字母的可能音素是 P 或 B,第三个字母的可能音素是 A 或 E,由此可以反映出以下可能性:60%% 的几率是 S,40%% 的几率是 F 等等…
发音模型
同时,发音模型开始发挥作用。实际上,它会采用声学模型的音素概率分布,参考海量词库对其进行检查来定义特定语言字词的有效音素序列,然后将可能的音素序列限定为在该语言中有意义的字词。
声学模型识别了一些可能的音素。发音模型认为“s-p”是英语中一个可能的组合,而“s-b”、“f-b”和“f-p”则无法在英语词典中找到。“S-p-a”和“S-p-e”这两个组合在英语词典中均可找到,于是“S-b-a”、“F-b-a”和“F-p-a”就被排除了。
该列表不可能包含全世界每种语言的全部字词的所有有效音素,因此发音模型具有一个统计引擎,它可以根据正写法(也是估计方法!)为它从未见过的字词即时生成大概的发音。该模型会尝试将此发音与列表中的字词进行匹配(除非它确定听到的是完全不同的新词,在这种情况下,该模型会学习识别听到的新词)。这些新词通常具有很低的概率评分,因此几乎不会再被选中,除非在词典的所有可能字词中是最接近的匹配项。
当有人搜索“Hobbit”时,系统会识别出“H-o-b-i-t”的音素。语音模型非常确定它听到的是“h-o-b-i-t”,而不是“h-a-b-i-t”。这与英语中可能存在的音素组合相匹配(这与不可能存在的“Hbpit”等音素组合是不同的),因此该模型可以接受这个新词,并会尝试猜测“Hobbit”这个新词的发音/正写法。现在,如果其他人搜索 Hobbit,该模型就会找到 Hobbit。但如果有人搜索 Hpbit,它也会找到 Hobbit,因为这是词典中相似度最高的有效字词。
语言模型
结合使用声学模型和发音模型,我们输入的是音频,输出的是文字。不过要想提供可靠的语音搜索,这还不够具体,因为您不能只是将任何字词与其他字词连在一起就行了:总有一些字词组合比其他组合更合乎常理。进入识别系统的第 3 个组成部分,即语言模型。该模型会计算 1-5 个字词之间所有字词序列的频率,从而将通过上述两种模型形成的可能字词序列限制为该语言中的合理组合。接下来,最终搜索算法将选择在该语言中出现频率最高的有效字词序列。
用户说:“My dog ran away”。音频/发音模型确认了各种有效的可能性:My 或 Mai;Dog 或 Dock;Ran 或 Ram;Away 或 A Whey。语言模型会查看各种组合,并最终发现“my dog ran away”比“Mai dock ram a whey”或“my dock ran away”出现得更加频繁,因此会将结果限制为该组合。
这 3 种模型构成一个巨大的搜索图,系统可以通过该图推送波形,以生成接近实时的文字输出结果。那么,在这个庞大而复杂的系统中,我们能找到明显的拼写错误不断增加的原因吗?这与导致无意义字词攀升的原因有何不同之处?
Google 非常智能灵活,即使用户输错内容,它也能够识别用户的本意。
这些模型都是根据大量的语料库数据建立的,例如,所有搜索内容都会输入到 YouTube 或 Google 地图中,或者直接输入到 Google.com 中。我们先暂停片刻,回想一下大多数输入的搜索查询的语法、拼写和句子结构。
Françoise 解释说:“Google 非常智能灵活,即使用户输错内容,它也能够识别用户的本意,因此很多人都不会费劲去保证拼写正确无误,或者会无意识地输入特殊字符(如连字符)。”这对用户来说是好事,但对于语言数据库来说却并非如此,因为数据库主要是从匿名汇总搜索查询的统计分析中获取数据。如果某个拼写错误的字词出现的频率足够高,那么识别模型选择、批准拼写错误的字词版本以及将其与音素序列配对的几率也会越来越高。当音频输入的音素序列(“Hobbit”)和正字表征在字词列表中没有任何高概率匹配项时,那么语音识别系统会扩大其搜索范围来查找类似的音素序列(前面提到的 hpbit 或拼写错误的“habit”,如“hobit”);如果拼写错误的字词经常出现在搜索日志中,系统就会将其当作正确选项。除此之外,人们在说话时通常会省略某些音节或音素(他们会将‘probably’读成‘probly’)。因此,发音组件映射发音错误的音素序列的频率就会越来越高。在某些时候,这些发音错误的版本如果出现的频率足够高,还会成为默认版本,导致系统将正确发音当成错误发音或噪音排除在外。因此,识别系统中会出现与拼写错误的字词模糊匹配的发音错误的字词,并会很自然地输出这些无意义的字词(而不是用户所说的字词)。
调校和再调校识别系统
不能解释为发音错误的‘pp’和‘kdkdkd’是什么情况呢?事实证明,这些无意义的字词是由背景噪音造成的。“例如,我们在数据噪音样本中发现的‘kdkdkd’听起来就像火车在铁轨上行驶的声音,然后发现该音频段在人们坐火车时经常出现,”Françoise 说。“我们意识到,这些一定是系统拾取的火车铁轨的微弱、低质量的音频样本,并根据音素识别为‘kdkdkd’。然后,识别模型会尝试将此音素与某个字词匹配,从一些随机的无意义错别字(这些错别字在某些时候可能已记录在案并添加到了词库中)中找出一个低概率字词‘kdkdkd’。语言模型最初可能会拒绝该词,但随着识别结果日志中不断出现反馈,它慢慢开始看到‘kdkdkd’成为具有足够高出现频率的正当词汇,从而开始在实际情景中选择该词。用户输入错误、机器学习和发音模型强制匹配背景噪声共同导致了语音识别错误,随着时间的推移,这些错误会通过拼写错误的字词和错误发音不断得到调校。”
“发音模型发现,随着这些错误词汇出现的频率越来越高,语言模型现在会将其视为具有高概率且与声学输入内容匹配的词汇,”Françoise 说。“而现在,一切都变得井然有序了,系统会非常自然地不断输出无用字词,之后再次记录,然后反馈到该模型的调校过程中,以此循环往复。”
“打破这些反馈环是一项巨大的工程,因为我们必须仔细检查整个系统才能弄清楚这些故障点究竟在何处。另外,我们必须想出好的办法,在不影响任何性能或速度的情况下对所有这些模型进行初始化并修复相应的错误。我肯定不想在对着手机说完之后,还要再等系统两秒钟的时间来转录我的话,您也不希望这样吧?”
在项目的开始阶段,需要着手执行统计匹配以确保准确性,而可用数据的数量多少对于这一过程而言至关重要。不过在这种情况下,语料库的规模对 Françoise 及其团队很不利。“修复这些错误极其困难,因为在语音识别这种一切以统计为依据的领域中,我们会经常使用以前的模型,通过数据运行模型,以此来不断获得更准确的数据。然后,我们会将这些数据转入下一代模型中。因此,有时能说出‘我只想丢掉所学的一切,然后从头开始学习’这样的话真是太需要勇气了。我的意思是,这就好比是,在使用搜索引擎时,我说我打算放弃整个索引,因为我已经完成了一些清理操作。不过,我们目前就是这么做的,在错误每次出现时将其消灭,而现在我们终于找到了问题的根源。”
每解决一个挑战,我们的认知都得以加深
然而,还有更多挑战等待着 Françoise 和她的团队去解决。语音识别已应用于 Google 搜索、Google 即时、Android 和 Google 语音等产品,但就在离 Françoise 办公桌不远的地方,她的团队正在努力将语音作为设备交互的主要模式用于突破性技术,例如 Google Glass、Google Watch 和无人驾驶汽车。不过,这带来了新的挑战。她解释说:“在 Google Glass 上,麦克风不再位于嘴部的前方。我们假设您正走在街上,周围到处都是噪音,使用我们当前的算法可能无法得出好的结果,因为这种算法的声音和文字数据库都是根据从前置麦克风输入获得的数据进行“训练’的。与此类似,如果您跟无人驾驶汽车或 Google Watch 对话,麦克风会离嘴部更远,而且位于完全不同的位置。我们需要寻找新方法使我们的语音识别算法适应这些环境。”
对于 Françoise 而言,这些挑战的规模和范围正好符合她在 Google 研究语音识别和机器学习的热情。“语音识别是一项非常棒的技术,对我来说就像一家玩具店。尽管我已研究语音识别超过 20 年,但每天走进办公室时,我仍然觉得充满乐趣,因为总是有新的问题等着我去思考和解决。当然,见证自己研究的一项技术从萌芽发展到语音识别现在的爆发,并且看到它每天都在影响数百万人…这种满足感无以言说。”
是什么让她如此高兴能够在 Google 这样的地方工作且充满热情?“语音识别需要大量的数据和大量的机器才能达到良好的效果,而 Google 是能够将这两者如此大规模结合在一起的少数地方之一。从产品到用户再到持续的反馈,整个流程链可实现前所未有的机器学习和语言建模速度。我想不到还有其他任何地方能做到这些。”
如果要我定一个长远目标来体现我的雄心壮志,我会选择搞定语音识别方面的所有问题,让它很好地服务于地球上的每个人,我坚信我们能够做到这一点。我无法想象会有另一个地方做得像 Google 一样出众。
Françoise 是 Google 的一名科研人员,她带领着一个由软件工程师、研究人员和语言学家组成的团队,致力于在语音识别技术的新领域取得突破