OpenAI_Whisper
OpenAI Whisper论文笔记
OpenAI 收集了 68 万小时的有标签的语音数据,通过多任务、多语言的方式训练了一个 seq2seq (语音到文本)的 Transformer 模型,自动语音识别(ASR)能力达到商用水准。本文为李沐老师论文精读的学习笔记。本文的模型权重,推理代码及 API 均以开源,相关博客也介绍了一些有趣的例子。
在互联网上,可获取的带标注的语音数据有很多,如电影及其字幕,歌曲及其歌词等。语音数据似乎很容易通过爬虫收集。但是,目前并没有(公开的)大规模语音数据集。这是因为这些带标注的语音数据的版权问题很难处理。即使某些公司通过收集这些数据训练了大语音模型,也不会声明自己的数据是爬去自存在版权问题的作品,更不会将数据公开。在 Whisper 文章中,同样没有详细说明数据来源,只是介绍了数据清洗和筛选的方法。
本文标题为 Robust Speech Recognition via Large-Scale Weak Supervision ,其中 Large-Scale 是 OpenAI 的 “传统艺能”,也是最近学术界的一个火热方向。即“大力出奇迹”,大模型、大数据的训练。Weak Supervision 是指本文所用数据虽然是有标注的,但并不是为了训练模型专门进行的人工标注,所以是质量较低的标注,故称为 “弱监督”。
摘要
在摘要部分,作者指明,本文通过扩大语音识别弱监督数据的规模,达到 68 万小时,并在大规模数据上进行多语言、多任务的训练。得到了一个泛化性能很好的模型。该模型在常见语音识别数据集上,不需要微调,直接以 zero-shot 的方式进行测试,结果与在这些数据集上训练过的语音识别模型性能相当。
导言
最近的语音识别方面的进展是使用无标签的数据进行自监督预训练。如 Wav2Vec,收集了大量无标签的语音数据,通过对比学习的方式预训练语音编码器。
在编码器预训练完成之后,再在标准的语音识别数据集上微调,得到的结果优于只在语音识别训练集训练的模型。自监督预训练使用到的无标签语音数据规模最多已经达到 100 万小时。
考虑在 NLP 领域常见的两类预训练方式:BERT,Transformer 编码器类 和 GPT,Transformer 解码器类。BERT 中,预测掩码掉的单词和预测下一个句子是为了训练编码器理解自然语言而构造的预训练任务,它们不是现实中真正要用的 NLP 任务。因此,BERT 类预训练方法需要在对应下游任务上进行微调。GPT 类的预训练任务标准的语言模型,预测句子的下一个单词。这种方式可以通过构造 prompt,实现 zero-shot 测试,无需微调。然而,在语音识别领域,这种方式预测的是下一帧音频,而非语音识别结果,故而也必须微调一个解码器。总之,在语音识别领域,如果没有 文本标签,很难实现无需微调的预训练。(Wav2Vec-U 在无监督语音识别训练方面取得了一些相关进展,不需要微调。)
在语音识别领域,自监督预训练的方式可以训练一个不错的编码器,但是预训练阶段没有标签,无法训练解码器。因此在实际用于语音识别之前,还需要在有标签数据上进行微调,比较麻烦,并且容易造成过拟合。一个理想的语音识别系统,应当不需要根据不同的场景进行微调,即应该实现开箱即用。
既然需要有标签数据,那么在语音识别人工标注数据集上训练,不就能训练出无需微调的语音识别系统了吗?遗憾的是,目前人工标注的语音识别数据集规模都比较小,七个数据集加起来也只有 5000 小时左右。一个自然的思路是,在数据的质量和数量之间进行权衡。既然高质量的人工标注成本较高,得到的数据集规模较小,那么是否可以放宽对标注质量的要求,使用电影-字幕,歌曲-歌词等自然带标注的语音识别数据,从而扩大数据规模呢?本文的思路就是这样。
本文收集了 68 万小时的语音识别数据,除了数据的规模大幅上升之外,数据的多样性也更加丰富。在这 68 万小时的语音数据中,有 11.7 万小时涵盖了除英语外的其他 96 中语言,有 12.5 万小时是其他语言到英语的翻译数据。
方法
数据处理
数据部分是本文最核心的贡献。由于数据够多,模型够强,本文模型直接预测原始文本,而不经过任何标准化(standardization )。从而模型的输出就是最终识别结果,而无需经过反向的文本归一化(inverse text normalization)后处理。所谓文本归一化包括如将所有单词变小写,所有简写展开,所有标点去掉等操作,而反向文本归一化就是上述操作的反过程。在 Whisper 中,这些操作统统不用,因为数据足够多,可以覆盖所有的情况。
在本文收集的语音数据中,包含了不同环境、不同语言、不同说话人等多样的数据,这有助于训练出文件的语音识别系统。然而,文本标签的多样性对模型的学习是一种阻碍。为了解决这个问题,本文使用了几种自动过滤方法,来提高文本标签的质量。
- 首先,收集自互联网的语音识别数据,很有可能文本标签就是来自现有的语音识别系统的识别结果。之前有研究工作表明,在训练数据中混有机器生成的标签数据会损害模型的性能。为此,本文根据机器识别结果的一些特点,过滤掉了这些数据。
- 另外,本文对数据中语音所属语言和文本所属语言进行检测。如果文本是非英语的其他语言,则要求语音也必须是同种语言;如果文本是英语,则语音可以是任何语言(因为本文方法中有一个其他语言到英语的翻译任务)。
- 本文用一个语音识别模型在收集的数据上进行测试,发现在一些错误率极高的数据中,存在音频信息不完整、字幕声音不匹配等低质量数据,这些数据同样会被过滤掉。
另外,可能在收集的数据中含有标准语音识别数据集中的内容,为了避免对测试结果产生影响,这部分数据同样需要去掉。
最后,将音频切分为 30s 的片段,配上对应文本,得到训练数据。