Whisper论文阅读笔记

news2025/7/8 10:05:06

Whisper论文阅读笔记

  • Robust Speech Recognition via Large-Scale Weak Supervision
  • 1. 引言
  • 2. 方法
    • 2.1 数据处理
    • 2.2 模型
    • 2.3 多任务设置
    • 2.4 训练细节
  • 3. 实验结果
    • 3.1 Zero-shot
    • 3.2 多语言语音识别
    • 3.3 多语言机器翻译
    • 3.4 语种检测
    • 3.5 对加性噪声的鲁棒性
    • 3.6 长语音转录
    • 3.7 人类基线
  • 4. 分析与消融
    • 4.1 模型大小
    • 4.2 数据集大小(小时)
    • 4.3 多任务和多语言迁移能力

Robust Speech Recognition via Large-Scale Weak Supervision

Blog
Paper
Model card
Colab example

这篇文档介绍OpenAI提出的新的语音识别系统:Whisper,它在英语语音识别方面实现了接近人类水平的鲁棒性和准确性。

1. 引言

背景

大规模基于纯语音预训练模型取得了很好的发展。(wav2vec2, et al.)

  1. 数据集已经达到了百万小时级,远超过千级的标注语音识别数据。
  2. 在下游任务的Finetune中可以实现SOTA (尤其是小规模的数据集上)

缺陷

  1. 这些无监督的预训练模型只能学习到一个非常高质量的音频表示。但是,缺少一个相同质量的Decoder来映射这些音频表示以获取最终的输出。这意味着,这些预训练模型的使用是受限的,需要为下游任务的Finetune设置复杂的流程,而作者认为做这样的事情是需要比较高的专业知识的。
  2. 机器学习模型往往在它学习过的数据集上可以取得很好的性能。但是,泛化能力不行。也就是说,在某一数据集上训练得到的模型,虽然它可能取得了超越人类的性能,但在其他数据集上的表现可能并不理想。

作者的见解

The goal of a speech recognition system should be to work reliably “out of the box” in a broad range of environments without requiring supervised fine-tuning of a decoder for every deployment distribution.

“语音识别系统的目标应该在通义环境下做到开箱即用,而不是需要针对于每个数据集,设置一个特定的解码器,来进行带监督的微调”

现有工作

拼接了多个有监督的数据集,实现跨多个数据集/领域的预训练。相较于以往依赖单一数据集的方式,模型的鲁棒性得到了很好的提升。

依然存在的挑战

缺乏高质量监督数据集:提供给语音识别系统的有监督数据集非常少,拼接起来也只有5000多个小时,很难达到无监督学习那样的百万小时级别。

事实

已有工作在探索使用带噪声的有监督语音识别数据集进行预训练。说明,权衡质量与数量是一个不错的探索的方向。
朝着这个方向发散,在计算机视觉中的一些研究也证明了,通过大规模的弱监督的数据集,可以显著提高模型的鲁棒性和泛化性。

Whisper

为解决上述问题,提出的Whisper

  • 将有监督的语音识别数据集规模从千级提升到了68万小时
    • 在这种大规模的弱监督数据集上,模型无需微调就可以在任何数据集上实现有竞争力的结果。
  • 将将弱监督预训练的范围扩大到多语言和多任务。(Prompt learning)
    • 数据集中有11.7万小时的数据是涵盖了96种语言的。
    • 数据中有12.5万小时是某种语言,但是监督数据是英语的。
    • 证明了大模型对这种多语言,多任务的训练具有非常强的适应能力。

突出贡献

以往的工作都是往往需要收集特定的语音识别数据集进行有监督的学习,Whisper证明了,不需要做这些复杂的工作,通过足够大规模的弱监督学习,就可以实现一个非常有强的语音识别模型

2. 方法

