Whisper:Robust Speech Recognition via Large-Scale Weak Supervision

最近有语音识别方言方面的需求,由于之前没有接触到过这个领域,遂深入了解一下Open AI发布的语音识别模型Whisper

概述

Whisper 是用于自动语音识别 (Automatic speech recognition,ASR) 的预训练模型,它由来自于 OpenAI 的 Alec Radford 等人于2022年9月发布。在语音识别领域,以往的模型都是在未标注的音频数据上预训练的,而 Whisper 是在大量的已标注音频转录数据上预训练的。其用于训练的标注音频时长高达68万小时,比Wav2Vec 2.0使用的未标注训练数据 (6 万小时) 还多一个数量级(力大飞砖)。同时,该预训练数据中还含有11.7万小时的多语种数据。因此,Whisper 可以在超过96种语言进行自动语音识别,这其中包含不少数据匮乏的小语种。

这么多的标注数据使得我们可以直接在有监督语音识别任务上预训练Whisper,从标注音频转录数据中直接习得语音到文本的映射。因此,Whisper几乎不需要额外的微调就已经是高性能的 ASR 模型了。同时,在68万小时标注数据训练的加持下, Whisper 模型表现出了强大的泛化到多种数据集和领域的能力。其预训练 checkpoint 表现出了与最先进的ASR系统旗鼓相当的性能。与人类相比,在语音识别和语音翻译领域上,模型的准确性和稳健性接近人类。

数据处理

whisper的通过利用互联网上的网络数据来进行训练,但网络数据存在大量低质量的数据,所以他们开发了几种自动过滤方法来提高转录质量:

  1. 剔除全大写或全小写的转录数据;

  2. 基于数据集VoxLingua107W微调音频语言检测器(audio language detector),若文本转写语言和音频语言不匹配,则剔除;

  3. 模糊去重转写文本,减少训练数据集中的重复量和自动生成的内容;

  4. 将音频文件分成30秒的片段,并与该时间片段内出现的转写子集配对。我们对所有音频进行训练,包括没有语音的片段,并将这些片段用作语音活动检测模型(voice activity detection)的训练数据。

  5. 训练初始模型后,查看不同训练数据源的错误率,优先对高错误率和大数据尺寸的数据源进行手动检查,剔除低数据质量的数据源。这项检查发现了大量仅部分转录或对齐不良/未对齐的转写文本,以及前面方法无法检测到的剩余低质量机器生成的文本。

Whisper

whisper的模型结构如下,可以看到处理结构是一个标准的Transformer Encoder-Decoder结构(熟悉的DNA动了)。

当然仅采用Transformer结构作为模型结构,这样做的原因是作者以证明模型性能的提升只受到监督数据规模的影响。

但模型的Encoder输入部分和原始的Transformer有所不同,具体如下:

  1. 音频需要转换为16kHz采样率的单声道音频,并对音频padding到30s,如果音频超过30s则截断,然后以每25ms的窗口进行提取特征;

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

  2. 将时域音频转换为频域特征,源码里将时域特征通过短时傅里叶变换(STFT) 转为二维的频域特征,其中维度为[batch,201,3000],然后进一步通过梅尔滤波器组缩小特征的维度,为[batch,80,3000],并进行归一化处理;

    使用梅尔滤波器组的好处是在压缩了数据的同时,把声音信号转换成更符合人耳听觉感知特性的频域表示,从而显著提升语音识别、说话人识别、音乐检索等任务的性能

    1. 为了减小计算的开销,编码器输入采用了两个宽度为3的卷积层和GELU激活函数,对输入进一步压缩,然后将正弦位置编码嵌入到输入中,才完成了对语音数据的编码。

同时,模型为了展现多语言的语音识别能力,采用了GPT-2的BPE (Byte Pair Encoding)tokenizer分词器来组成vocab词汇表,具体如下:

  1. 将不同的语言转化为UTF-8编码的字节序列作为分词的基本单元;

  2. 利用BPE算法对UTF-8字节序列进行分词,得到vocab中的token和对应的token_id (词汇中的词大概长得像这样:"ä»Ĭ天çļĦ": 34947);

  3. 在模型的解码器中,文本的格式如下:

    [<|startofprev|>, Prompt,<|startoftranscript|>,<|zh|>,<|transcribe|>,<|notimestamps|>,token_id, <|endoftext|>]

    • <|startofprev|>:先前转录文本标识

    • <|startoftranscript|>:开始标识

    • <|zh|>:目标语言

    • <|transcribe|>:识别任务,融入了多任务:多语种的语音识别,语音翻译,语音语言识别,声音活动检测

    • <|notimestamps|>:数据是否有时间戳

    • token_id:识别的文本,如果没有检测出语音则为<|nospeech|>

    • <|endoftext|>:结束标识

