本文介绍了作者所在团队为了实现语音识别领域的“ImageNet时刻”所做的努力,以及相关研究成果。这些成果只需要比较少的投入和资源就可以应用在实际生产环境,与传统学术研究相比更接地气。 本文最初由俄语写作,后续被作者改编为英文版本并发表在thegradient网站上(Towards an ImageNet Moment for Speech-to-Text),中文译文已经过作者和thegradient网站的授权和审核。
语音转文本(STT),也称为自动语音识别(ASR),这项技术由来已久,并在过去十年中取得了惊人的进步。如今在业界,人们一般认为只有像谷歌、Facebook和百度(在俄罗斯境内则是政府支持的那些本地垄断企业)之类的大公司才能提供可部署的“接地气”的解决方案。这主要是出于以下几个原因:
这篇文章介绍了我们为缓解这些矛盾而针对各国语言(包括俄语)所做的各种努力:
随着计算机视觉技术的蓬勃发展和广泛普及(也就是所谓的“ImageNet时刻”,具体来说就是在硬件需求下降、产品上市时间缩短、数据集规模也尽量缩减之后,可部署产品开始纷纷涌现),一个合理的展望就是机器学习(ML)技术在其他分支领域也很快会大放异彩。唯一的问题是,其他领域中这样的转折点何时会到来,其前提条件都有哪些?
我们认为,一个ML分支领域中的ImageNet时刻出现时会有以下表现:
如果上述条件都能满足,那么从业者就能够以合理的成本来开发新的实用性的应用。行业中的民主化也会随之而来:人们不必再依赖像谷歌这样的大公司作为行业中的唯一真相来源。
这篇文章将介绍我们为了迈向STT领域中的ImageNet时刻所做的工作。到目前为止这一转折点尚未出现,在俄语范围尤其如此。我们的主要目标是在有限的计算资源预算限制内,尽快构建和部署实用的模型,并共享我们的努力成果,希望其他人可以基于我们的发现,为STT领域实现ImageNet时刻而携手前进。
为什么我们不以学术论文的形式发表? 这并不是传统的经过同行评审的研究论文,而是对我们结合现有思想和技术,向有用和实用的STT迈进的务实努力的总结。 我们决定以这种形式来分享,而不是在会议或arxiv上以论文的形式发表,这样我们的发现就能得到更广泛的传播。虽说用来确保技术正确性的同行评审是有意义的,但由于我们使用了很多现有的构想,外加我们得出的经验结果支持,所以我们对自己的主张充满信心。我们将专门讨论,为什么我们认为当前的同行评审和企业支持的研究并不是促进整个社会进步的最快途径。简单来说,尽管这些有缺陷的系统长期来看是能发展起来的,但从短期来看有更快的方法可以取得进展。 简而言之,本文介绍的想法确实可以应用在生产环境中,并且已经在其他领域接受过了验证。更重要的是——它们中的大多数都很接地气,不需要昂贵的硬件或成吨的代码。我们欢迎大家提出反馈和批评意见——aveysov@gmail.com
在实验中我们选择了以下技术:
STT有很多方法可用,这里就不具体展开了。本文所介绍的是主要使用字素(即字母)和神经网络的端到端方法。
简而言之——要训练一个端到端字素模型,你只需大批带有对应文本的小型音频文件即可,也就是file.wav和transcription.txt。你还可以使用CTC损失来降低对同步注释的需求(否则你需要自己提供一个同步表,或在网络中学习同步方式)。一种常见的CTC损失替代方法是带有注意力的标准分类交叉熵损失,但它训练起来很慢,而且一般是和CTC损失并用的。
选择这个技术栈主要原因如下:
据了解,目前所有公开可用的有监督英语数据集都少于1,000小时,并且可变性非常有限。DeepSpeech 2这篇深度STT论文建议,至少需要10,000小时的注释才能构建一套不错的STT系统。1,000小时也能入门,但是考虑到泛化差距,你需要大约10,000小时的分布在不同域中的数据。
典型的学术数据集有以下缺点:
我们决定收集并发布一个前所未有的俄语口语语料数据集。我们一开始的目标是10,000小时,这个数据集的大小在英语语料库中也很罕见。
最近我们发布了这套数据集的1.0-beta版本。它包括以下域:
域 | 标注 | 语句量 | 小时数 | GB |
---|---|---|---|---|
广播 | 对齐 | 8.3M | 11,996 | 1367 |
公开演讲 | 对齐 | 1.7M | 2,709 | 301 |
YouTube | 字幕 | 2.6M | 2,117 | 346 |
有声读物 | 对齐/ASR | 1.3M | 1,632 | 180 |
电话录音 | ASR | 695k | 819 | 91 |
其他 | TTS、旁白 | 1.9M | 835 | 95 |
我们的数据收集过程如下:
我们的语料库在此,也可以在这里支持我们的数据集。
虽说成果不错,但我们还没有完成。我们的短期计划是:
一个出色的STT模型需要具备以下特征:
这些是我们的目标,下面介绍我们如何实现这些目标。
模型收敛曲线展示了语音识别领域从简单的Wav2Letter模型到更优化模型的进步。GPU小时是计算时间乘以所用GPU的数量。每次只引入一项架构更改,所有其他设置、超参数和数据集均保持不变。
我们从PyTorch的Deep Speech 2 分支开始。原始的Deep Speech 2模型基于深度LSTM或GRU递归网络,速度较慢。上图展示了我们可以添加到原始管道中的优化。具体来说,我们能够在不损害模型性能的前提下做到以下几点:
上面的图中只有卷积模型,我们发现它们比循环模型快得多。我们获取这些结论的过程如下:
接下来我们尝试了以下想法来做改进:
我们的第一步优化是修改模型步幅。这实际上是一个非常简单的想法。在分析Wav2Letter模型的扩展版本(步幅为2)的输出时(在短时傅立叶变换之后),我们注意到有用的输出词与空白词的比率大约在2比1和3比1之间。那么何不在卷积编码器中增加步幅呢?
如前所述,针对移动设备高度优化的网络可能无法用作架构决策的理想参考,但是从中可以总结出很好的经验:
此外,小型正则化网络更易训练,因为它们的拟合度较低。不利的一面是较小的网络需要更多的迭代才能收敛(也就是说每个批次更快,但需要的批次更多)。一个简单的经验法则表明(实际情况可能更复杂些),如果网络的大小减少到1/3至1/4,其他所有条件都相同,要训练出和较大网络相同的性能水平则需要3-4倍的迭代数。但是较小的网络将快2-3倍。
另一个想法也很有价值,如果你使用IdleBlocks,即在没有任何操作的情况下通过模型传递一些卷积通道,则可以使用一半的参数和更大的感受野来构建更深、更具表现力的网络。
根据这篇文章我们尝试了几种分词方法,结果发现:
我们使用了流行的sentencepiece分词器,做了少许调整以适合ASR领域。
这里的基本思想是使用更具表现力的编码器/解码器架构。缩减到1/8比例的卷积编码器非常快,因此你可以使用更复杂的解码器。
现在人们已经普遍认同一点,那就是在NLP领域,transformer模块的建模能力比之前的顶尖模型要强很多。
总体而言,这种设置下的模型所需的计算资源十分少,在生产中部署时甚至都不需要GPU。声学模型在每GPU秒内可以轻松处理500-1000秒的音频(实际上的速度很可能受I/O限制),而每CPU秒则可以处理2-3秒的音频(EX51-SSD-GPU服务器上的单CPU核心),同时不影响性能。注意这里的估算值仅包含声学模型,并可以通过模型量化和最小化(即修剪、教师蒸馏等)获得进一步改进。
通过在模型的各个部分中平衡容量和计算需求,可以得到一个仅需两块1080 Ti即可快速训练的模型!而且比需要4个甚至8个GPU的模型节约很多天的训练时间。
我认为这是迄今为止最令人印象深刻的成就。
语音识别模型中的一大问题是灾难性遗忘。根本问题在于,就连正则化网络(具有可分离的卷积)在适应大批新数据时也会开始忘记旧的域。这在生产环境中是尤其无法接受的。另一个问题是,ASR论文往往会在整个Librispeech数据集上训练50至500个epoch。样本效率非常低,无法扩展到现实数据上。
我们发现可以使用课程学习来减少将模型拟合到新数据上所需的迭代数,并想出了一些办法来应对灾难性遗忘。使用这种方法,我们可以将迭代总数减少到数据集大小的5-10*以下。
关键思想是:
这超出了本文的范围,不过简单说一下,有两个用于后期处理的选项:
在我们的测试中,序列到序列网络不会明显减慢我们的推理速度,而束搜索则慢了10倍。让序列到序列模型超越束搜索是下一步研究的一个要点,但我们已经使用了KenLM的束搜索实现,达到了每CPU内核秒约25秒音频的处理速度,同时没有牺牲精确度。
在现实生活中,如果模型在一个域上训练,则可以预期它在另一个域上存在巨大的泛化差距。但是泛化差距是先天存在的吗?如果答案是肯定的,那么域之间的主要区别是什么?是否能训练出一种模型,可以在许多实用的域上都以良好的信噪比正常工作吗?
泛化差距是存在的,你甚至可以推断出哪些ASR系统在哪些域上训练过。此外,根据之前的想法,你可以训练出一个模型,让它在未见的域上也能表现出色。
根据我们的观察,以下是导致域之间泛化差距的主要因素:
数据集/是否在数据集外 | 我们的CER/WER | 云端最佳的CER/WER | 备注 |
---|---|---|---|
旁白,是 | 3%/11% | 3%/6% | TTS旁白数据集 |
有声读物,否 | 9%/30% | 7%/25% | 非常清晰 |
YouTube,否 | 15%/37% | 16%/32% | 非常多样化 |
广播,否 | 8%/19% | 14%/26% | 非常多样化 |
公开演讲,否 | 6%/16% | 12%/23% | 非常多样化 |
电话录音(叫车),是 | 7%/20% | 7%/15% | 清晰的注释 |
电话录音(电商),是 | 19%/34% | 17%/31% | 嘈杂,会话内容不多 |
电话录音(恶作剧),是 | 22%/43% | 23%/39% | 非常嘈杂 |
说明:
人们在对比不同系统的表现时往往会有很多不良习惯:
我们自己也没法完全避免这类倾向,所以你至少应该尝试:
根据上一节中的测试成绩对比可以得出一些结论(请注意,这些测试是在2019年底/2020年初进行的):
我们已经证明,在几乎零人工注释和有限的硬件预算(2-4x1080 Ti)条件下,也可以训练出鲁棒且可扩展的声学模型。但一个显而易见的问题是:要部署这个模型还需要多少数据、计算量和工作?模型的实际表现如何?
谈到性能,我们认为显而易见的标准就是在所有验证数据集上击败谷歌。但问题在于谷歌在某些域(比如电话录音)上的性能出色,而在其他域上的平均性能却很差。因此在本节中,我们决定采用俄罗斯企业SpeechPro的最佳模型的结果,该模型通常被称为市场上的“最佳”解决方案。
我们模型的WER | 我们的模型扩大容量和数据量后的WER | SPEECHPRO CALLS的WER | |
---|---|---|---|
旁白 | 11% | 10% | 15% |
有声读物 | 30% | 28% | 30% |
YouTube | 37% | 32% | 35% |
广播 | 19% | 19% | 26% |
公开演讲 | 16% | 16% | 23% |
电话录音(叫车) | 20% | 14% | 25% |
电话录音(电商) | 34% | 33% | 31% |
如上表,我们发现除电子商务电话和有声读物之外,我们的模型在所有类别中都优于SpeechPro Calls(他们有很多模型,但是只有一个模型在所有域上都表现良好)。此外我们发现,为模型增加更多容量和训练更多数据,可以极大地改善我们在大多数域中的结果,并且SpeechPro仅在电子商务电话中优于我们改进的模型。
为了获得这些结果,我们额外获取了100小时的带有人工标注的电话录音、大约300个小时的具有各种自动标注的电话录音、以及10,000个小时的类似OpenSTT的未公开数据。我们还将模型解码器的容量增加到了约65M参数。如果你说俄语,可以在此处测试我们的模型。
其他问题则要复杂一些。显然,你需要一个语言模型和一个后处理管道,这里不再讨论。为了只部署在CPU上,最好做一些进一步的缩小或量化,但这不是必需的。每个CPU内核每秒可以处理2-3秒的音频(在较慢的处理器上是这样,在更快的处理器内核上可以达到4-5秒左右)就足够了,但最新的解决方案声称它们的成绩约为8-10秒(在更快的处理器上)。
下面是我们尝试过的一些想法(其中一些想法甚至是可行的),但我们最后认为它们过于复杂,提供的好处却不见得有那么多:
Alexander Veysov是Silero(一家开发NLP/语音/CV支持产品的小公司)的数据科学家,也是OpenSTT(可能是俄罗斯最大的公共口语语料库)的作者(我们计划添加更多语言)。Silero最近已经交付了他们自己的STT俄语引擎。在此之前,他曾在一家位于莫斯科的VC公司和Ponominalu.ru(一家由俄罗斯电信巨头MTS收购的票务初创公司)工作。他在莫斯科国立国际关系大学(MGIMO)获得经济学学士和硕士学位。你可以在telegram上,(@snakers41)关注他的频道。
感谢Andrey Kurenkov和Jacob Anderson对本文的贡献。
如果你喜欢这篇文章并想了解更多信息,请订阅Gradient并在Twitter上关注我们。
本文作者在thegradient网站上发布的另一篇文章《一位语音识别实践者对学术和工业界的批判》(A Speech-To-Text Practitioner’s Criticisms of Industry and Academia)是本文的续作,其中包含的结论也是本文的重要参考。InfoQ China将继续翻译这篇续作,以飨读者。
领取专属 10元无门槛券
私享最新 技术干货