2.1 数据处理

  • 数据处理中没有任何显著的标准化
    • 也就是说Whisper是端到端的。(现有的ASR系统会对文本进行预处理,比如标点符号,首字母大小写,词形,词干等)
  • 数据来源于互联网
    • 多样化:不同环境、收音条件、语言、设备等
  • 数据清洗
    • 设置了不同方式来清洗ASR数据。
      • 对混合人工和机器生成数据的数据集进行训练会严重影响翻译系统的性能
    • 语言检测器,判断音频的发声的语种和是否在规定范围内(CLD2),对不在的进行剔除。
      • 英语会特殊一点,只要文本是英语,语音发声是什么都可以。
  • 以30S进行分割
    • 包括有转录文本的数据和没有语音发声的片段(可以用于VAD)
  • 更细粒度的清洗 (可借鉴)
    • 训练了一个初始模型,将转录错误率高、对齐不良、不对齐等问题数据进行剔除
  • 训练数据与验证、测试数据集的去重

2.2 模型

Whisper模型结构

  • 音频输入:Log-mel spectrogram (16,000Hz, 80-channel, 25ms windows, 10ms stride)
    Input shape: (3000,80) 30S/10ms = 3,000, Zero mean [-1,1]

  • 文本输入:byte-level BPE Tokenizer (GPT-2, 由多语言数据训练得到的)

  • 模型结构:

    • 编码器:
      • 2层1D的卷积,滤波器大小为3,GELU激活函数,第二层卷积步长为3。
        • Output shape: (1500, 80)
      • 标准Transformer encoder
    • 解码器:
      • 标准Transformer decoder

2.3 多任务设置

Decoder input / Decoder output
conditional language model
prompt
prefix

4种训练任务6种组合方式:

  • Spoken Language Identification: 99种
  • voice activity detection (VAD): 有没有人声
  • Multilingual Speech Recognition:发声与文本一致
    • 时间戳预测: 该语音片段开始发声的时候,结束发声的时间(相对值)
    • 正常的Encoder-Decoder文本输入
  • Speech Translation:发声与文本不一致,且文本为英语。
    • 时间戳预测: 该语音片段开始发声的时候,结束发声的时间(相对值)
    • 正常的Encoder-Decoder文本输入

2.4 训练细节

  • FP16
  • Dynamic loss scaling
  • Activation checkpointing
  • AdamW
  • Gradient norm clipping
  • linear learning rate decay (warmup 2048 steps)
  • batch size 256
  • Steps: 2**20=1,048,576 (2-3 epoch)
  • Do not use any data augmentation or regularization

3. 实验结果

3.1 Zero-shot

讨论

  • 很多现有的模型,在特定数据集训练,并在与训练数据集分布一致的验证集上测试,虽然已经显示了超越人类的性能,但是在其他数据集上的表现却差强人意。
    • 也就是说,之前的模型可能夸大的模型的能力,因为他们不够泛化
  • 作者认为简单的将机器学习模型和人类的评分进行衡量是不合理的。
    • 因为机器是通过特定的语料学习得来的结果;而人往往没有在完全认识了解训练语料。
    • 也就是说,人的表现是数据集外的泛化性的度量;而机器是特定于数据集的。
  • 所以,Zero-shot的评估反而更像是与人相同的泛化性的评估。

数据集:LibriSpeech & TED-LIUM
在这里插入图片描述
说明

  • 横轴为Librispeech数据集测试集上的WER,Y轴为其他数据集上的WER
  • 紫色线为Whisper,蓝色线为其他模型(只在LibriSpeech上训练过)
  • 黄色线为人类基准,给出了95%置信度区间。

分析

  • 虽然现有的模型在LibriSpeech上训练,可以实现非常低的WER,但是在其他数据集上的WER却很高
  • Whipser在LibriSpeech上的Zero-shot虽然不如纯LibriSpeech数据集上训练的模型,但是,在其他数据集上的指标却很高。
  • 而且,Whipser模型是可以取得与人相当或者优于人类的性能的。
    在这里插入图片描述