针对长语音的优化策略

通过上文可以知道,whisper在处理超过30s的语音的时候,会截取多余的内容。那这样是不是意味着whisper没有办法处理超过30s的文本呢?

有的,有的,都有的。

作者使用了一种策略,通过连续转录 30 秒的音频片段并根据模型预测的时间戳移动窗口来执行长音频的缓冲转写(滑动窗口)

使用Whisper转写长音频依赖于时间戳的准确预测,以确定模型的30秒音频上下文窗口的移动量,一个窗口中的不准确转写可能会对后续窗口中的转写产生负面影响。

为此,作者开发了一套启发式方法,有助于避免长音频转录的失败案例。

  1. beam decoding: 作者利用Beam Search,在生成序列的过程中保留多个候选项,并根据更全面的得分函数进行选择。这样可以增加生成多样性,减少重复,并提供更多有趣的输出选项):

    1. 当参数temperature=0时,采用beam decoding,选择概率n个tokens;

    2. 当参数temperature>0时,采用greedy decoding,选择概率n个tokens;

    源代码默认n和beam_size都为5。

  2. temperature fallback: temperature从0开始,按0.2间隔逐步增加到1,但只有当生成token的平均对数概率低于-1或生成文本的gzip压缩率高于2.4时, 看作解码失败,会将逐步增加温度

    (可以直观理解为,beam search解码失败就走greedy search,前者搜索空间没有后者大)。

  3. voice activity detection: 若<|nospeech|>的概率>阈值0.6,会跳出temperature调整,则认作silence状态。

  4. previous text conditioning: 当temperature低于0.5时,提供来自先前窗口的生成的转录文本作为上文context prompt,进一步提高了性能(语句会变连贯,但也可能会诱发陷入重复转写的风险),而温度高于0.5,就不提供上文context prompt。

    此外,针对第一个转写窗口,你也能提供initial_prompt,比如“这是一段演讲,里面会提到大数据和ChatGPT是如何结合的”,你可以通过prompt引导提高特定场景和术语下的语音识别表现。

  5. Initial timestamp constraint: 为了避免模型忽略输入中前几个单词,将初始时间戳token限制在0.0到1.0秒之间。

下图是加上这些策略的效果

实验

whisper的模型有多个不同的版本,参数量、支持语言如下:

English Speech Recognized

虽然语音领域在2015年就达到了人类的水平(Deep Speech 2),并且当前的LibriSpeech又将当时SOTA WER下降了73%,但是在不同的场景下,仍然与人类有巨大的差距。

作者推测差距的原因在于测试集混淆了二者的训练方式。机器学习模型在分布内的数据集上进行训练后评估的,而人类是在分布外的泛化表现。而Whisper模型和人类的训练方式相同,都是在广泛多样的音频上训练,在零样本下评估。为了量化Whisper和人类之间的评估差异,作者测试了总体稳健性和有效稳健性,用于衡量分布内与分布外数据集之间预期性能的差异。结果如下图和下表所示:

Multi-lingual Speech Recognition

英文很不错,中文处于中游。而且从下图的线性拟合估计来看,训练数据每增加16倍,WER预计就会减半。

Translation

whisper在语音翻译的表现

未来工作

  • 在高质量监督数据集上微调 Whisper 模型和/或使用强化学习更直接地优化解码性能可能有助于进一步减少与感知相关的错误(例如混淆发音相似的单词,长音频转写时陷入重复循环、无法转录音频片段的第一个或最后几个单词或模型将完全产生幻觉等问题);

  • 有针对性地增加稀有语言的数据量可能会导致平均语音识别性能的大幅提高;

  • 添加辅助训练目标。

参考文献

  1. Radford, A., Kim, J. W., Xu, T., Brockman, G., McLeavey, C., & Sutskever, I. (2023, July). Robust speech recognition via large-scale weak supervision. In International Conference on Machine Learning (pp. 28492-28518). PMLR.

  2. 【语音识别】OpenAI语音力作Whisper - 知乎