OpenAI Whisper 新一代语音技术(更新至v3-turbo)
介绍
更新(20241008):large-v3-turbo 来了,和之前 whisper 类似的模型架构,更少的 decoder 层(32 层减少到 4 层),更多的训练轮数(额外两个 epoch),在识别性能几乎不怎么降低的情况下(比 large-v3 略有小幅下降),实现了更快的识别速度(large-v2 的近 8 倍,接近 tiny 的速度)。
更新(20231107):Whisper-large-v3 也在首次 OpenAI 开发者大会之后,11 月 7 号 release 出来了,效果更加强劲。
Whisper 是 OpenAI 于 2022 年 12 月发布的语音处理系统。虽然论文名字是 Robust Speech Recognition via Large-Scale Weak Supervision,但不只是具有语音识别能力,还具备语音活性检测(VAD)、声纹识别、语音翻译(其他语种语音到英语的翻译)等能力。
Whisper 相关资源:
- Blog:Introducing Whisper
- Paper:Robust Speech Recognition via Large-Scale Weak Supervision
- Model:
- Whisper-Finetune:Whisper-Finetune (GitHub) — 支持 LoRA 和全参数量微调
- Belle-whisper(增强中文识别能力的开源模型系列):
Whisper 是端到端的语音系统,相比于之前的端到端语音识别,其特点主要是:
- 多语种:英语为主,支持 99 种语言,包括中文。
- 多任务:语音识别为主,支持 VAD、语种识别、说话人日志、语音翻译、对齐等。
- 数据量:68 万小时语音数据用于训练,从公开数据集或者网络上获取的多种语言语音数据,远超之前语音识别几百、几千、最多 1 万小时的数据量。
- 鲁棒性:主要还是源于海量的训练数据,并在语音数据上进行了常见的增强操作,例如变速、加噪、谱增强等。
- 多模型:提供了从 tiny 到 large,从小到大的五种规格模型,适合不同场景。

whisper-large-v2
下图是在 Fleurs 数据集上的词错误率 WER(越低越好),可以看到 whisper-large-v2 在中文上的表现中规中矩。

Whisper-large-v3
whisper-large-v3 采用了更多的数据,达到了惊人的 500 万小时(一年 = 8765.81277 小时),其中 100 万小时是弱标签,400 万小时是 v2 生成的。
whisper-large-v3 相比 whisper-large-v2 在各个语言上有 10%-20% 的效果提升。

Whisper-large-v3-turbo
与 whisper-large-v3 类似的模型架构,采用了更少的 decoder 层(32 层减少到 4 层),更多的训练轮数(额外两个 epoch),在识别性能几乎不怎么降低的情况下(比 large-v3 小幅下降),实现了更快的识别速度(large 的近 8 倍,接近 tiny 的速度)。

识别效果对比
本文作者在中文 benchmark 上对比了 whisper-large-v2 和 whisper-large-v3 以及 whisper-large-v3-turbo 的效果(CER(%),字错误率,越小越好):
| Model | aishell_1_test | aishell_2_test | wenetspeech net | wenetspeech meeting | hkust dev |
|---|---|---|---|---|---|
| whisper-large-v2 | 8.818 | 6.183 | 12.343 | 26.413 | 31.917 |
| whisper-large-v3 | 8.085 | 5.475 | 11.72 | 20.15 | 28.597 |
| whisper-large-v3-turbo | 8.639 | 6.014 | 13.507 | 20.313 | 37.324 |
可以看到,whisper-large-v3 在中文上相比 whisper-large-v2 有小幅提升,特别是在难度高、场景复杂的 wenetspeech meeting 上有 23% 的相对提升。whisper-large-v3-turbo 在速度提升约 8 倍的情况下,相比 whisper-large-v3 识别效果只是小幅下降,相比 whisper-large-v2 识别效果整体小幅提升。
模型
模型采用了经典的基于 Transformer 的 Encoder-Decoder 的结构。模型输入的特征是 80 维 Fbank 特征,输出的 label 是文本 ID,在文本 ID 之前是语种 ID、任务类型、时间戳三个特殊标记。

具体工作流程,可以参考下图。图中最下面 “Multitask training format” 展示了 label 的组成逻辑:SOT、Language Tag/No Speech、Transcribe/Translate、text tokens w/o timestamps。

数据
数据来源
数据主要来源于网络,构建 audio 与 text 成对数据。
68 万小时组成比例可以看下图。占比最大的是英文语音识别数据,占比 65%。另外,18% 的数据是 X 到英文的语音翻译数据。17% 是除英文外的其他语言的语音识别数据,这里面汉语占比最高。

数据处理
数据过滤
- 通过启发式方法,去掉其中 ASR 产生的数据。例如,纯大写、纯小写、没有标点等,去掉这类数据。
- 语种是否匹配,语音和文本是否属于同一语种。基于语音语种检测模型来实现。
- 数据去重,转写文本级别的去重。
数据格式化
- 30 秒长度:最长 30 秒长度。所以在使用时,最好不要超过 30 秒,以获得最好的效果。
- 语音、非语音均保留:非语音数据可以用来训练 VAD 任务。
- 重采样至 16KHz:语音数据涉及到采样率问题,实际应用中 8KHz、16KHz 最为常见。Whisper 将所有数据均重采样到 16KHz,不再对不同采样率分别建模,一个模型即可完成,简化复杂度,模型性能也会有一定提升。
进阶话题
模型微调
Hugging Face 有一篇关于 whisper 微调的 blog,可以参考:Fine-Tune Whisper For Multilingual ASR with 🤗 Transformers
本文作者也基于 Whisper-Finetune 增加了全参数量微调的能力:
- 基于 LORA 的模型微调:
finetune.py - 基于全参数量的模型微调:
finetune_all.py
在中文数据上微调之后,一般都会有一定的提升,特别是对应业务数据,提升会更大些。微调之后,通用能力可能有一定的损失。
Belle-whisper-large-v2-zh
本文作者基于中文开源数据(AISHELL1、AISHELL2、WENETSPEECH、HKUST),对 whisper-large-v2 进行了微调,得到中文识别提升的 Belle-whisper-large-v2-zh,在中文 benchmark 上有 30%-70% 的相对提升。
模型已经开源到 Hugging Face,欢迎下载:BELLE-2/Belle-whisper-large-v2-zh


