M-CTC-T
该模型目前处于维护模式,因此我们不会接受任何更改其代码的新PR。
如果您在运行此模型时遇到任何问题,请重新安装支持此模型的最后一个版本:v4.30.0。
您可以通过运行以下命令来执行此操作:pip install -U transformers==4.30.0
。
概述
M-CTC-T模型由Loren Lugosch、Tatiana Likhomanenko、Gabriel Synnaeve和Ronan Collobert在Pseudo-Labeling For Massively Multilingual Speech Recognition中提出。该模型是一个10亿参数的变压器编码器,具有8065个字符标签的CTC头部和60个语言ID标签的语言识别头部。它在Common Voice(版本6.1,2020年12月发布)和VoxPopuli上进行训练。在Common Voice和VoxPopuli上训练后,模型仅在Common Voice上进行训练。标签是未规范化的字符级转录(标点符号和大写字母未删除)。模型输入为16Khz音频信号的Mel滤波器组特征。
论文的摘要如下:
通过伪标签的半监督学习已成为最先进的单语语音识别系统的重要组成部分。在这项工作中,我们将伪标签扩展到包含60种语言的大规模多语言语音识别。我们提出了一种简单的伪标签方法,即使在低资源语言中也能很好地工作:首先训练一个有监督的多语言模型,然后在目标语言上进行半监督学习的微调,为该语言生成伪标签,最后使用所有语言的伪标签从头开始或通过微调训练一个最终模型。在标记的Common Voice和未标记的VoxPopuli数据集上的实验表明,我们的方法可以为许多语言生成性能更好的模型,并且也能很好地迁移到LibriSpeech。
使用提示
该模型的PyTorch版本仅在torch 1.9及更高版本中可用。
资源
MCTCTConfig
类 transformers.MCTCTConfig
< source >( vocab_size = 8065 hidden_size = 1536 num_hidden_layers = 36 intermediate_size = 6144 num_attention_heads = 4 attention_head_dim = 384 max_position_embeddings = 920 layer_norm_eps = 1e-05 layerdrop = 0.3 hidden_act = 'relu' initializer_range = 0.02 hidden_dropout_prob = 0.3 attention_probs_dropout_prob = 0.3 pad_token_id = 1 bos_token_id = 0 eos_token_id = 2 conv_glu_dim = 1 conv_dropout = 0.3 num_conv_layers = 1 conv_kernel = (7,) conv_stride = (3,) input_feat_per_channel = 80 input_channels = 1 conv_channels = None ctc_loss_reduction = 'sum' ctc_zero_infinity = False **kwargs )
参数
- vocab_size (
int
, 可选, 默认为 8065) — M-CTC-T 模型的词汇表大小。定义了调用 MCTCTModel 时传递的inputs_ids
可以表示的不同标记的数量。 - hidden_size (
int
, optional, 默认为 1536) — 编码器层和池化层的维度。 - num_hidden_layers (
int
, optional, defaults to 36) — Transformer编码器中的隐藏层数量。 - intermediate_size (
int
, optional, 默认为 6144) — Transformer 编码器中“中间”(即前馈)层的维度。 - num_attention_heads (
int
, optional, defaults to 4) — Transformer编码器中每个注意力层的注意力头数。 - attention_head_dim (
int
, optional, 默认为 384) — Transformer 编码器中每个注意力层的每个注意力头的维度。 - max_position_embeddings (
int
, optional, 默认为 920) — 该模型可能使用的最大序列长度(在对数梅尔频谱图提取之后)。 - layer_norm_eps (
float
, optional, defaults to 1e-05) — 层归一化层使用的epsilon值。 - layerdrop (
float
, optional, 默认为 0.3) — 在训练期间丢弃编码器层的概率。原始实现中使用了默认的 0.3 值。 - hidden_act (
str
或function
, 可选, 默认为"relu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu"
、"relu"
、"selu"
和"gelu_new"
。 - initializer_range (
float
, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。 - hidden_dropout_prob (
float
, optional, 默认为 0.3) — 嵌入层、编码器和池化器中所有全连接层的 dropout 概率。 - attention_probs_dropout_prob (
float
, optional, 默认为 0.3) — 注意力概率的丢弃比例。 - pad_token_id (
int
, 可选, 默认为 1) — 填充标记的标记器索引。 - bos_token_id (
int
, optional, defaults to 0) — bos token 的 tokenizer 索引。 - eos_token_id (
int
, 可选, 默认为 2) — eos 标记的分词器索引。 - conv_glu_dim (
int
, 可选, 默认为 1) — 应用 GLU 的Conv1dSubsampler
层输出的维度。尽管原始的 Flashlight 代码使用值为 2,但由于转置差异,这里调整为 1。 - conv_dropout (
int
, optional, defaults to 0.3) — 在训练期间随机丢弃Conv1dSubsampler
层的概率。 - num_conv_layers (
int
, optional, defaults to 1) — 在应用变压器编码器层之前的卷积层数量。 - conv_kernel (
Sequence[int]
, 可选, 默认为(7,)
) — 在变压器层之前应用的1D卷积的核大小。len(conv_kernel)
必须等于num_conv_layers
. - conv_stride (
Sequence[int]
, 可选, 默认为(3,)
) — 在变压器层之前应用的1D卷积的步长。len(conv_stride)
必须等于num_conv_layers
. - input_feat_per_channel (
int
, optional, 默认为 80) — Conv1D 层输入通道的特征维度。 - input_channels (
int
, optional, defaults to 1) — Conv1D层输入的输入通道数。 - conv_channels (
List[int]
, optional) — 中间Conv1D层的通道大小。 - ctc_loss_reduction (
str
, 可选, 默认为"sum"
) — 指定应用于torch.nn.CTCLoss
输出的缩减方式。仅在训练MCTCTForCTC实例时相关。 - ctc_zero_infinity (
bool
, 可选, 默认为False
) — 是否将无限损失和torch.nn.CTCLoss
的相关梯度归零。无限损失主要发生在输入太短无法与目标对齐时。仅在训练MCTCTForCTC实例时相关。
这是用于存储MCTCTModel配置的配置类。它用于根据指定的参数实例化一个M-CTC-T模型,定义模型架构。使用默认值实例化配置将产生与M-CTC-T speechbrain/m-ctc-t-large架构类似的配置。
配置对象继承自PretrainedConfig,可用于控制模型输出。阅读PretrainedConfig的文档以获取更多信息。
示例:
>>> from transformers import MCTCTConfig, MCTCTModel
>>> # Initializing a M-CTC-T mctct-large style configuration
>>> configuration = MCTCTConfig()
>>> # Initializing a model (with random weights) from the mctct-large style configuration
>>> model = MCTCTModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
MCTCTFeatureExtractor
类 transformers.MCTCTFeatureExtractor
< source >( feature_size = 80 sampling_rate = 16000 padding_value = 0.0 hop_length = 10 win_length = 25 win_function = 'hamming_window' frame_signal_scale = 32768.0 preemphasis_coeff = 0.97 mel_floor = 1.0 normalize_means = True normalize_vars = True return_attention_mask = False **kwargs )
参数
- feature_size (
int
, 默认为 80) — 提取的特征的特征维度。这是梅尔频率 - sampling_rate (
int
, 默认为 16000) — 音频文件应被数字化的采样率,以赫兹 (Hz) 表示。 - padding_value (
float
, 默认为 0.0) — 用于填充填充值的值。 - hop_length (
int
, 默认为 10) — 窗口之间的音频样本数。在许多论文中也被称为“shift”。 - win_length (
int
, 默认为 25) — 每个窗口的毫秒数 - win_function (
str
, 默认为"hamming_window"
) — 用于窗口化的窗口函数名称,必须可以通过torch.{win_function}
访问 - frame_signal_scale (
float
, 默认为 32768.0) — 在应用DFT之前创建帧时乘以的常数。 - preemphasis_coeff (
float
, 默认为 0.97) — 在应用 DFT 之前进行预加重时乘以的常数。 - mel_floor (
float
默认为 1.0) — 梅尔频率组的最小值。 - normalize_means (
bool
, optional, defaults toTrue
) — 是否对提取的特征进行零均值归一化。 - normalize_vars (
bool
, 可选, 默认为True
) — 是否对提取的特征进行单位方差归一化。
构建一个M-CTC-T特征提取器。
此特征提取器继承自SequenceFeatureExtractor,其中包含 大部分主要方法。用户应参考此超类以获取有关这些方法的更多信息。此 代码已从Flashlight的C++代码改编而来。有关实现的更多信息,可以参考 这个notebook, 它逐步引导用户了解实现过程。
__call__
< source >( raw_speech: typing.Union[numpy.ndarray, typing.List[float], typing.List[numpy.ndarray], typing.List[typing.List[float]]] padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = False max_length: typing.Optional[int] = None truncation: bool = False pad_to_multiple_of: typing.Optional[int] = None return_attention_mask: typing.Optional[bool] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None sampling_rate: typing.Optional[int] = None **kwargs )
参数
- raw_speech (
torch.Tensor
,np.ndarray
,List[float]
,List[torch.Tensor]
,List[np.ndarray]
,List[List[float]]
) — 需要填充的序列或序列批次。每个序列可以是一个张量、一个numpy数组、一个浮点值列表、一个张量列表、一个numpy数组列表或一个浮点值列表的列表。必须是单声道音频,而不是立体声,即每个时间步长只有一个浮点数。 - padding (
bool
,str
or PaddingStrategy, optional, defaults toFalse
) — Select a strategy to pad the returned sequences (according to the model’s padding side and padding index) among:True
or'longest'
: Pad to the longest sequence in the batch (or no padding if only a single sequence if provided).'max_length'
: Pad to a maximum length specified with the argumentmax_length
or to the maximum acceptable input length for the model if that argument is not provided.False
or'do_not_pad'
(default): No padding (i.e., can output a batch with sequences of different lengths).
- max_length (
int
, optional) — 返回列表的最大长度以及可选的填充长度(见上文)。 - 截断 (
bool
) — 激活截断功能,将超过max_length的输入序列截断至max_length。 - pad_to_multiple_of (
int
, optional) — If set will pad the sequence to a multiple of the provided value.这对于在计算能力
>= 7.5
(Volta)的NVIDIA硬件上启用Tensor Cores特别有用,或者对于TPUs来说,序列长度为128的倍数是有益的。 - return_attention_mask (
bool
, optional) — Whether to return the attention mask. If left to the default, will return the attention mask according to the specific feature_extractor’s default. - return_tensors (
str
或 TensorType, 可选) — 如果设置,将返回张量而不是Python整数列表。可接受的值有:'tf'
: 返回 TensorFlowtf.constant
对象。'pt'
: 返回 PyTorchtorch.Tensor
对象。'np'
: 返回 Numpynp.ndarray
对象。
- sampling_rate (
int
, optional) —raw_speech
输入被采样的采样率。强烈建议在前向调用时传递sampling_rate
以防止静默错误。 - padding_value (
float
, 默认为 0.0) —
用于特征化并为一个或多个序列准备模型的主要方法。它返回输入音频的对数梅尔频谱图,如原始Flashlight MFSC特征提取代码中所实现的那样。
MCTCTProcessor
类 transformers.MCTCTProcessor
< source >( feature_extractor tokenizer )
参数
- feature_extractor (
MCTCTFeatureExtractor
) — 一个 MCTCTFeatureExtractor 的实例。特征提取器是一个必需的输入。 - tokenizer (
AutoTokenizer
) — 一个 AutoTokenizer 的实例。tokenizer 是一个必需的输入。
构建一个MCTCT处理器,它将MCTCT特征提取器和MCTCT分词器封装到一个单一的处理器中。
MCTCTProcessor 提供了 MCTCTFeatureExtractor 和 AutoTokenizer 的所有功能。更多信息请参见 call() 和 decode()。
在正常模式下使用时,此方法会将其所有参数转发给MCTCTFeatureExtractor的
call()并返回其输出。如果在
as_target_processor()
上下文中使用,此方法会将其所有参数转发给AutoTokenizer的
__call__()
。请参考上述两种方法的文档字符串以获取更多信息。
from_pretrained
< source >( pretrained_model_name_or_path: typing.Union[str, os.PathLike] cache_dir: typing.Union[str, os.PathLike, NoneType] = None force_download: bool = False local_files_only: bool = False token: typing.Union[str, bool, NoneType] = None revision: str = 'main' **kwargs )
参数
- pretrained_model_name_or_path (
str
或os.PathLike
) — 这可以是以下之一:- 一个字符串,表示托管在 huggingface.co 上的模型仓库中的预训练特征提取器的 模型 id。
- 一个路径,指向使用 save_pretrained() 方法保存的特征提取器文件的 目录,例如
./my_model_directory/
。 - 一个路径或 URL,指向保存的特征提取器 JSON 文件,例如
./my_model_directory/preprocessor_config.json
。
- **kwargs —
传递给from_pretrained()和
~tokenization_utils_base.PreTrainedTokenizer.from_pretrained
的额外关键字参数.
实例化一个与预训练模型关联的处理器。
这个类方法只是简单地调用了特征提取器
from_pretrained(),图像处理器
ImageProcessingMixin 和分词器
~tokenization_utils_base.PreTrainedTokenizer.from_pretrained
方法。请参考上述方法的文档字符串以获取更多信息。
save_pretrained
< source >( save_directory push_to_hub: bool = False **kwargs )
参数
- save_directory (
str
或os.PathLike
) — 特征提取器 JSON 文件和分词器文件将被保存的目录(如果目录不存在,将会创建)。 - push_to_hub (
bool
, optional, defaults toFalse
) — 是否在保存后将模型推送到 Hugging Face 模型中心。您可以使用repo_id
指定要推送到的仓库(默认为您命名空间中的save_directory
名称)。 - kwargs (
Dict[str, Any]
, 可选) — 传递给 push_to_hub() 方法的额外关键字参数。
保存此处理器(特征提取器、分词器等)的属性到指定目录,以便可以使用from_pretrained()方法重新加载。
这个类方法只是调用了 save_pretrained() 和 save_pretrained()。请参考上述方法的文档字符串以获取更多信息。
此方法将其所有参数转发给AutoTokenizer的batch_decode()。请参考该方法的文档字符串以获取更多信息。
此方法将其所有参数转发给AutoTokenizer的decode()。请参考该方法的文档字符串以获取更多信息。
MCTCTModel
类 transformers.MCTCTModel
< source >( config )
参数
- config (MCTCTConfig) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
裸的M-CTC-T模型变压器输出原始隐藏状态,没有任何特定的头部。 这个模型是PyTorch torch.nn.Module 的一个子类。使用 它作为常规的PyTorch模块,并参考PyTorch文档以获取与一般使用和行为相关的所有事项。
前进
< source >( input_features: Tensor attention_mask: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.BaseModelOutput 或 tuple(torch.FloatTensor)
参数
- input_features (
torch.LongTensor
of shape(batch_size, sequence_length)
) — Indices of input sequence tokens in the vocabulary.可以使用Wav2Vec2CTCTokenizer获取索引。详情请参见PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
- attention_mask (
torch.FloatTensor
of shape(batch_size, sequence_length)
, optional) — Mask to avoid performing attention on padding token indices. Mask values selected in[0, 1]
:- 1 for tokens that are not masked,
- 0 for tokens that are masked.
- head_mask (
torch.FloatTensor
形状为(num_heads,)
或(num_layers, num_heads)
, 可选) — 用于屏蔽自注意力模块中选定的头部的掩码。掩码值在[0, 1]
中选择:- 1 表示头部 未被屏蔽,
- 0 表示头部 被屏蔽.
- output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。
返回
transformers.modeling_outputs.BaseModelOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.BaseModelOutput 或一个由
torch.FloatTensor
组成的元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),包含各种
元素,具体取决于配置(MCTCTConfig)和输入。
-
last_hidden_state (
torch.FloatTensor
形状为(batch_size, sequence_length, hidden_size)
) — 模型最后一层输出的隐藏状态序列。 -
hidden_states (
tuple(torch.FloatTensor)
, 可选, 当传递了output_hidden_states=True
或当config.output_hidden_states=True
时返回) — 由torch.FloatTensor
组成的元组(一个用于嵌入层的输出,如果模型有嵌入层,+ 一个用于每一层的输出)形状为(batch_size, sequence_length, hidden_size)
。模型在每一层输出的隐藏状态加上可选的初始嵌入输出。
-
attentions (
tuple(torch.FloatTensor)
, 可选, 当传递了output_attentions=True
或当config.output_attentions=True
时返回) — 由torch.FloatTensor
组成的元组(每一层一个)形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
MCTCTModel 的 forward 方法,重写了 __call__
特殊方法。
尽管前向传递的配方需要在此函数内定义,但之后应该调用Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoProcessor, MCTCTModel
>>> from datasets import load_dataset
>>> import torch
>>> dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation", trust_remote_code=True)
>>> dataset = dataset.sort("id")
>>> sampling_rate = dataset.features["audio"].sampling_rate
>>> processor = AutoProcessor.from_pretrained("speechbrain/m-ctc-t-large")
>>> model = MCTCTModel.from_pretrained("speechbrain/m-ctc-t-large")
>>> # audio file is decoded on the fly
>>> inputs = processor(dataset[0]["audio"]["array"], sampling_rate=sampling_rate, return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_ids = torch.argmax(logits, dim=-1)
>>> # transcribe speech
>>> transcription = processor.batch_decode(predicted_ids)
>>> transcription[0]
[1, 195, 1536]
>>> inputs["labels"] = processor(text=dataset[0]["text"], return_tensors="pt").input_ids
>>> # compute loss
>>> loss = model(**inputs).loss
MCTCTForCTC
类 transformers.MCTCTForCTC
< source >( config )
参数
- config (MCTCTConfig) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
MCTCT 模型,顶部带有语言建模
头,用于连接时序分类(CTC)。
该模型是 PyTorch torch.nn.Module 的子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取与一般使用和行为相关的所有信息。
前进
< source >( input_features: Tensor attention_mask: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None labels: typing.Optional[torch.LongTensor] = None ) → transformers.modeling_outputs.CausalLMOutput 或 tuple(torch.FloatTensor)
参数
- input_features (
torch.LongTensor
of shape({0})
) — Indices of input sequence tokens in the vocabulary.可以使用Wav2Vec2CTCTokenizer获取索引。详情请参见PreTrainedTokenizer.encode()和 PreTrainedTokenizer.call()。
- attention_mask (
torch.FloatTensor
of shape({0})
, optional) — Mask to avoid performing attention on padding token indices. Mask values selected in[0, 1]
:- 1 for tokens that are not masked,
- 0 for tokens that are masked.
- head_mask (
torch.FloatTensor
形状为(num_heads,)
或(num_layers, num_heads)
, 可选) — 用于屏蔽自注意力模块中选定的头部的掩码。掩码值在[0, 1]
中选择:- 1 表示头部 未被屏蔽,
- 0 表示头部 被屏蔽.
- output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回一个ModelOutput而不是一个普通的元组。 - labels (
torch.LongTensor
of shape(batch_size, target_length)
, optional) — 用于连接时序分类的标签。注意target_length
必须小于或等于输出 logits 的序列长度。索引在[-100, 0, ..., config.vocab_size - 1]
中选择。 所有设置为-100
的标签将被忽略(掩码),损失仅针对[0, ..., config.vocab_size - 1]
中的标签计算。
返回
transformers.modeling_outputs.CausalLMOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.CausalLMOutput 或一个由
torch.FloatTensor
组成的元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),包含各种
元素,具体取决于配置(MCTCTConfig)和输入。
-
loss (
torch.FloatTensor
形状为(1,)
,可选,当提供labels
时返回) — 语言建模损失(用于下一个标记预测)。 -
logits (
torch.FloatTensor
形状为(batch_size, sequence_length, config.vocab_size)
) — 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。 -
hidden_states (
tuple(torch.FloatTensor)
,可选,当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) — 由torch.FloatTensor
组成的元组(一个用于嵌入层的输出,如果模型有嵌入层,+ 一个用于每一层的输出)形状为(batch_size, sequence_length, hidden_size)
。模型在每一层输出处的隐藏状态加上可选的初始嵌入输出。
-
attentions (
tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或当config.output_attentions=True
时返回) — 由torch.FloatTensor
组成的元组(每一层一个)形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
MCTCTForCTC 的前向方法,重写了 __call__
特殊方法。
尽管前向传递的配方需要在此函数内定义,但之后应该调用Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoProcessor, MCTCTForCTC
>>> from datasets import load_dataset
>>> import torch
>>> dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation", trust_remote_code=True)
>>> dataset = dataset.sort("id")
>>> sampling_rate = dataset.features["audio"].sampling_rate
>>> processor = AutoProcessor.from_pretrained("speechbrain/m-ctc-t-large")
>>> model = MCTCTForCTC.from_pretrained("speechbrain/m-ctc-t-large")
>>> # audio file is decoded on the fly
>>> inputs = processor(dataset[0]["audio"]["array"], sampling_rate=sampling_rate, return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_ids = torch.argmax(logits, dim=-1)
>>> # transcribe speech
>>> transcription = processor.batch_decode(predicted_ids)
>>> transcription[0]
"Mr. Quilter is the apostle of the middle classes, and we're glad to welcome his gospel."
>>> inputs["labels"] = processor(text=dataset[0]["text"], return_tensors="pt").input_ids
>>> # compute loss
>>> loss = model(**inputs).loss
>>> round(loss.item(), 2)
1885.65