【论文精读】Robust Speech Recognition via Large-Scale Weak Supervision

news2024/11/19 20:28:28

Robust Speech Recognition via Large-Scale Weak Supervision

  • 前言
  • Abstract
  • 1. Introduction
  • 2. Approach
    • 2.1. Data Processing
    • 2.2. Model
    • 2.3. Multitask Format
    • 2.4. Training Details
  • 3. Experiments
    • 3.1. Zero-shot Evaluation
    • 3.2. Evaluation Metrics
    • 3.3. English Speech Recognition
    • 3.4. Multi-lingual Speech Recognition
    • 3.5. Translation
    • 3.6. Language Identification
  • 4. Analysis and Ablations
    • 4.1. Dataset Scaling
    • 4.2. Model Scaling
    • 4.3. Multitask and Multilingual Transfer
  • 5. Related Work
  • 6. Conclusion
  • 阅读总结

前言

语音领域的又一力作,来自OpenAI团队,中稿于ICML 2023。本篇文章剑走偏锋,不同于当前火热的自监督预训练 ,而是采用大规模的弱监督预训练,特别适用于语音场景,这也为启发了广大的AI科研人员,做研究不能一股脑蹭热度,而是要根据特定的场景对症下药。


Paperhttps://proceedings.mlr.press/v202/radford23a/radford23a.pdf
Codehttps://github.com/openai/whisper
FromICML 2023

Abstract

本文探索了语音处理系统通过简单训练从而处理互联网大量音频转录的能力。作者在68万小时的多语言多任务的数据上进行预训练,得到的模型无需微调就可以和完全监督相竞争,接近人类的性能。

1. Introduction

Wav2Vec 2.0等无监督预训练工作推动了语音识别领域的进步,它们高效利用了无标注的大型数据集,规模甚至达到了一百万小时,远比监督数据集的1000小时多。这些方法在标准benchmark上微调达到了SOTA。
然而上面的方法基于无监督预训练,缺乏相应映射的解码器,需要微调才能执行语音识别等任务。微调过程的复杂性限制了这些模型的可用性,并且针对特定数据集的微调泛化性能不佳。语音识别系统的目标应该是在广泛的环境中即插即用,而不需要针对特定的部署对解码器进行微调。
现有的监督学习方法虽然在多个不同的数据集上跨域训练,表现更高的鲁棒性,但是监督数据集的规模限制了该方法的发展。
因此最近有工作努力创建更大的弱监督数据集,通过对质量和数量上的权衡来扩大数据集,从而显著提高模型的鲁棒性和泛化性。但是规模仍然难以和百万小时的无监督数据集相匹敌。
本文作者将弱监督数据集扩大到了68万小时,使用的方法称作Whisper,作者展示了其强大的泛化能力。此外,除了数据的规模。作者还将工作侧重语言的多样性和任务的多样性,并发现对于足够大的模型,多语言多任务训练会进一步提升模型的性能。

2. Approach

2.1. Data Processing

依赖sequence-to-sequence模型学习转录映射的能力,作者训练Whisper直接预测原始文本,无需任何标准化和预处理,简化了转录步骤。
作者从互联网上收集了大量不同环境的音频文本对数据,虽然提高了模型的鲁棒性,但是低质量的音频对训练没好处,因此作者对收集的数据采用了如下的过滤方法:

  1. 启发式方法过滤机器生成的字幕。
  2. 应用音频语言检测器,确保声音和字母是相同的语言(除了英语)。
  3. 训练时汇总数据错误率并排序,删除低质量的数据。

作者将音频切分为三十秒的片段进行训练。

2.2. Model

