o
openai/whisper-base.en
模型介绍文件和版本分析
下载使用量0

Whisper

Whisper 是一个用于自动语音识别(ASR)和语音翻译的预训练模型。该模型基于 68 万小时的标注数据训练而成,展现出强大的泛化能力,能够适应多种数据集和领域,无需进行微调即可直接应用。

Whisper 由 OpenAI 的 Alec Radford 等人在论文《通过大规模弱监督实现鲁棒语音识别》(Robust Speech Recognition via Large-Scale Weak Supervision)中提出。原始代码仓库可在此处查看。

免责声明:本模型卡部分内容由 Hugging Face 团队撰写,部分内容复制自原始模型卡。

模型详情

Whisper 是一种基于 Transformer 的编码器-解码器模型,也称为序列到序列模型。它使用大规模弱监督标注的 68 万小时语音数据进行训练。

该模型分为仅英文训练版本和多语言训练版本。仅英文模型专注于语音识别任务,而多语言模型同时接受语音识别和语音翻译训练。在语音识别任务中,模型预测与音频相同语言的文本转录;在语音翻译任务中,模型将音频翻译成不同语言的文本。

Whisper 提供五种不同规模的预训练配置。其中四种较小规模的模型提供仅英文和多语言版本,而最大规模的模型仅支持多语言。所有十个预训练模型均可在 Hugging Face Hub 获取。各模型 checkpoint 的详细信息如下表所示(附 Hub 链接):

规模参数量仅英文版本多语言版本
tiny39 M✓✓
base74 M✓✓
small244 M✓✓
medium769 M✓✓
large1550 Mx✓
large-v21550 Mx✓

使用说明

此检查点为仅限英语模型,意味着它可用于英语语音识别。若需进行多语言语音识别或语音翻译,需使用多语言检查点。

转录音频样本时,该模型需与WhisperProcessor配合使用。

WhisperProcessor的主要功能包括:

  1. 预处理音频输入(将其转换为模型所需的对数梅尔频谱图)
  2. 后处理模型输出(将标记转换为文本)

转录

>>> from transformers import WhisperProcessor, WhisperForConditionalGeneration
>>> from datasets import load_dataset

>>> # load model and processor
>>> processor = WhisperProcessor.from_pretrained("openai/whisper-base.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-base.en")

>>> # load dummy dataset and read audio files
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> sample = ds[0]["audio"]
>>> input_features = processor(sample["array"], sampling_rate=sample["sampling_rate"], return_tensors="pt").input_features 

>>> # generate token ids
>>> predicted_ids = model.generate(input_features)
>>> # decode token ids to text
>>> transcription = processor.batch_decode(predicted_ids, skip_special_tokens=False)
['<|startoftranscript|><|notimestamps|> Mr. Quilter is the apostle of the middle classes, and we are glad to welcome his gospel.<|endoftext|>']

>>> transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)
[' Mr. Quilter is the apostle of the middle classes and we are glad to welcome his gospel.']

通过设置 skip_special_tokens=True 可从转录文本起始位置移除上下文标记符。

评估

以下代码片段展示如何在 LibriSpeech test-clean 数据集上评估 Whisper base.en 模型:

>>> from datasets import load_dataset
>>> from transformers import WhisperForConditionalGeneration, WhisperProcessor
>>> import torch
>>> from evaluate import load

>>> librispeech_test_clean = load_dataset("librispeech_asr", "clean", split="test")

>>> processor = WhisperProcessor.from_pretrained("openai/whisper-base.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-base.en").to("cuda")

>>> def map_to_pred(batch):
>>>     audio = batch["audio"]
>>>     input_features = processor(audio["array"], sampling_rate=audio["sampling_rate"], return_tensors="pt").input_features
>>>     batch["reference"] = processor.tokenizer._normalize(batch['text'])
>>> 
>>>     with torch.no_grad():
>>>         predicted_ids = model.generate(input_features.to("cuda"))[0]
>>>     transcription = processor.decode(predicted_ids)
>>>     batch["prediction"] = processor.tokenizer._normalize(transcription)
>>>     return batch

>>> result = librispeech_test_clean.map(map_to_pred)

>>> wer = load("wer")
>>> print(100 * wer.compute(references=result["reference"], predictions=result["prediction"]))
4.271408904897505

长音频转录

Whisper 模型本身设计用于处理最长 30 秒的音频样本。但通过采用分块算法,可将其用于任意长度音频样本的转录。这一功能通过 Transformers pipeline 方法实现。在实例化管道时设置 chunk_length_s=30 即可启用分块处理。启用分块后,该管道可进行批量推理预测,还可通过传递 return_timestamps=True 参数扩展至序列级时间戳预测功能:

>>> import torch
>>> from transformers import pipeline
>>> from datasets import load_dataset

>>> device = "cuda:0" if torch.cuda.is_available() else "cpu"

>>> pipe = pipeline(
>>>   "automatic-speech-recognition",
>>>   model="openai/whisper-base.en",
>>>   chunk_length_s=30,
>>>   device=device,
>>> )