说明

  • 预训练的Wav2vec2 是包括了LibriSpeech的训练数据的。
  • Whisper是在大量的互联网数据上预训练得到的。

分析

  • Whisper(Zero shot)和Wav2vec2(2020年提出)在LibriSpeech的测试集上都WER都是2.7
  • Whipser在其他数据集上的表现与Wav2vec2截然不同
    • 在其余13个数据集上Whisper的性能优于Wav2vec2模型性能 55.4%
    • 证明:Whipser 准确且鲁棒

3.2 多语言语音识别

[图片]

分析

  • 在MLS上实现了SOTA
  • 在VoxPopuli上不如XLS和mSLAM的原因可能是后者的训练数据中有很多VoxPopuli的原始数据,而且,后者的训练语料更干净。
    在这里插入图片描述

说明

  • 每种数据在Whisper预训练中具有不同的时长。
  • 上述曲线是语言对应的时长与Whisper模型的WER之间的关系。

分析

  • 训练数据中语种的时长与WER是线性拟合的。(0.84的强平方相关系数)
  • ZH(中)、KO(韩)等表现较差(可能是BPE不适合或者数据质量啥的)

3.3 多语言机器翻译

在这里插入图片描述

分析

  • Whisper在低、中资源下的性能更好,在高资源下,不如特定数据预训练的模型。
  • 数量质量与数量的权衡(whisper 68万小时 VS CoVoST2 861小时)
    在这里插入图片描述

分析

  • 训练数据时长与BLEU有明显的线性关系。
  • 0.24的强相关系数,低于0.84 。
  • 可能是因为,异常数据造成的,比如CY语,9K小时->9BLEU

3.4 语种检测

在这里插入图片描述

??? 作者说,这是因为Whisper的训练数据中不包含Fleurs训练数据中的20种语言,所以Whisper准确率的上限是80.4%,而不是100%。
在82中重叠的语言中,Whisper的准确率为79.7%。

3.5 对加性噪声的鲁棒性

[图片]
分析

  • ASR系统的性能随着噪声的增加而降低。
  • 很多模型在40dB的信噪比下性能是优于Whisper的
  • 但随着噪声的增加,其他模型衰退剧烈,且逐渐接近Whisper甚至低于Whisper的性能。
  • 证明了Whisper对噪声是鲁棒的

3.6 长语音转录

长格式的音频会通过30S的音频的窗口进行切分。
怎么合理的切分是一个问题,whisper提出了一套启发式方法:

# 1 beam search
beams = 5
# Temperature fallback
temperature = 0
while log(p) < -1 or gzip compression rate > 2.4 and temperature < 1:
    temperature += 0.2
# previous-text conditioning
if temperature < 0.5:
    conditioning = previous-text_conditioning + current_text_conditioning
# Initial timestamp constraint
if 0< start_time < 1:
    do ---

在这里插入图片描述

在这里插入图片描述

分析

  • !!Whisper在大多数数据集上的表现优于其他公司的模型 🐮🐮
    • Whisper是端到端的,几乎没有任何的数据处理!
  • 一些商业ASR系统可能已经在这些公开可用的数据集上进行了训练,所以Whisper的性能没准更优于图示。

3.7 人类基线

[图片]
分析

  • 计算机辅助服务的WER最低
  • 纯人工的表现只比Whisper好一个点
  • Whisper的英语ASR并不是很理想,但非常接近人类的水平。

4. 分析与消融

4.1 模型大小

[图片]
[图片]
在这里插入图片描述
分析:

  • 模型越大性能越好

4.2 数据集大小(小时)

[图片]

分析

  • 训练数据时长越长,模型的性能越好。
  • 纯英文上,超出1.3万小时后,感觉训练时长带来的收益已经很弱了。
  • 而多语言、多任务(其他语种转英语)的性能,增加训练数据时长带来的收益还是可观的。

4.3 多任务和多语言迁移能力