image.png
模型采用原始的Transformer,以证明性能的提升只受到监督数据规模的影响。所有的音频重采样到16000Hz,并且在25ms的窗口上以10ms的步幅计算80维通道的对数梅尔频谱图表示。此外,对输入也进行了特征归一化。为了减小计算的开销,编码器输入采用了两个宽度为3的卷积层和GELU激活函数,对输入进一步压缩,然后将正弦位置编码嵌入到输入中,再应用到编码器模块。解码器使用可学习的位置编码,并对输入的文本绑定特殊的标记。tokenizer采用了GPT-2的字节级BPE,并为多语言模型调整了词表。

这里很有意思的一点是为什么要对输入进行压缩,而不是直接采用50ms的窗口,因为当采用50ms的窗口时,有时候会超过人说话的频率,可能会导致精度降低。

2.3. Multitask Format

一个完整的语音处理系统还涉及其它组件,如语音活动检测,人物检测和逆文本归一化等。这些组件如果能够整合到一个模型中将大大简化相关工作。实际上,对于同一输入音频信号只需要进行相应的任务规范,就可以执行多个不同的任务。作者将特定的任务信息和语音信息指定为输入模型的序列。此外,还会有一定概率将之前语音片段添加到当前语音片段序列的上下文中,帮助模型学习通过上下文解决不明确的音频。
作者采用<|startoftranscript|>标记来指示预测的开始,整体流程如下:

  1. 首先判断是否有声音,执行语音活动检测。
  2. 接着预测语言类型,并给定相应token。
  3. 下一个token使用<|transcribe|><|translate|>标记转录还是翻译任务,<|notimestamps|>指定是否用时间戳。
  4. 最后添加<|EOT|>标记表明任务结束。

2.4. Training Details

作者训练了从39M到1550M一系列大小的模型,并且没有采用任何数据增强或者正则化。在初始开发的过程中,作者观察到Whisper倾向于转录看似合理但是错误的说话者的预测,这是因为许多字幕包含说话者的姓名,为了避免这种情况,作者对Whisper进行了不包含说话者数据的微调。

3. Experiments

3.1. Zero-shot Evaluation

Whisper的初衷就是无需微调就能在各种场景产生高质量结果。为了验证这个能力,作者在现有的语音数据集上来测试Whisper零样本性能。

3.2. Evaluation Metrics

语音领域通常根据单词错误率(WER)指标来评估系统。但是WER会惩罚输出和参考的所有差异,甚至不影响结果的格式差异。这对Whisper很不友好。为此,作者对输出进行文本标准化处理,尽量减少WER惩罚。

3.3. English Speech Recognition

虽然语音领域在2015年就达到了人类的水平(Deep Speech 2),并且当前的LibriSpeech又将当时SOTA WER下降了73%,但是在不同的场景下,仍然与人类有巨大的差距。
作者推测差距的原因在于测试集混淆了二者的训练方式。机器学习模型在分布内的数据集上进行训练后评估的,而人类是在分布外的泛化表现。而Whisper模型和人类的训练方式相同,都是在广泛多样的音频上训练,在零样本下评估。为了量化Whisper和人类之间的评估差异,作者测试了总体稳健性和有效稳健性,用于衡量分布内与分布外数据集之间预期性能的差异。结果如下图和下表所示:
image.png
image.png
尽管Whisper在LibriSpeech上表现不显著,但是它与其它监督的LibriSpeech模型相比具有很好的鲁棒性,在其它数据集上远远优于所有基线模型,并且在其它数据集上也和人类的表现相匹配。为了进一步量化鲁棒性,上表展示了Whisper和其它模型在其它数据集上的表现,Whisper将误差下降了55.2%。这一发现强调了零样本和分布外评估的重要性,因为先前的模型虽然在单个数据集上表现好,但是泛化性能差,其能力被夸大了。

3.4. Multi-lingual Speech Recognition

