模型:
openai/whisper-small.en
耳语是一个用于自动语音识别(ASR)和语音翻译的预训练模型。耳语模型在经过标注的680k小时数据上进行了训练,展示了在许多数据集和领域中无需进行微调就能很好地泛化的能力。
耳语是由OpenAI的Alec Radford等人在 Robust Speech Recognition via Large-Scale Weak Supervision 论文中提出的。原始的代码存储库可以在 here 找到。
免责声明:本模型卡片的内容部分由Hugging Face团队撰写,部分内容复制粘贴自原模型卡片。
耳语是基于Transformer的编码器-解码器模型,也被称为序列到序列模型。它是在使用大规模弱监督注释的680k小时标注语音数据上进行训练的。
这些模型可以基于仅英语数据或多语言数据进行训练。仅英语模型是在语音识别任务上进行训练的。多语言模型既训练了语音识别,也训练了语音翻译。对于语音识别,模型预测的是与音频相同语言的转录内容。对于语音翻译,模型预测的是与音频语言不同的转录内容。
耳语检查点有五个不同规模的配置。较小的四个配置是在仅英语或多语言数据上进行训练的。最大的检查点仅适用于多语言。所有十个预训练检查点都可以在 Hugging Face Hub 上找到。下表总结了这些检查点,其中包括指向Hub上模型的链接:
Size | Parameters | English-only | Multilingual |
---|---|---|---|
tiny | 39 M | 1237321 | 1238321 |
base | 74 M | 1239321 | 12310321 |
small | 244 M | 12311321 | 12312321 |
medium | 769 M | 12313321 | 12314321 |
large | 1550 M | x | 12315321 |
large-v2 | 1550 M | x | 12316321 |
这个检查点是一个仅英语模型,意味着它可以用于英语语音识别。通过使用多语言检查点,可以进行多语言语音识别或语音翻译。
要转录音频样本,必须同时使用模型和 WhisperProcessor 。
WhisperProcessor用于:
>>> from transformers import WhisperProcessor, WhisperForConditionalGeneration >>> from datasets import load_dataset >>> # load model and processor >>> processor = WhisperProcessor.from_pretrained("openai/whisper-small.en") >>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-small.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来删除转录开头的上下文标记。
以下代码片段展示了如何评估Whisper small.en模型在 LibriSpeech test-clean 上:
>>> 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-small.en") >>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-small.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"])) 3.053161596922323
耳语模型在本质上是设计用于处理长达30秒的音频样本。但是,通过使用分块算法,它可以用于转录任意长度的音频样本。在实例化管道时,可以通过设置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-small.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 Chunking 。
预训练的耳语模型展示了在不同数据集和领域中泛化能力很强。然而,通过对少量标注数据进行微调,可以进一步改进它在某些语言和任务中的预测能力。博客文章 Fine-Tune Whisper with ? Transformers 提供了使用仅包含5小时标注数据进行耳语模型微调的逐步指南。
这些模型的主要目标用户是研究机器智能模型的稳健性、泛化性、能力、偏差和约束的AI研究人员。然而,对于开放模型的使用,不可能限制只“有意”使用它们,或者在什么是研究或不是研究的问题上做出合理的指导。
这些模型主要是在ASR和将语音转录成英语的任务上进行训练和评估的。它们在大约10种语言的ASR结果方面表现出强大的性能。它们可能具有其他能力,特别是如果在特定任务(如语音活动检测、说话人分类或说话人分离)上进行微调,但在这些领域还未进行稳健评估。强烈建议用户在部署之前在特定的上下文和领域中对模型进行严格评估。
特别地,我们不建议使用Whisper模型对未经个人同意的个体录音进行转录,也不建议使用这些模型进行任何主观分类。我们不建议在决策环境等高风险领域使用这些模型,因为准确性缺陷可能导致显著的结果缺陷。这些模型旨在转录和翻译语音,使用模型进行分类不仅没有进行评估,而且也不合适,特别是推断人的属性。
这些模型是在从互联网收集的680,000小时的音频和对应的文本收集的数据上进行训练的。其中65%的数据(即438,000小时)代表了英语音频和匹配的英文文本,大约18%(即126,000小时)代表了非英语音频和英文文本,而最后的17%(即117,000小时)代表了非英语音频和对应的文本。这些非英语数据包括98种不同的语言。
如 the accompanying paper 中所述,我们发现在给定语言中的转录性能与我们在该语言中使用的训练数据量直接相关。
我们的研究表明,与许多现有的ASR系统相比,这些模型在口音、背景噪音、技术语言以及从多种语言到英语的零翻译方面具有改进的鲁棒性;其语音识别和翻译准确性接近最先进水平。
然而,由于这些模型使用大规模噪声数据以弱监督方式进行训练,预测结果可能包含实际上不在音频输入中的文本(即幻觉)。我们假设这是因为,鉴于它们对语言的一般知识,模型在尝试预测音频中的下一个单词的同时也在尝试转录音频本身。
我们的模型在不同语言上的表现不均匀,并且我们观察到在资源匮乏和/或发现度低的语言或不拥有足够训练数据的语言上精度较低。这些模型在特定语言的不同口音和方言上的性能也存在差异,可能包括不同性别、种族、年龄或其他人口统计标准的说话人之间更高的词错误率。我们的完整评估结果在 the paper accompanying this release 中展示。
此外,模型的序列到序列架构使其易于生成重复文本,尽管可以通过使用束搜索和温度调度来在一定程度上减缓这一问题,但并不完美。关于这些限制的进一步分析提供在 the paper 中。这种行为和幻觉可能在资源匮乏和/或发现度较低的语言上更为严重。
我们预计耳语模型的转录能力可能被用于改进辅助工具。虽然耳语模型不能直接用于实时转录,但其速度和大小表明他人可以在其上构建应用程序,以实现准实时的语音识别和翻译。基于耳语模型构建的有益应用程序的真正价值暗示这些模型的性能差异可能具有实际的经济影响。
释放耳语还带来了潜在的双重使用问题。虽然我们希望这项技术主要用于有益目的,但使ASR技术更易于获取可能会使更多参与者能够构建能力强大的监控技术或扩大现有的监控工作,因为速度和准确性使得可以进行大量音频通信的廉价自动转录和翻译。此外,这些模型可能具有识别特定个体的某些能力,而这又带来了双重使用和性能差异相关的安全问题。实际上,我们预计,在扩大监控项目方面,转录成本不是限制因素。
@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} }