[图片]
分析

  • 训练量少的时候,存在负迁移。
  • 但是,训练量大的时候,是更优的。
  • 不调整,联合模型也略优于纯英语训练的模型。

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

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

相关文章

基于向量加权平均值的高效优化算法(Matlab代码实现)

&#x1f4dd;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;…

学习 RabbitMQ 这一篇就够了

文章目录一、MQ相关概念二、RabbitMQ相关概念三、安装四、HelloWorld五、工作队列5.1、轮询分发消息5.2、消息应答5.2.1、自动应答5.2.2、手动应答5.2.3、消息自动重新入队5.2.4、消息手动应答代码5.3、持久化5.4、不公平分发&#xff08;能者多劳&#xff09;5.5、预取值5.6、…

读书笔记3|使用Python,networkx对卡勒德胡赛尼三部曲之——《群山回唱》人物关系图谱绘制

读书笔记3|《群山回唱》-卡勒德胡赛尼 踉跄前行中&#xff0c;你总能在他们身上找到丢失的那一部分记忆。 一度看不下去这本书&#xff0c;因为最开始的章节里太痛了&#xff0c;加上我也离开我的孩子&#xff0c;生活已经够苦&#xff0c;我需要一点糖。这次实在太无聊了&…

php-上传图片加水印(文字水印图片水印)

img.php <?php $img 1.jpg; //获取图片信息 $info getimagesize($img); //获取图片类型 $type image_type_to_extension($info[2],false); //在内容中创建一个和图片一模一样的图片 $ext "imagecreatefrom{$type}"; //图片复制到内存中 $image $ext($img);…

基于SpringBoot前后端分离的网吧管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SpringBoot 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目…

PICO《轻世界》体验:随心畅玩,洒脱创作,潜力无限

不少玩家应该还记得&#xff0c;PICO 4发布会上曾宣布将在VR运动健身、VR视频、VR娱乐、VR创造四大方向展开内容布局。而目前&#xff0c;前三个完成了基本部署&#xff0c;在创造方向上则依托于刚刚上线的《轻世界》这款应用。《轻世界》是一款3D内容UGC创作产品&#xff0c;目…

php宝塔部署实战thinkphp考试平台管理系统源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 有个朋友发消息跟我说&#xff0c;在网上下载了一套thinkphp考试管理系统的源码&#xff0c;在搭建的时候遇到问题一直部署不起来&#xff0c;让我帮他看看&#xff0c;我看了下代码&#xff0c;里面有些部分代码…

2022年11月华南师范大学自考本科网络工程-本科实践题目

《互联网及其应用&#xff08;03142&#xff09;&#xff08;实践&#xff09;》课程试卷 答卷提交说明&#xff1a;编程代码与输出结果截图&#xff0c;放到一个文件中&#xff0c;文件以“序号 姓名 课程名 ”命名&#xff0c;本试卷有三门课程&#xff0c;请根据不同的课程…

k8s训练营

一、linux命名空间和docker 1.linux的7大ns--------------ipc,net,pid,mnt.uts.user 查看linux的ns lsns查看不同类型的ns [rootmaster ~]# lsns -t netNS TYPE NPROCS PID USER COMMAND 4026531956 net 116 1 root /usr/lib/systemd/systemd --system --deserialize …

公司代码全局参数设置及其意义

在SAP中配置公司时&#xff0c;会配置公司的全局参数&#xff0c;但这些参数具体的意思是什么估计很多同学都搞不懂&#xff0c;我也找了下资料&#xff0c;贴出来供大家参考。 设置参数路径&#xff1a;IMG→财务会计→财务会计全局设置→公司代码的全球参数→输入全局参数 账…

C++Qt开发——Linguist语言家

Qt Linguist 简介 Qt提供了一款优秀的支持Qt C和Qt Quick应用程序的翻译工具。发布者、翻译者和开发者可以使用这款工具来完成他们的任务。 发布者&#xff1a;承担了全面发布应用程序的责任。通常&#xff0c;他们协调开发者和翻译者的工作&#xff0c;可以使用lupdate工具…

