Whisper是由OpenAI创建的开源自动语音识别(ASR)模型,具有极为强大的开箱即用性能。
它经过了680,000小时的标注音频数据训练,其中117,000小时的训练涵盖了除英语以外的96种语言,这意味着它可以在各种应用中发挥出色的表现。
Whisper的基础版本可在由Graphcore(拟未) IPUs提供支持的Paperspace Gradient Notebook[1]中进行推理运行。
我们有充分理由面向特定用例对Whisper进行微调。语音和词汇是复杂的,而且有时会受以下因素影响,存在一些微妙的差异:
  • 不常见的口语语言
  • 地名和方言
  • 特定领域词汇,如科学、医学和法律名词
如何获得微调Whisper所需的音频数据?
一些组织可能拥有大量可用于微调Whisper的专有音频数据。但对于其他人来说,收集用于微调的音频数据并不是一件轻而易举的小事。
幸运的是,有几个开源的语音识别数据集可供使用,涵盖多种语言。其中最大的包括:
  • Common Voice[2]:涵盖100种语言的16,400小时
  • Multilingual LibriSpeech[3]:7种非英语语言的6,000小时
  • LibriSpeech[4]:1,000小时,仅限英语
还有一些较小的数据集涵盖了更多的语言和方言,例如:
  • VoxPopuli[5]:16种语言的1,800小时
  • Fleurs[6]:每种语言12小时,涵盖102种语言
  • OpenSLR[7]上还有着一些独立的数据集
在我们的Paperspace Gradient Notebook中,我们演示了如何使用OpenSLR的加泰罗尼亚语子集[8]进行微调。
如何在Graphcore IPU上微调Whisper
首先,在Paperspace上运行“Whisper Small Fine Tuning” notebook。
https://ipu.dev/xOe9PK
对于下面的每个代码模块,您可以直接在Paperspace上点击运行该模块,根据需要修改代码/参数。我们会在本文末尾解释如何在Paperspace Gradient Notebooks以外的环境中运行该过程。
安装依赖项
加载数据集
Common Voice数据集包含不同语言中演讲者朗读维基百科文本的录音。🤗 Datasets使我们能够轻松下载和准备训练并评估数据集。
首先,请确保您已经在🤗 Hub上接受了使用条款:mozilla-foundation/common_voice_13_0[9]。一旦您接受了条款,您将拥有数据集的全部访问权限,并能够在本地下载数据。
需要注意的列是:
  • audio:原始音频样本
  • sentence:相应的基准转录。
我们将“path”列删除。
由于Whisper是在16kHz采样的音频上进行预训练的,因此我们必须确保Common Voice样本相应地进行下采样。
准备数据集
我们通过从原始音频输入中提取特征并注入标签来准备数据集,这些标签只是经过一些基本处理的转录。
特征提取由🤗Transformers——WhisperFeatureExtractor提供。在运行模型后将生成的标记解码为文本,我们同样需要一个标记器,WhisperTokenizer。这两者都由WhisperProcessor的实例包装。
最后,我们通过使用在微调过程中将被忽略的值进行填充来预处理标签。这个填充是为了确保向模型提供具有静态形状的张量。我们通过以下数据整理器实时进行这个过程。
定义指标
我们将以“错词率”(WER)来评估微调模型的性能。
加载预训练模型
确保设置了适合语言的标记(如果有的话)以用于生成。我们在配置和生成配置上都设置它们,以确保在生成过程中正确使用。
在IPU上进行Whisper的微调
可以使用IPUSeq2SeqTrainer类直接在IPU上微调模型。
IPUConfig对象指定了模型将如何在IPU之间进行流水线处理。
对于微调,我们将编码器放在两个IPU上,将解码器放在两个IPU上。
对于推理,编码器放在一个IPU上,解码器放在另一个IPU上。
最后,我们指定控制训练过程的参数。
然后,我们只需要将所有这些与我们的数据集一起传递给IPUSeq2SeqTrainer类:
为了衡量WER的改进,在微调之前运行一个评估步骤。
剩下的就是对模型进行微调。微调过程的时间应该在6到18分钟之间,具体取决于使用了多少个副本,并且可以达到约10%的最终WER。
在非Paperspace环境中的IPU上进行微调
要在Paperspace Gradient Notebooks以外的IPU硬件上运行Whisper Small微调演示,您需要启用Poplar SDK。
有关如何启用Poplar SDK的详细信息,请参阅入门指南[10]了解面向您系统的相关细节。您还可以参考Jupyter快速入门指南[11],了解如何设置Jupyter,以便在远程IPU机器上运行此Notebook。
结论
在此篇notebook中,我们演示了如何在IPU上对Whisper进行多语言语音识别和转录的微调。
我们在总共四个IPU上使用了一个副本。为了缩短微调时间,需要多个副本,因此需要更多的IPU。在Paperspace上,您可以使用IPU Pod16或Bow Pod16,两者都有16个IPU。如果您需要在更大的平台上运行,请联系Graphcore寻求帮助。
要查看所有可用的notebook,请查看由IPU驱动的Jupyter Notebook[12],以了解IPU在其他任务上的表现。
如需了解更多,请在Graphcore社区频道[13]上与我们联系。
[1]https://www.graphcore.ai/posts/how-to-use-openais-whisper-for-speech-recognition
[2]https://commonvoice.mozilla.org/en/datasets
[3]https://www.openslr.org/94/
[4]https://www.openslr.org/12
[5]https://aclanthology.org/2021.acl-long.80/
[6]https://arxiv.org/abs/2205.12446
[7]https://www.openslr.org/resources.php
[8]https://www.openslr.org/69/
[9]https://huggingface.co/datasets/mozilla-foundation/common_voice_13_0
[10]https://docs.graphcore.ai/en/latest/getting-started.html#getting-started
[11]https://docs.graphcore.ai/projects/jupyter-notebook-quick-start/en/latest/index.html
[12]https://www.graphcore.ai/ipu-jupyter-notebooks
[13]https://www.graphcore.ai/join-community
获取更多Graphcore资讯,阅读深度技术文章,并与其他创新者们一起交流,请至中国官网graphcore.cn,以及关注Graphcore微信、微博和知乎创新社区。
Graphcore中国官网
Graphcore官方微信
Graphcore微博创新社区
Graphcore知乎创新社区
点击阅读原文,查看英文blog。
继续阅读
阅读原文