image.png
Whisper在多语言任务上的表现如上表所示,在MLS上展现出优越的性能,但是在VoxPopuli上性能不佳,可能原因是VoxPopuli数据集训练数据量是MLS的十倍,其它模型可以经过很好的微调从而提升性能。
为了更广泛研究Whisper的性能,作者报告了Fleurs数据集上的性能,研究不同语言训练数据量与零样本性能的关系:
image.png
作者发现单词错误率的对数和每种语言的训练数据量的对数之间存在0.83的强平方相关,即数据量每增加16倍,WER就会减半,此外部分语言由于和印欧语言体系不同,导致结果远不如预期,如HE,TE,ZH和KO。根本原因在于字节级BPE tokenizer与这些语言不匹配。

3.5. Translation

image.png
作者在CoVoST2数据集上评估模型的翻译能力,由于Whisper的评估是零样本,因此在该数据集上低资源分组表现出色,但是在高资源数据上没有明显提升。

3.6. Language Identification

作者在Fleurs上评估模型的语言识别能力,64.5%的零样本性能比当前mSLAM-CTC 2B的77.7%低了13.6%,没有竞争力。这是因为Whisper不包含Fleurs上20种语言的训练数据。在有的语言上,准确率达到了80.3%。

4. Analysis and Ablations

4.1. Dataset Scaling

为了衡量数据的大小对Whisper性能的影响,作者在中型模型上对不同规模的数据进行了评估。image.png
可以看到,数据集大小的增加会提升所有任务的性能,虽然不同任务的性能增幅不同。

4.2. Model Scaling

作者还做了模型大小的分析。
image.png
基本上所有任务都随着模型大小的增加而不断提高。

4.3. Multitask and Multilingual Transfer

大一统的模型可能会导致模型的性能不如单任务模型。为此作者将仅英语训练模型和Whisper进行零样本英语语音识别的比较。
image.png
可以看到,在中等计算量的小模型上存在着负迁移,但是多任务和多语言模型的扩展性更好,随着计算量增大其性能超过单任务模型,表明其具有积极的迁移性能。

5. Related Work

略。

6. Conclusion

Whisper的工作表明,在语音领域,大规模的弱监督预训练一直没受到重视。虽然当前大规模无监督预训练是主流,但是在语音领域,显然大规模弱监督预训练可以解决更多的任务,并且具有良好的鲁棒性。

阅读总结

Whisper的工作方法简单,效果显著,虽然并没有公布弱监督训练数据集的具体内容,但是这样也从侧面反应,对于一些跨领域的任务,单单无监督预训练是远远不够的。正如第六节总结部分所言,Whisper的工作表表明,在语音领域大规模的弱监督预训练一直没受到重视,我想很多领域也一定是同样的情况。
我在之前ViT和MAE工作的博客中曾经说过,大规模的监督训练只是做着简单的分类任务,因此不能像无监督预训练那样很好学习到当前领域数据的特征信息。当然这肯定不是错误的言论,对于MAE来说,进行过大规模无监督预训练后,还是需要在下游任务上微调才能解决相应任务,远远不如零样本模型来的方便。在语音领域,Whisper之所以成功我认为还是预训练任务并不是纯粹的分类任务,它是需要解码器进行生成的,再加上多任务和大规模弱监督数据的加持,因此性能优于无监督预训练微调的模型。但是Whisper应该还有很多的改进空间:、

  1. 大规模的弱监督数据进一步清洗,除了启发式或者规则方法,还可以训练模型来清洗。
  2. Whisper可以先在大规模的无监督语音数据上进行预训练,相信一定会学到更多语音的特征。

此外,本文的模型图让我印象深刻,简洁明了,思路清晰,让人一目了然,非常值得学习借鉴。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1099090.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows系统加密

Windows系统加密 这里类似一个简单的系统加密&#xff08;开机不插U盘&#xff0c;会在设定的时间后关机&#xff09; 小白教程&#xff0c;一看就会&#xff0c;一做就成。 1.看U盘在你电脑上的盘符 先把U盘插电脑上&#xff0c;看看U盘的盘符&#xff0c;我这里是H 2.在U…

深入浅出的介绍一下虚拟机VMware Workstation——part3(VMware快照)

