英文

Whisper

Whisper是一个用于自动语音识别(ASR)和语音翻译的预训练模型。通过对680,000小时的标记数据进行训练,Whisper模型展示了很强的泛化能力,无需进行微调即可适应许多数据集和领域。

Whisper是由OpenAI的Alec Radford等人在论文 Robust Speech Recognition via Large-Scale Weak Supervision 中提出的。原始代码存储库可以在 here 中找到。

免责声明:模型卡片的内容部分由Hugging Face团队撰写,并且其中的部分内容从原始模型卡片中复制粘贴。

模型详情

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

模型分为仅使用英语数据训练的模型和多语言数据训练的模型。英语模型训练用于语音识别任务。多语言模型训练用于语音识别和语音翻译任务。对于语音识别,模型预测的是与音频语言相同的转录文本。对于语音翻译,模型预测的是与音频不同的语言的转录文本。

Whisper检查点有五个不同的配置,模型大小也不同。最小的四个模型是仅使用英语数据或多语言数据训练的。最大的检查点只是多语言模型。这十个预训练检查点都可以在 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-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秒的音频样本。但是,通过使用分块算法,可以用它来转录任意长度的音频样本。在实例化管道时,设置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 Chunking

    微调

    预训练的Whisper模型已经展示了很强的泛化能力,可以适应不同的数据集和领域。然而,通过对少量带标签数据进行微调,可以进一步提升它在某些语言和任务上的预测能力。博文 Fine-Tune Whisper with ? Transformers 提供了使用仅有5个小时的标记数据来微调Whisper模型的逐步指南。

    评估使用

    这些模型的主要目标用户是研究人员,他们研究当前模型的健壮性、泛化能力、能力、偏见和约束。然而,Whisper对于开发人员来说,尤其是用于英语语音识别,也可能非常有用作为ASR解决方案。我们认识到,一旦模型发布,就不可能仅限制访问“预期”使用,或者就什么是或不是研究绘制合理的指南。

    模型主要在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 。这种行为和幻觉可能在资源更少和/或更难发现的语言上更为严重。

    更广泛的影响

    我们预计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}
    }