>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> sample = ds[0]["audio"]

>>> prediction = pipe(sample.copy(), batch_size=8)["text"]
" Mr. Quilter is the apostle of the middle classes, and we are glad to welcome his gospel."

>>> # we can also return timestamps for the predictions
>>> prediction = pipe(sample.copy(), batch_size=8, return_timestamps=True)["chunks"]
[{'text': ' Mr. Quilter is the apostle of the middle classes and we are glad to welcome his gospel.',
  'timestamp': (0.0, 5.44)}]

有关分块算法的更多细节,请参阅博客文章ASR分块处理。

微调

预训练的 Whisper 模型展现出强大的跨数据集和跨领域泛化能力。然而,通过微调可以进一步提升其在特定语言和任务上的预测性能。博客文章使用🤗 Transformers微调Whisper提供了逐步指南,仅需5小时的标注数据即可完成 Whisper 模型的微调。

评估用途

这些模型的主要目标用户是研究当前模型鲁棒性、泛化性、能力、偏见和局限性的AI研究人员。但Whisper同样可作为开发人员的ASR解决方案,尤其适用于英语语音识别。我们认识到,模型一旦发布,既无法限制仅限"目标"用途的使用,也无法围绕研究范畴划定合理界限。

模型主要针对ASR和语音翻译至英语任务进行训练和评估,在约10种语言中展现出强大的ASR效果。它们可能表现出额外能力(特别是在语音活动检测、说话人分类或说话人日志等任务经过微调时),但尚未在这些领域经过严格评估。我们强烈建议用户在部署前,针对特定场景和领域进行充分评估。

需要特别注意的是,我们警告不要使用Whisper模型转录未经当事人同意的录音,或声称将这些模型用于任何形式的主观分类。不建议在高风险领域(如决策场景)使用,因为准确度缺陷可能导致结果出现明显偏差。该模型设计用于转录和翻译语音,将其用于分类任务不仅未经评估且不适用,尤其不适合用于推断人类属性。

训练数据

本系列模型基于从互联网收集的68万小时音频及对应文本转录进行训练。其中65%的数据(即43.8万小时)为英语音频与英文字幕的匹配内容,约18%(即12.6万小时)为非英语音频与英文字幕组合,其余17%(即11.7万小时)为非英语音频及其对应原文转录。这些非英语数据涵盖98种不同语言。

正如配套论文所述,我们发现特定语言的转录性能与模型在该语言训练数据量呈直接正相关。

性能与局限性

研究表明,相较于现有众多自动语音识别系统,本系列模型在口音适应性、背景噪声抗干扰性、专业术语识别以及多语言零样本转译英语方面表现出更强的鲁棒性,其语音识别与翻译准确率接近当前业界最优水平。

然而,由于模型采用弱监督模式基于大规模噪声数据训练,其预测结果可能包含音频输入中实际未提及的文本(即幻觉现象)。我们推测这是因为模型结合了语言通用知识,在尝试预测音频中下一词汇的同时也致力于转录音频本身。

模型在不同语言间表现存在差异,对于资源稀缺型和/或可获取性低的语言(或训练数据较少的语言),其准确率相对较低。针对特定语言的不同口音和方言,模型表现亦不均衡,包括在不同性别、种族、年龄或其他人口统计特征人群中可能出现更高的词错误率。完整评估结果详见本次发布的配套论文。

此外,模型的序列到序列架构易导致生成重复文本,虽然可通过束搜索和温度调度策略在一定程度上缓解该问题,但无法完全消除。论文中针对这些局限性提供了进一步分析。需要注意的是,在资源稀缺和/或可获取性低的语言中,此类重复生成行为和幻觉现象可能更为显著。

更广泛的影响

我们预计 Whisper 模型的转录能力可用于改进无障碍工具。虽然 Whisper 模型无法直接用于实时转录——但其速度与模型规模表明,开发者可基于此构建支持近实时语音识别与翻译的应用程序。基于 Whisper 模型开发的有益应用所具有的实际价值表明,这些模型在性能上的差异可能产生实际的经济影响。

发布 Whisper 同样存在潜在的双重用途风险。尽管我们希望该技术主要被用于有益领域,但让 ASR 技术更易获取可能使更多行为体能够开发高效的监控技术,或扩大现有监控规模——因为其速度与准确性使得大规模音频通信的自动转录和翻译成本变得可承受。此外,这些模型可能具备直接识别特定个体的能力,这进而引发了与双重用途及性能差异相关的安全隐患。实际上,我们认为转录成本并非限制监控项目规模扩大的关键因素。

BibTeX 条目与引用信息

@misc{radford2022whisper,
  doi = {10.48550/ARXIV.2212.04356},
  url = {https://arxiv.org/abs/2212.04356},
  author = {Radford, Alec and Kim, Jong Wook and Xu, Tao and Brockman, Greg and McLeavey, Christine and Sutskever, Ilya},
  title = {Robust Speech Recognition via Large-Scale Weak Supervision},
  publisher = {arXiv},
  year = {2022},
  copyright = {arXiv.org perpetual, non-exclusive license}
}