虚拟机VMware使用 前言快照的原理快照的使用 前言 可以先查看之前的2篇博文&#xff0c;学习基础的虚拟机使用 深入浅出的介绍一下虚拟机VMware Workstation——part1 深入浅出的介绍一下虚拟机VMware Workstation——part2(详细安装与使用) 由于我们使用虚拟机的初衷就是用来…

磁盘数据恢复怎么操作?4个方法,亲测有效!

“谁能帮帮我啊&#xff01;我的电脑磁盘部分数据丢失了&#xff0c;是非常重要的数据&#xff0c;有什么方法可以找回来吗&#xff1f;最好是小白也能轻松操作的方法&#xff0c;感谢&#xff01;” 在我们的日常生活和工作中&#xff0c;磁盘数据恢复的技能变得越来越重要。当…

Kotlin笔记(三):扩展函数,运算符重载

1. 扩展函数 扩展函数表示即使在不修改某个类的源码的情况下&#xff0c;仍然可以打开这个类&#xff0c;向该类添加新的函数。 在Java中,如果我们需要统计字符串中的字母的数量的话,我们通常需要建立一个工具类,然后在工具类里面创建一个新的方法来实现该功能. 在Kotlin中,由于…

油猴脚本百度网盘不限速(亲测有效)

安装油猴[Tampermonkey]插件 打开浏览器&#xff08;我用的是Chrome&#xff09;&#xff0c;然后点击右上角【…】&#xff0c;在出来的菜单里&#xff0c;选择【更多工具】然后点击【扩展程序】。 然后点击左上角三条杠 点击下方打开Chrome网上应用商店 搜索【Tampermonkey】…

中电金信鲸视:以AI视觉技术为复杂行业场景装上“火眼金睛”

作为人工智能和计算机视觉的交叉领域&#xff0c;智能视觉通过仿生人类视觉机能&#xff0c;对不同形式的视觉输入进行处理、理解和决策。现今&#xff0c;智能视觉已成为应用广泛、市场覆盖大、形式多样的产业方向&#xff0c;得到了国家政策的大力支持。 如在科技部等六部门印…

电脑桌面怎样设置闹钟提醒?电脑上定闹钟的方法

想必大家在日常工作生活中都会遇到各种需要提醒的场景&#xff0c;例如提醒参加会议、提醒完成重要工作任务、提醒休息等。而在电脑桌面上设置闹钟提醒&#xff0c;成为了许多人的需求。然而&#xff0c;在Windows电脑上设置闹钟提醒的方法常常复杂繁琐&#xff0c;让我们不得不…

MySQL 4 MySQL使用演示(包含基本操作命令~~~)MySQL5.7编码设置

目录 1 MySQL的使用演示&#xff08;8.0和5.7版本对比&#xff09; 1、查看所有的数据库 2、创建自己的数据库 3、使用自己的数据库 4、查看某个库的所有表格 5、创建新的表格 6、查看一个表的数据 7、添加一条记录 8、查看表的创建信息 9、查看数据库的创建信息 …

pip安装总是失败怎么办

换国内好几个镜像也是总是失败,这里不再说这种方法,主要讲将本地安装 WHL文件安装 首先&#xff0c;要从官网&#xff08;https://pypi.org/project/&#xff09;上下载指定的.whl文件&#xff0c;进入官网后搜索Flask-SQLAlchemy&#xff0c;选择最近版本点击&#xff0c;在Do…

ICC2:skip route

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 一些net&#xff0c;不需要工具去绕线的时候可以用skip route功能&#xff0c;可以是没绕线&#xff0c;不需要绕线的情况&#xff0c;也可以是绕了线不希望被工具动到的情况。…

计算机基础知识32

Socket抽象层(socket编程) # Socket是在应用层和传输层之间的一个抽象层&#xff0c;它把TCP/IP层复杂的操作抽象为几个简单 的接口供应用层调用已实现进程在网络中通信 socket () 对象 bind () 函数来绑定 listen () 监听&#xff0c;等别人电话 accept&#xff08;&#…