激光雷达的厮杀18年:西方“诸神黄昏”,东方“新王隐现”

鼻祖、发明家、神童、梦想家、特种兵和中国双星&#xff0c;激光雷达“诸神混战”&#xff0c;行业疯狂洗牌。 风云激荡中&#xff0c;每个人都在亲身见证历史。 2004年&#xff0c;美国发起DARPA挑战赛&#xff0c;无人车上路&#xff0c;汽车上首次出现激光雷达。 2010年之…

原型工具墨刀的使用

刚开始接触原型工具是大学时候了&#xff0c;大学参加大创的时候第一次接触并使用原型工具做了小程序项目原型。那时候是下载的客户端。 最近&#xff0c;又开始思考在用户沟通过程中为方便沟通&#xff0c;可以先自己用原型工具简单的设计一下先。 首先&#xff1a;网页版好用…

JavaScript流程控制-循环(循环(for 循环,双重 for 循环,while 循环,do while 循环,continue break))

目录 JavaScript流程控制-循环 循环 for 循环 执行过程&#xff1a; 断点调试&#xff1a; 案例一&#xff1a;求1-100之间所有整数的累加和 案例二&#xff1a;求1-100之间所有数的平均值 案例三&#xff1a;求1-100之间所有偶数和奇数的和 案例四&#xff1a;求1-10…

哈希(Hash) - 开散列/闭散列

文章目录&#xff1a;认识哈希哈希函数处理冲突的方法闭散列&#xff08;开放定址法&#xff09;开散列&#xff08;链地址法&#xff09;哈希表闭散列实现闭散列基本框架哈希表闭散列插入&#xff08;insert&#xff09;哈希表闭散列删除&#xff08;erase&#xff09;哈希表闭…

深度学习模型部署全流程-模型部署

往期回顾&#xff1a;模型训练 文章目录前言模型部署全流程1.推理框架2.onnx模型3.模型转换4.代码实现5.完整代码小结前言 在上一篇文章中详细讲述了模型训练的流程&#xff0c;这篇文章主要介绍模型部署的流程。模型部署通常指通过C/C语言能够把python框架训练好的模型跑起来…

【ROS】机械人开发一--树莓派安装ubuntu18.04

前言&#xff1a;安装了一天的树莓派系统&#xff0c;遇到了很多坑&#xff0c;这里将教程详细分享一下&#xff0c;方便大家快速的安装系统。 目录一、操作环境硬件软件二、资源下载链接三、具体步骤烧入修改镜像文件问题修改重启时间PC端使用xshell远程连接修改软件源安装ubu…

嵌入式软件调试(Debug)方法

嵌入式软件调试&#xff08;Debug&#xff09;方法1 问题定位和分析方法1.1 二分定位法1.2 数据流方法1.3 隔离法1.4 汇编法1.5 ABA法1.6 版本回溯确认法1.7 调试IO法2 调试注意事项3 典型问题类型1 问题定位和分析方法 1.1 二分定位法 方法阐述&#xff1a; 在任务中或者可能…

Redis介绍与下载

初识Redis Redis介绍 由Salvatore Sanfilippo写的key-value存储系统&#xff0c;是跨平台的非关系型数据库 Redis通常被称之为数据结构服务器&#xff0c;因为值(value)可以是字符串、哈希、列表、集合和有序集合等类型 Redis是完全开源的遵守BSD协议&#xff0c;是一个高性能的…

看着别人月入过万,30岁想转入做软件测试,有什么难度?

我见过很多30岁转行软件测试成功的&#xff0c;也见过软件测试转行失败的。 说实话&#xff0c;30岁转行需要付出比一般人更加多的努力。 并且每一步的路都不能走偏。 30岁了&#xff0c;转行肯定不像才毕业的小年轻那么容易&#xff0c;毕竟你转行要跟社会上已经从事过几年的…