Belle-whisper-large-v3-zh
此外,本文作者基于中文开源数据(AISHELL1、AISHELL2、WENETSPEECH、HKUST),对 whisper-large-v3 进行了微调,得到中文识别提升的 Belle-whisper-large-v3-zh,在中文 benchmark 上有 24%-65% 的相对提升。
模型已经开源到 Hugging Face,欢迎下载:BELLE-2/Belle-whisper-large-v3-zh

Belle-whisper-large-v3-zh-punct
此外,本文作者利用 CT-Transformer 标点模型对中文开源数据(AISHELL1、AISHELL2、WENETSPEECH、HKUST)加标点,基于 Belle-whisper-large-v3-zh 进行了 LoRA 微调,得到标点能力提升的 Belle-whisper-large-v3-zh-punct,在复杂场景下(wenetspeech meeting)上有进一步提升。
模型已经开源到 Hugging Face,欢迎下载:BELLE-2/Belle-whisper-large-v3-zh-punct

Belle-whisper-large-v3-turbo-zh
whisper-large-v3-turbo 只是在识别精度轻微下降的同时,大幅提升了识别速度(7~8 倍提升),有很强的应用价值。本文作者基于中文开源数据(AISHELL1、AISHELL2、WENETSPEECH、HKUST),对 whisper-large-v3-turbo 进行了微调,得到中文识别提升的 Belle-whisper-large-v3-turbo-zh,在中文 benchmark 上有 24%-64% 的相对提升。
模型已经开源到 Hugging Face,欢迎下载:BELLE-2/Belle-whisper-large-v3-turbo-zh

小结
- 基于 whisper-large-v2 增强中文语音识别能力,实现了 30%~70% 的相对提升,提升非常明显。
- 基于 whisper-large-v3 增强中文语音识别能力,实现了 24%~65% 的相对提升,提升非常明显。
- 基于 whisper-large-v3-turbo 增强中文语音识别能力,实现了 24%~64% 的相对提升,提升非常明显,识别速度的大幅提升(7~8 倍)将大幅降低应用成本。
- Belle-whisper-large-v2-zh 和 Belle-whisper-large-v3-zh 整体精度差别不大,但是 Belle-whisper-large-v3 在复杂场景的识别精度有明显提升(wenetspeech meeting 上的 CER 相对提升 60%)。
- Belle-whisper-large-v3-zh-punct 具备标点符号能力,同时在复杂场景下(wenetspeech meeting)达到 SOTA。
模型蒸馏
Hugging Face 推出了蒸馏版的 whisper — distil-whisper,模型大小是原来的 51%,速度是原来的 5-6 倍。
需要注意的是,蒸馏工作主要是针对英文任务做的,所以不支持中文,需要使用中文数据做微调才可以。

本文作者基于中文开源数据(AISHELL1、AISHELL2、WENETSPEECH、HKUST),对 distil-whisper 进行了中文识别能力上的增强,得到具备中文识别能力的 Belle-distilwhisper-large-v2-zh,在中文 benchmark 上有 -3%~35% 的相对提升。
模型已经开源到 Hugging Face,欢迎下载:BELLE-2/Belle-distilwhisper-large-v2-zh


小结
- 原始 distil-whisper-large-v2 由于只在英文数据上对 whisper-large-v2 做蒸馏,不具备中文语音识别能力。
- 基于 distil-whisper-large-v2 做中文语音识别能力的构建,可以实现超过 whisper-large-v2 的效果,同时速度有 5~6 倍的提升。
任务扩展
笔者尝试将 whisper 原来的两个任务(transcribe、translate)扩展到三个任务(transcribe、translate、emotion),增加一个语音情绪识别的任务。经过简单尝试,发现 whisper 不仅可以扩展任务,而且新任务的效果还非常好。后面有机会,单独把相关做法总结下。
能力激发
我们知道 whisper 具备 X-to-English 的语音翻译能力,就是其他语言的语音可以直接转成英文文本。但是我在实际实验中发现(也可以当做一次失误),把英文语音定义为 Chinese 的 transcribe 任务,whisper 竟然可以转写出中文来。这也说明,X-to-Y 的语音翻译能力还是有可能的,也值得去继续探索——一个模型搞定所有的语音翻译,技术上很牛叉,使用价值也很大。
总结
- Whisper 的推出对语音相关研究具有标志性的意义,将原来分散的任务统一起来,并且提升了任务的效果。
- Whisper 将语音任务大一统,同时具备很强的鲁棒性,不用像之前那样需要考虑很多类似场景匹配、噪音、口音等问题。直接使用这样的一个模型、或者只需要简单微调即可具有很好的效果。
- Whisper 将语音研究向前推进了一步,研究者们可以在此基础上研究更复杂、更具有挑战性的课题。