C++使用openssl对AES-256-ECB PKCS7 加解密

/** AES-256-ECB PKCS7 加密 函数* input:经过PKCS7填充后的明文数据* outhex:加密后的命名数据16进制数,可以使用base64_encode转换为base64格式字符串密文* key:密钥* len:经过PKCS7填充后的明文数据长度*/ void AesEcb256Pkcs7Encrypt(u8 *input, u8 *outhex, u8 *key, int …

18.项目开发之前端项目搭建测试

项目开发之前端项目搭建测试 解压文件&#xff0c;将前端项目目录&#xff0c;拖拽到HBuilder中 前端项目QuantTrade_vue地址&#xff1a;传送门 后端项目QuantTrade地址&#xff1a; https://pan.baidu.com/s/1GF45B0QepApH8JbRIOLY7w?pwd1016 开启idea的项目&#xff0c;先…

连连国际:助力跨境卖家在TikTok Shop全球平台轻松收款

数字化时代的崛起已经改变了人们的生活方式&#xff0c;也彻底颠覆了传统商业模式。社交媒体平台&#xff0c;如TikTok&#xff0c;已经不仅仅是人们分享生活的地方&#xff0c;也成为了商业增长的重要渠道之一。 TikTok Shop&#xff0c;作为TikTok社交媒体巨头的电子商务延伸…

换低挡装置(Kickdown, ACM/ICPC NEERC 2006, UVa1588)rust解法

给出两个长度分别为n1&#xff0c;n2&#xff08;n1&#xff0c;n2≤100&#xff09;且每列高度只为1或2的长条。需要将它们放入一个高度为3的容器&#xff08;如图3-8所示&#xff09;&#xff0c;问能够容纳它们的最短容器长度。 样例 2112112112 2212112 1012121212 2121…

使用 Github Actions 工作流自动部署 Github Pages

GitHub-Actions actions顾名思义就是一堆动作&#xff0c;是一个持续集成服务&#xff0c;持续集成包含了拉代码、运行测试、编译代码、登录远程服务器&#xff0c;发布到第三方服务等等的操作&#xff0c;GitHub将这些操作称为actions。 概念&#xff1a;Workflows, Events,…

fastDFS实现文件上传与下载

前言 我们在做项目的时候经常会遇到文件的上传与下载。你们是怎么做的呢&#xff1f;现在有一个技术可以非常简单的实现这个功能——fastDFS 简介 FastDFS是一个分布式文件系统&#xff0c;使用FastDFS可以非常容易搭建一套高性能的文件服务器集群提供文件上传、下载服务。 …

RocketMq(六)消息传输方式

在前面的基础上&#xff0c; 一、消息传输方式:在RocketMQ中&#xff0c;可以通过设置消费组的方式实现消息的广播和点对点传输。 1、默认方式:多个消费者轮询消费&#xff0c;若只有一个消费者则全部消费。通过下面的举例可以看到这其实就是点对点模式。 &#xff08;1&…

Rockchip 3588 开关HDMI

需求 上层Android要控制hdmi&#xff0c;dp等等(带有节点的功能)的开关&#xff0c;配置&#xff0c;获取状态。 方案 我们可以从Settings的源码中找到方法&#xff1a; 从HdmiSettings.java的源码中可以看到如下注释&#xff1a; 相关节点定义&#xff1a; 控制函数如下&…

云服务器ip使用细节(公网、私有)

场景&#xff1a; 当我们对tcp服务器进行监听的时候&#xff0c;可能需要用到ip地址&#xff0c;比如使用httplib::Service::listen(ip, port)&#xff0c;而当我们访问tcp服务器时也需要ip地址 但这两个ip是不同的&#xff01; 每个云服务器通常都会有一个公网IP地址和一个私有…