计算机视觉领域早已全面迎来“ImageNet 时刻”,而语音识别领域的的“ImageNet 时刻”却迟迟未来临。与计算机视觉领域相比,语音识别的预训练模型、传递学习和数据集都相对落后,而且语音识别的计算资源需求仍然过高。近日,一位语音识别领域的实践者对该领域现有的研究工作展开了一次彻底的批判,他认为学术界和工业界都应该为语音领域未能实现“ImageNet”时刻负责。
本文是《迈向语音识别领域的ImageNet时刻》的后续,文中将回答以下问题:
什么是所谓的 ImageNet 时刻,它有什么意义?
为什么它在语音领域还没有出现?学术界和工业界为此要负哪些间接责任?
上一篇文章中介绍的方法有哪些不足?
本文最初发表在 thegradient 网站上(A Speech-To-Text Practitioner’s Criticisms of Industry and Academia),经原作者及网站授权由 InfoQ 翻译并分享。
作者的团队开发的 Open STT 项目(详情见上一篇文章)正在计划建立中文分支,并在寻找精通中文和深度学习的合作伙伴。有兴趣的同学请与作者直接联系:aveysov@gmail.com
什么是 ImageNet 时刻?
我们认为,一个 ML 分支领域中的 ImageNet 时刻出现时会有以下表现:
能够解决 95%的标准“实用”任务所需的架构和模型构建块,已成为标准化和经过验证的开源框架模块得到了广泛应用;
多数流行的模型都提供了预训练的权重;
成功将预训练模型的标准任务上获得的知识应用在多种多样的日常任务中;
与初期在文献中报告的计算需求(在 STT 领域一般是 100-1000 个 GPU 日)相比,训练日常任务模型所需的计算量控制在了很低的水平(例如在 STT 领域中只需 1-10 个 GPU 日);
小型独立公司和研究小组也有能力使用大型预训练模型来处理计算任务;
如果上述条件都得到了满足,那么从业者就能够以合理的成本来开发新的实用应用。行业中的民主化也会随之而来:人们不必再依赖像谷歌这样的大公司作为行业中的唯一真相来源。
为什么 ImageNet 时刻尚未到来
为了回答这个问题,我们先来看一看计算机视觉(CV)领域出现这一时刻之前有哪些事件和趋势。
可视化关键趋势和事件,这些趋势和事件引领了视觉领域的 ImageNet 时刻。
简单来说:
NVIDIA 过去几十年中一直在生产和优化消费级 GPU。现在你只需将 4-8 个顶级 GPU 放在一起便可以构建一台“超级计算机”。
在 2000 年代后期,NVIDIA 预期 GPU 的性能足以满足 ML 的需求,并且大约在那时开始投资开发 CUDA 技术(其首个版本于 2007 年发布);
2009 年,由李飞飞教授领导的团队发布了 ImageNet 数据集,然后于 2011 年发起了 ILSVRC 竞赛。2012 年,Alex Krizhevsky 等人使用 NVIDIA GPU 和 CUDA 训练了著名的 AlexNet 神经网络,实现了远超以往的性能。
自那以来深度学习框架就不断发展,并在 2017-2018 年左右逐渐成熟。如今 PyTorch 和 TensorFlow 是业界的首选方案,除了图像分类外,它们还针对许多任务提供了预训练的模型;
在同一时期,用于在 ImageNet 上实现顶尖(State of the Art,SOTA)性能的模型架构不断完善,用于训练和评估这些模型的代码以及预训练的权重也一并发布了出来,且不断进化。
因此到了 2018 年前后,视觉社区已全面实现了“ImageNet时刻”:
CV 社区普遍认为 ImageNet 上的图像分类挑战本身并不是目的,而是训练深度卷积神经网络,以学习良好的通用特征的“前置任务”。首先在 ImageNet 上训练 CNN 分类图像(即预训练),然后将这些特征适应于新的目标任务(即微调),这种做法已成为解决各种 CV 问题的事实标准。使用 ImageNet 预训练的 CNN 特征,在几个图像分类数据集以及对象检测、动作识别、人体姿势估计、图像分割、光流和视频字幕等任务中获得了令人印象深刻的成果。
为了简化讨论,我们假设 STT 与 CV 领域共享硬件加速技术、框架以及神经网络架构的一些成果。另一方面,与 CV 领域相比,STT 的预训练模型、传递学习和数据集都是相对落后的。此外后者的计算资源需求(如研究论文中所述)也还是过高。
下面就来研究一下为什么会出现这种情况。语音识别领域的大部分研究成果都是由行业/公司赞助的学者发表的。因此我们将对他们的学术和行业研究做出批评。公平起见,我们也会批评我们自己的解决方案。欢迎向我们提出反馈和批评:aveysov@gmail.com。
针对工业界的批评
一般来说,我们读过的大多数 STT 论文都是由来自该行业的研究人员(如谷歌、百度和 Facebook)撰写的。STT 论文和解决方案的大多数不足之处,都可以归因于研究人员的“学术”背景或“行业”背景。
简而言之,下面是 STT 的“行业”部分带来的主要问题:
基于私有数据构建解决方案,并且没有明确报告;
复杂的框架和工具包;
解决不存在的问题;
论文结果模糊不清。
基于私有数据构建解决方案并且未正确报告
著名的《Deep Speech 2》论文(2015 年)中有以下图表:
论文表明,为了获得高质量的模型就需要大量数据。它和另外几篇论文明确报告了这一问题并执行了数据集外验证。大多数现代 STT 论文往往会采用越来越奢侈的方法,在LibriSpeech ASR语料库(LibriSpeech)上严重过拟合。
谷歌、Facebook 和百度很可能拥有 10,000 至 100,000 小时的私有数据集来训练模型。这没什么不好,但如果他们用这些数据来提升性能却没有正确报告就不行了。注释语音需要花费很长时间,成本问题会导致该领域的普通参与者很难构建自己的数据集。即便他们使用与我们类似的方法来获取注释,也需要大量资源、时间和精力来生成标签并进行大规模验证。
注释 1 小时的语音可能需要 2 到 10 个小时,具体取决于数据集的挑战性以及是否有某种形式的自动标签(以其他 STT 系统输出的形式)。与 CV 领域不同,语音注释的成本是很高的。结果现在的情况变成了:所有人都在一个权威的公共数据集(LibriSpeech)上刷分,但却几乎没有动力报告这些模型在现实应用中的表现,以及模型针对了生产中的哪些事物进行了训练。谷歌、Facebook 或百度没有足够的利益驱动他们开源自己的大型专有数据集。总而言之,这为希望建立自己的 STT 系统的从业者设置了极高的进入壁垒。像Common Voice这样的项目解决了部分困难,但是它们还没有足够的数据可用。
复杂的框架和工具包
人们往往会依靠框架或工具箱,而不是从头开始编写所有内容。如果有专门的 STT 框架和工具包,那么大家都愿意在那些框架提供的模型上构建模型。不幸的是在语音领域这是行不通的。使用这些解决方案来启动你的 STT 项目会有很多麻烦,原因有很多:
它们的代码是为大型计算平台优化的;
它们的配方(展示如何使用这些框架的端到端示例)仅适用于小型学术数据集,要扩展到大规模数据集就需要大量计算。
配方的样本效率极低(我们最喜欢的例子是在数百兆字节文本的数据集上训练 10GB LM);
即使你在 LibriSpeech 上对模型进行了预训练,它也很可能无法迁移到现实世界中。
如果你想构建一个内部 STT 解决方案,并能正确理解和优化它,你可能需要庞大的团队或大量的时间来内部化上述工具包;
这些工具包要么是已发布的内部解决方案,要么是 PR、新面世方案或生态系统构建工具。这意味着这类工具包可能很适合用作 MVP 或基线,但要优化这种管道就需要投入大量资源(对公司来说,很可能都要编写自己的工具包);
个人经验来看,我们曾多次尝试内部化一些FairSeq和EspNet管道,但最后却发现所需的时间和精力太多了。也许我们的 ML 工程技能尚待改进,但水平更高的从业者(即全职 C++ ML 编程人员)也给出了类似意见。
解决不存在的问题
如果为 LibriSpeech 构建一个新的或改进的工具包,却需要运行在 8 块价值 1 万美元的 GPU 上,这对实际应用是没有帮助的。
这里的解决方案是创建和发布关于现实生活数据的免费、开放和公共领域的数据集,然后发布对其进行预训练的模型(CV 领域中就是这样)。但是除了 Mozilla 的 Common Voice 项目之外,我们还没有看到什么有价值的计划。
无法复现的结果
在 ML 中有一个常见的模式,那就是每周都有人声称获得最新的结果,但这种结果很难复现,或者没有附带容易跑起来的代码。
考虑到与加速硬件和大型数据集集成的难度,以及训练模型所花费的时间,结果就更难复现了。
与其把“最顶尖”挂在嘴边,我们认为行业应该更多关注“足以在现实生活中使用的”解决方案和公共数据集。
针对学术界的批评
以下是我们想法的简单总结:
如果一大群人都只针对某种度量标准刷分,这种标准就没什么意义了。更新速度不够快的学术数据集会变成企业用来炫耀实力的“排行榜”。在刷分时使用大规模的硬件资源,运行庞大且样本效率低下的网络是司空见惯的,可这只有实力雄厚的玩家才玩得起。
理想情况下,论文应该提供足够的细节,让独立研究人员至少可以复现 95%的结果。
在现实中,论文的内容和结构往往和文章的实际目的与现实应用之间脱钩,论文作者可能抱着破罐破摔的心态,用复杂的数学语言去描绘新的概念,其实作者自己可能根本就不会用上那些数学方法。
除了可复现性之外,这些论文还有其他一些常见的缺陷:
他们对方法的泛化性(也就是在其他领域进行测试)表现闭口不谈。光看论文,好像神经网络已经在 ASR 中击败了人类,但其实这只是刷分出来的结果。
他们往往不说自己使用了多少计算资源。
他们极少公布收敛曲线。在 ML 中,往往只用总计算量的一小部分就可以实现 95%甚至 99%的结果。
被 SOTA Bug 咬一口
我真的很喜欢“被 SOTA bug 咬一口”这个表述。也就是说刷分只会让某个标准失去意义(也就是Goodhart定律)。在 ML 中,经常发生的事情是模型对评测数据集的某些隐藏的内在质量要素过拟合了。例如在 CV 领域中,这种模式一般是视觉上相似图像的群集。
单纯追求学术或科学目标,且怀抱理想的小型不知名社区不太会掉进 Goodhart 定律的陷阱。一旦社区出了名就会开始刷分,然后就不再有真正的进步,直到出现什么危机为止。这就是“被 SOTA Bug 咬一口”的意思。
例如,在自然语言处理领域的这种氛围下,人们针对公共学术评测标准非理性地投资构建出了一堆庞大的模型,但是由于许多原因,这种“进步”的价值非常有限:
即使是最出色的前沿模型,对现实任务的理解也非常有限(毕竟 ML 是模式匹配)。
最近的顶尖结果越来越难对比,因为它们使用的计算量可能相差一个数量级之多。
难复现的特性限制了现实世界的应用;
数据和计算量越来越多,结果顶尖结果变得司空见惯;
排行榜被高估了。
最近出现了很多 NLP 学术数据集,但它们的实用性往往受到许多因素的限制:
此类数据集大都是英文语种的。
这样的数据集在研究领域可能表现出色,但是与 CV 领域不同的是,很难将它们合并到现实的管道中。
尽管像 SQUAD 这样的数据集在构建时投入了大量人力物力,但是你没法把它们用在生产模型中。
稳定的生产级 NLP 模型往往基于高出几个数量级的数据量,或者处理的任务简单得多。例如,神经网络应该可以可靠地进行 NER,但想让它正常回答问题或对话交流就是痴心妄想了。有一个比喻很合适:用 transformer 构建 AGI 就像是要通过盖楼来登月一样;
我们赞同关于 ML 验证和指标的一种观点,那就是 ML 管道应被视为一种压缩算法,也就是说你的管道将现实世界压缩为一个具有内存、计算和硬件要求的计算图和模型的集合。如果你能把模型所需的计算量或权重足迹缩小到 1/10,而性能基本不变,那么这比多刷 0.5%的分数要有意义的多。
另一方面,好消息是业内人士开始考虑自己方法的效率了,甚至谷歌也开始发表有效地对Transformers进行预训练的论文(当然是基于谷歌的计算规模)。
论文内容与结构
以往,ML 中的新想法一般是以数学公式的形式写在论文里发表出来的。但这种做法有自己的缺陷,因为如今随着开源工具的广泛应用,在构建应用解决方案、优化现有解决方案、解释事物的工作机制(这是一项独立的艰苦工作)和构建基本模块或框架(如百度的 warp-ctc 或 Facebook 的 PyTorch),以及创建新的数学方法之间存在着明显的界限。
ML 研究人员普遍认同论文中遍布方程式的事实。但它们是否真的能帮助我们理解事物的原理呢?以连接主义时间分类(CTC)损失为例:几乎所有用到这个损失的 STT 论文都有专门的对应章节。你可能会在里面找到一些公式,但是看公式就能理解了吗?
CTC 损失是一件复杂的事情,可能还是 STT 研究的最大推动力,但很少有论文提及它们使用了哪种实现。在我读过的所有论文中都没见过以下想法,是因为我没注意到,还是因为我用的实现的怪癖,还是他们故意忽略了这些内容?
每隔 3 个月,我将warp-ctc(移植到 PyTorch)与PyTorch的原生CTC损失做对比,而后者在真实数据上就是不能正常工作。
与标准损失相比,CTC 损失相当“激进”。
通常需要某种形式的裁剪或预热,CTC 损失“喜欢”爆发。
在网络的第一个 epoch 期间,你应该认真选择该向网络展示哪些数据。
当然,你可以参考(由数学家撰写的)原始论文,也可以参考这篇精彩文章。但其实我能找到的最好的解释来自一段俄语YouTube视频,视频里两个家伙坐下来,用一些 PPT 和示例一步步解释了它的原理。所以说论文里堆得满满的这些公式虽然在技术上是正确的,可它们又有多少实际价值呢?
试想一下,如果 ML 论文和出版物遵循以下模板,那么读起来会轻松许多:
论文使用了 xx 工具箱、实现和思想;
做出了 xx 重大更改;
运行了 xx 实验,得出了 xx 结论。
在“小型”学术数据集上训练的样本效率低下的超参数网络
让我们看看自从 ASR 领域的里程碑论文Deep Speech 2发表以来,业界取得了多大进展。
图源:https://paperswithcode.com/sota/speech-recognition-on-librispeech-test-other ,其中人类的成绩来自 Deep Speech 2 论文。
看起来字符错误率(CER)和单词错误率(WER)指标已经降低了 60%,并超过了人类水平,不是吗?既然表现这么出色,怎么 STT 技术就没在现实世界广泛流行呢?为什么语音接口还被认为是一种新潮功能,尤其是在业务应用程序中更是如此呢?
按照下表,人类在给音频注释时会有 5-10%的错误率,但这个表其实是误导人的。我们读过
下面的几篇论文后注意到了一些事情:
较新的论文很少使用较小的模型进行消融测试(ablation test)。
声称实现顶尖性能的 ASR 论文中极少出现收敛曲线。
这些论文很少报告用于超参数搜索和模型收敛的计算量。
在我们读过的论文中,只有 Deep Speech 2 提到了较小数据集上的性能水平该如何迁移到实际数据中(也就是在其他领域进行验证)。
实际数据集的样本效率和可扩展能力并未得到优化。2019 年有几篇论文做了这种事情,但他们主要关心的是减小模型大小,而不是缩短训练时间。
诚然,研究工作都有自己的周期(做出效率较低的新尝试,对其进行优化,然后再取得新的突破),但在实践中,ASR 研究似乎是 Goodhart 定律的好例子。
如果读过pre-trained Deep Speech in PyTorch的发表说明,应该会惊讶地看到这一句:“不要指望这些模型在你自己的数据上表现良好!”——它是在 1000 小时的语音数据集上训练的,而且 CER 和 WER 非常低!但实际上,就算在某些理想的 10,000 小时大型数据集上,系统的 WER 也会比论文数据高出 25-30%。
在 CV 研究中,更好的 Imagenet 性能是可以迁移到数据集较小的真实任务中的;而在语音领域,更好的 LibriSpeech 性能并不能转移到真实世界的数据集中!你不能像在 CV 研究中用 1,000 张图像训练网络那样,用 1,000 小时的语音“快速调整”你的网络。
所有这些意味着,学术界和企业界为了刷分已经搞出来了越来越多的复杂方法来过拟合 LibriSpeech。
研究人员希望针对自己的问题取得进展,并使用自己可用数据的做法是可以理解的,但到头来这一切意味着,如果有一个像 ImageNet 那样真正庞大且具有挑战性的数据集,我们的进步会快得多。
过度依赖大规模计算资源
过度参数化的示例。谷歌在实验中证明大中型网络之间的质量没有明显差异,也就是说,在实践中你大可使用一个中型网络,并使用其他技巧来提高质量。
下表是我们对著名的或近期内 ASR 论文中使用的计算资源的分析:
俄语是比英语更难的语言,因为它的变化更多。我们的数据集包含许多域,因此无法直接与 LibriSpeech 对比,但 LibriSpeech 比我们的数据集更加同质化且噪音更少。
从表中我们可以观察到以下内容:
在 LibriSpeech 上训练的模型大都采用了循环的方法,也就是展示完整的数据集 n 次。这是非常消耗成本的。因此我们使用了一种课程学习方法。
QuartzNet。这篇论文重点关注效率。但它在训练中使用的计算量似乎和其他论文差不多。
TDS。尽管他们没有明确报告训练网络需要多少时间(我们尝试复制他们的网络,但失败了),但他们有很多合理的想法:使用字节对编码(BPE),使用超过 2 或 3 的模型步幅,使用可分离的卷积,等等。
JasperNet。他们报告说网络要么训练了 50 个 epochs,要么是 500 个,而没有明确给出训练时间或所用的硬件资源。
Wav2Letter。回过头来看,令人惊讶的是 Wav2Letter 论文实际上没有报告任何一种指标。我们试用了类似 Wav2Letter 的网络,其具有大约 20-30M 的参数,但是无法提供俄语语种。
Deep Speech 2。这份列表把 Deep Speech 论文加进来其实不妥,因为他们尝试、推广和开创了许多事物。这里只引用一下他们最常被引用的 LibriSpeech 实验与他们的递归模型。
模型大小与最终结果的比较,Deep Speech 2。
数据量与最终结果的比较,Deep Speech 2。
在表中我们还可以发现一些趋势:
几乎所有人都在使用庞大的计算资源,并且没有明显可见的硬件需求趋势(即便在论文中声称计算需求减少了)。
网络的规模有小有大,但总的来说可以认为大多数网络(不管用了多少计算量)都对 LibriSpeech 过拟合了。
如果你跳至“取得的总体进步”一节并对比我们的收敛曲线和下面的收敛曲线,你会看到表现最好的那些网络里 90%的收敛发生在前 2-3 天,这与行业水平是一致的(但是我们使用的计算量少得多)。
Deep Speech 2 的收敛曲线。
其他常见的批评
还有一些针对 ML 或 STT 的常见批评:
论文往往对其方法的泛化水平(即在其他领域进行测试)的表现模糊不提。
对很少有人关注超参数稳定性。
全新的半监督和无监督学习方法不对样本效率、鲁棒性或泛化水平做任何合理性或粗略检查,并且主要关注的是新颖性因素。
什么事情都要端到端。学术论文通常会过拟合 LM,并在一个小的理想化数据集(LibriSpeech)上进行后处理。声称能得到顶尖结果的方法完全没那么好用,因为文本域中可用的数据量至少多出 1000 倍(维基百科的文本量与 LibriSpeech 中文本量的差距就是一个例子)。
对梅尔频率倒谱系数的过度依赖。我们还没有看到有人公平地对比短时傅立叶变换、梅尔频率倒谱系数、梅尔滤波器组和小波变换。在我们对较小数据集的实验中,不管用哪个到头来都没区别,但是在现实的嘈杂数据集上短时傅立叶变换是表现最好的。此外,我们无法使用SincNet等新型网络过滤器进行任何有意义的实验。
对我们自己解决方案的批评
公平地说,我们对自己的方法也有一些批评:
我们使用了私有数据来训练模型,只不过私有数据集的大小比整个数据集小几个数量级。例如,“高质量基准”大约有 500 小时(其中 100 小时为手动注释),而在公开数据集中则为 20,000 小时。
此外,这篇文章报道的主要结果是只通过少量的手动注释实现的。我们使用这么少的私有数据,主要是因为我们需要在目标领域中获得生产结果。
与我们的数据集不同,我们没有共享训练管道、特定的超参数和模型设置,以及预训练的模型,因为所有这些研究都是针对自筹资金的商业项目进行的。我们本可以依据非商业许可共享出来,但在俄罗斯,知识产权保护对非国有垄断企业是一种摆设。我们正在寻找办法来解决这个问题。
总结
最近在大众媒体上,与有监督的 ML 技术相关的报道泛滥成风。这是因为这一领域在一堆不切实际的承诺推动下进入了非理性繁荣和过度投资的局面。
这种现象很可悲,因为它可能会导致有利于整个社会的领域出现投资不足的困境。但是我们为什么要关心和参与这些事情呢?因为语音识别这种技术具有让无聊的任务自动化的巨大潜力,并能让人们将精力放在更重要的事情上。这种变革是有历史参照的。20 年前,这种“奇迹”技术是关系型数据库。请阅读 Benedict Evans 关于这个主题的精彩文章。
关系型数据库是一个新的基础支持层,它为计算行业带来了新的可能性。在关系数据库出现之前,如果你希望数据库向你显示“购买了该产品并居住在这个城市的所有客户”,那你往往需要一个定制的工程项目。过去的数据库的结构没法做到让任意的交叉引用查询都能轻松实现。如果你想问一个问题,则必须有人为它做一个方案。过去的数据库是记录存储系统;而关系型数据库将它们转变成为业务智能系统。
这改变了数据库在重要领域的用法,从而创造了众多全新用例和一众企业巨头。关系型数据库给了我们 Oracle,然后是 SAP,而 SAP 及同行给了我们全球即时供应链——随之而来的是苹果和星巴克。到 1990 年代,几乎所有企业软件都是一个关系型数据库。没有人看到 SuccessFactors 或 Salesforce 时会说“因为 Oracle 拥有所有数据库,所以这是行不通的”——相反,这项技术成为了所有要素的支持层。
因此,这是思考今天 ML 产业的一个很好的历史参照。ML 技术是计算产业可能性的进一步拓展,它将成为许多公司的许多产品的一部分。最后,几乎所有事物都将内置 ML,没人会觉得奇怪。一个重要的参照是,尽管关系数据库具有规模经济效应,但网络或“赢家通吃”效应是很有限的:A 公司买来的数据库不会因为 B 公司买了同样的数据库而变得更好。实际上机器学习的情况也差不多:机器学习谈的都是数据,但是数据都是针对特定应用专门收集的。更多的笔迹数据能带来更好的手写识别,更多的燃气轮机数据能改进燃气轮机的故障预测系统,但它们之间是没有互助关系的。数据不可替代。
根据他的理念“机器学习只是一个能够回答一些问题的功能栈,就像无处不在的关系数据库那样”进一步推理下去,只有我们才能决定语音识别技术的未来命运。我们不知道这种技术产生的利益是会普惠大众,还是由少数人独享。我们坚信,语音识别技术肯定会在 2-3 年内商品化。剩下的唯一一个问题是——这些商品看起来会更像是 PostgreSQL 还是 Oracle?还是说两种模式共存?
作者介绍
Alexander Veysov 是 Silero(一家开发 NLP/语音/CV 支持产品的小公司)的数据科学家,也是 OpenSTT(可能是俄罗斯最大的公共口语语料库)的作者(我们计划添加更多语言)。Silero 最近已经交付了他们自己的 STT 俄语引擎。在此之前,他曾在一家位于莫斯科的 VC 公司和 Ponominalu.ru(一家由俄罗斯电信巨头 MTS 收购的票务初创公司)工作。他在莫斯科国立国际关系大学(MGIMO)获得经济学学士和硕士学位。你可以在 telegram 上(@snakers41)关注他的频道。
原文链接:
A Speech-To-Text Practitioner’s Criticisms of Industry and Academia
评论