Transformers 4.37 中文文档(七十六)

2024-06-26 17:28:01 浏览数 (2)

原文:huggingface.co/docs/transformers

MMS

原始文本:huggingface.co/docs/transformers/v4.37.2/en/model_doc/mms

概述

MMS 模型是由 Vineel Pratap、Andros Tjandra、Bowen Shi、Paden Tomasello、Arun Babu、Sayani Kundu、Ali Elkahky、Zhaoheng Ni、Apoorv Vyas、Maryam Fazel-Zarandi、Alexei Baevski、Yossi Adi、Xiaohui Zhang、Wei-Ning Hsu、Alexis Conneau、Michael Auli 在将语音技术扩展到 1000 多种语言中提出的。

论文的摘要如下:

扩大语音技术的语言覆盖范围有可能提高更多人获取信息的机会。然而,当前的语音技术仅限于大约 100 种语言,这只是全球约 7000 种语言中的一小部分。大规模多语言语音(MMS)项目通过 10-40 倍增加了支持的语言数量,具体取决于任务。主要成分是基于公开可用宗教文本的新数据集,并有效地利用自监督学习。我们构建了覆盖 1406 种语言的预训练 wav2vec 2.0 模型,一种单一的支持 1107 种语言的多语言自动语音识别模型,以及相同数量语言的语音合成模型,以及支持 4017 种语言的语言识别模型。实验表明,我们的多语言语音识别模型在 FLEURS 基准测试的 54 种语言上将 Whisper 的词错误率减少了一半以上,同时在训练时仅使用了少量标记数据。

以下是 MMS 项目中开源的不同模型。这些模型和代码最初发布在这里。我们已将它们添加到transformers框架中,使其更易于使用。

自动语音识别(ASR)

ASR 模型的检查点可以在这里找到:mms-1b-fl102,mms-1b-l1107,mms-1b-all。为了获得最佳准确性,请使用mms-1b-all模型。

提示:

  • 所有 ASR 模型都接受一个与语音信号的原始波形对应的浮点数组。原始波形应该使用 Wav2Vec2FeatureExtractor 进行预处理。
  • 这些模型是使用连接主义时间分类(CTC)进行训练的,因此必须使用 Wav2Vec2CTCTokenizer 对模型输出进行解码。
  • 您可以通过 load_adapter()为不同语言加载不同的语言适配器权重。语言适配器仅包含大约 200 万个参数,因此在需要时可以高效地动态加载。
加载

默认情况下,MMS 会加载英语的适配器权重。如果您想加载另一种语言的适配器权重,请确保指定target_lang=<your-chosen-target-lang>以及"ignore_mismatched_sizes=True。必须传递ignore_mismatched_sizes=True关键字,以允许语言模型头根据指定语言的词汇重新调整大小。同样,处理器应该加载相同的目标语言。

代码语言:javascript复制
from transformers import Wav2Vec2ForCTC, AutoProcessor

model_id = "facebook/mms-1b-all"
target_lang = "fra"

processor = AutoProcessor.from_pretrained(model_id, target_lang=target_lang)
model = Wav2Vec2ForCTC.from_pretrained(model_id, target_lang=target_lang, ignore_mismatched_sizes=True)

您可以安全地忽略警告,例如:

代码语言:javascript复制
Some weights of Wav2Vec2ForCTC were not initialized from the model checkpoint at facebook/mms-1b-all and are newly initialized because the shapes did not match:
- lm_head.bias: found shape torch.Size([154]) in the checkpoint and torch.Size([314]) in the model instantiated
- lm_head.weight: found shape torch.Size([154, 1280]) in the checkpoint and torch.Size([314, 1280]) in the model instantiated
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.

如果要使用 ASR 流程,可以按如下方式加载所选的目标语言:

代码语言:javascript复制
from transformers import pipeline

model_id = "facebook/mms-1b-all"
target_lang = "fra"

pipe = pipeline(model=model_id, model_kwargs={"target_lang": "fra", "ignore_mismatched_sizes": True})
推理

接下来,让我们看看如何在调用~PretrainedModel.from_pretrained之后运行 MMS 的推理并更改适配器层。首先,我们使用Datasets加载不同语言的音频数据。

代码语言:javascript复制
from datasets import load_dataset, Audio

# English
stream_data = load_dataset("mozilla-foundation/common_voice_13_0", "en", split="test", streaming=True)
stream_data = stream_data.cast_column("audio", Audio(sampling_rate=16000))
en_sample = next(iter(stream_data))["audio"]["array"]

# French
stream_data = load_dataset("mozilla-foundation/common_voice_13_0", "fr", split="test", streaming=True)
stream_data = stream_data.cast_column("audio", Audio(sampling_rate=16000))
fr_sample = next(iter(stream_data))["audio"]["array"]

接下来,我们加载模型和处理器

代码语言:javascript复制
from transformers import Wav2Vec2ForCTC, AutoProcessor
import torch

model_id = "facebook/mms-1b-all"

processor = AutoProcessor.from_pretrained(model_id)
model = Wav2Vec2ForCTC.from_pretrained(model_id)

现在我们处理音频数据,将处理后的音频数据传递给模型并转录模型输出,就像我们通常为 Wav2Vec2ForCTC 所做的那样。

代码语言:javascript复制
inputs = processor(en_sample, sampling_rate=16_000, return_tensors="pt")

with torch.no_grad():
    outputs = model(**inputs).logits

ids = torch.argmax(outputs, dim=-1)[0]
transcription = processor.decode(ids)
# 'joe keton disapproved of films and buster also had reservations about the media'

现在我们可以将相同的模型保留在内存中,并通过调用方便的 load_adapter()函数为模型和 set_target_lang()为分词器切换语言适配器。我们将目标语言作为输入传递 - "fra"表示法语。

代码语言:javascript复制
processor.tokenizer.set_target_lang("fra")
model.load_adapter("fra")

inputs = processor(fr_sample, sampling_rate=16_000, return_tensors="pt")

with torch.no_grad():
    outputs = model(**inputs).logits

ids = torch.argmax(outputs, dim=-1)[0]
transcription = processor.decode(ids)
# "ce dernier est volé tout au long de l'histoire romaine"

以同样的方式,语言可以切换为所有其他支持的语言。请查看:

代码语言:javascript复制
processor.tokenizer.vocab.keys()

查看所有支持的语言。

为了进一步提高 ASR 模型的性能,可以使用语言模型解码。有关更多详细信息,请参阅此处的文档here。

语音合成(TTS)

MMS-TTS 使用与 VITS 相同的模型架构,该架构在 v4.33 中添加到

0 人点赞