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 在论文《大规模多语言语音识别的伪标签》中提出,可访问 此处。该模型是一个1亿的参数变换器编码器,拥有覆盖8065个字符标签的CTC头和覆盖60个语言标识符标签的语言识别头。它是在2020年12月发布的 Common Voice(版本6.1)和 VoxPopuli 上进行训练的,并在仅使用 Common Voice 进行训练之后,该模型只有在 Common Voice 上进行训练。标签是无归一化的字符级转录稿(标点和大小写未去除)。模型以16KHz音频信号的梅尔滤波器组特征作为输入。
该论文的摘要如下
通过伪标签的半监督学习已经成为最先进单语言语音识别系统的基础。在这项工作中,我们将伪标签扩展到包含60种语言的巨大多语言语音识别。我们提出了一种简单的伪标签配方,即使在低资源语言中也能很好地工作:训练一个有监督的多语言模型,通过目标语言的半监督学习对它进行微调,为该语言生成伪标签,并使用所有语言的伪标签训练一个最终模型,无论是从头开始还是通过微调。在标记的 Common Voice 和未标记的 VoxPopuli 数据集上的实验表明,我们的配方可以为许多语言产生性能更好的模型,并且也能很好地迁移到 LibriSpeech。
使用提示
此模型的 PyTorch 版本仅在 PyTorch 1.9及以上版本中可用。
资源
MCTCTConfig
类 transformers.MCTCTConfig
< 来源 >( 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
, 可选,默认为1536) — 编码器层和池化层的维度。 - num_hidden_layers (
int
, 可选,默认为36) — Transformer编码器中的隐藏层数量。 - intermediate_size (
int
,可选,默认为6144)—— Transformer编码器中“中间层”(即前馈层)的维度。 - num_attention_heads (
int
,可选,默认为4)—— Transformer编码器中每个注意力层的注意力头数量。 - attention_head_dim (
int
,可选,默认为384)—— Transformer编码器中每个注意力层每个注意力头的维度。 - hidden_act (
字符串
或函数
,可选,默认为"relu"
) — 编码器和解码器中的非线性激活函数(函数或字符串)。如果为字符串,支持"gelu"
、"relu"
、"selu"
和"gelu_new"
。 - initializer_range (
浮点数
,可选,默认为0.02) — 初始化所有权重矩阵的截断正常分布初始化的标准差。 - hidden_dropout_prob (
浮点数
,可选,默认为0.3) — 嵌入层、编码器和解码器中的所有全连接层的dropout概率。 - attention_probs_dropout_prob (
浮点数
,可选,默认为0.3) — 关注概率的dropout比率。 - pad_token_id (
int
,可选,默认为1)—— 填充标记的标记器索引。 - bos_token_id (
int
,可选,默认为0)—— 开始标记的标记器索引。 - eos_token_id (
int
,可选,默认为2)—— 结束标记的标记器索引。 - conv_glu_dim (
int
, 可选,默认为1) — 应用GLU操作的Conv1dSubsampler
层的输出维度。虽然原始的Flashlight代码使用2,但在这里因为转置差异而调整为1。 - conv_dropout (
int
, 可选,默认为0.3) — 训练期间随机丢弃Conv1dSubsampler
层的概率。 - num_conv_layers (
int
, 可选,默认为1) — 应用Transformer编码层之前的卷积层的数量。 - conv_kernel (
Sequence[int]
, 可选,默认为(7,)
) — 应用在变压器层之前的一维卷积的内核大小。len(conv_kernel)
必须等于num_conv_layers
。 - conv_stride (
Sequence[int]
, 可选,默认为(3,)
) — 应用在变压器层之前的一维卷积的步长。len(conv_stride)
必须等于num_conv_layers
。 - input_feat_per_channel (
int
, 可选,默认为80) — Conv1D层的输入通道的特征维度。 - input_channels (
int
, 可选, 默认为 1) — Conv1D 层输入的输入通道数。 - conv_channels (
int 列表
, 可选) — 中间 Conv1D 层的通道大小。 - ctc_loss_reduction (
str
, 可选, 默认为"sum"
) — 为torch.nn.CTCLoss
的输出指定要应用的减少操作。仅在训练 MCTCTForCTC 的实例时相关。 - ctc_zero_infinity (
bool
, 可选, 默认为False
) — 是否将无限损失及其关联的梯度的torch.nn.CTCLoss
置为 0。无限损失主要发生在输入太短而无法与目标对齐的情况下。仅当训练 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
< 源代码 >( 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) — 提取特征的特征维度。这是mel_frequency的数量。 - sampling_rate (
int
, 默认为16000) — 音频文件数字化的采样率,以赫兹(Hz)表示。 - padding_value (
float
,默认为 0.0)— 用于填充填充值的值。 - hop_length (
int
,默认为 10)— 窗口之间的音频样本数。在许多论文中也被称为“偏移量”。 - 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) — mel频率频带的最低值。 - normalize_means (
bool
, 可选,默认为True
) — 是否对提取的特征进行零均值归一化。 - normalize_vars (
bool
, 可选, 默认为True
) — 是否对提取的特征进行单位方差归一化。
构建一个M-CTC-T特征提取器。
此特征提取器继承自 SequenceFeatureExtractor,它包含了许多主要方法。用户应参考这个父类以获取有关这些方法的更多信息。此代码已从Flashlight的C++代码改编而来。有关实现信息,可以参考这个笔记本,它将用户一步步引导到实现过程。
__call__
< source >( raw_speech: 联合 padding: 联合 = False max_length: 可选 = None truncation: bool = False pad_to_multiple_of: 可选 = None return_attention_mask: 可选 = None return_tensors: 联合 = None sampling_rate: 可选 = None **kwargs )
参数
- 截断 (
bool
) — 启用截断功能,将长度大于 max_length 的输入序列截断为 max_length。 - pad_to_multiple_of (
int
, 可选) — 如果设置,将序列填充到给定值的倍数。 这尤其适用于启用NVIDIA硬件上的Tensor Cores,计算能力为>= 7.5
(Volta),或在TPU上,如果序列长度是128的倍数会从中受益。 - return_attention_mask (
bool
, 可选) — 是否返回注意力掩码。如果保留默认值,则将返回特定feature_extractor的默认注意力掩码。 什么是注意力掩码? - 返回tensores而非python整数的列表(
str
或TensorType,可选)。可接受以下值: - 采样率(
int
,可选) —raw_speech
输入的采样率。强烈建议在forward调用时传递sampling_rate
以防止静默错误。 - 填充值(
float
,默认为0.0) —
将序列(单个或多个)特征化和准备好模型的主要方法。返回输入音频的对数-梅尔频谱图,如原始Flashlight MFSC特征提取代码中实现。
MCTCTProcessor
类 transformers.MCTCTProcessor
< source >( feature_extractor tokenizer )
参数
- feature_extractor (
MCTCTFeatureExtractor
) — 一个MCTCTFeatureExtractor的实例。特征提取器是必须输入。
__call__
from_pretrained
< source >( pretrained_model_name_or_path: 联合 cache_dir: 联合 = None force_download: bool = False local_files_only: bool = False token: 联合 = None revision: 字符串 = 'main' **kwargs )
参数
- pretrained_model_name_or_path (
字符串
或os.PathLike
) — 这可以是以下之一:- 一个字符串,一个在huggingface.co模型库内部的预训练特征提取器的模型id。
- 一个指向包含使用save_pretrained()方法保存的特征提取器文件的目录的路径,例如,
./my_model_directory/
。 - 一个指向已保存特征提取器JSON 文件的路径或URL,例如,
./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
< 源代码 >( save_directory push_to_hub: bool = False **kwargs )
参数
- save_directory (
str
或os.PathLike
) — 存储功能提取器 JSON 文件和分词器文件的目录(如果不存在,将创建目录)。 - push_to_hub (
bool
,可选,默认为False
) — 是否在保存模型后将模型推送到 Hugging Face 模型仓库。您可以使用repo_id
指定要推送到的存储库(将在您的命名空间中将默认为save_directory
的名称)。 - kwargs (
Dict[str, Any]
, 可选) — 传递给push_to_hub() 方法的额外关键字参数。
将此处理器(特征提取器、标记器等)的属性保存在指定的目录中,以便可以使用 from_pretrained() 方法重新加载。
此类方法简单地调用 save_pretrained() 和 save_pretrained() 方法。请参阅上述方法的文档字符串以获取更多信息。
batch_decode
< source >该方法将所有参数转发到AutoTokenizer的batch_decode()。请参阅该方法的文档字符串以获取更多信息。
decode
< source >该方法将所有参数转发到AutoTokenizer的decode()。请参阅该方法的文档字符串以获取更多信息。
MCTCTModel
类 transformers.MCTCTModel
< 源代码 >( config )
参数
- config (MCTCTConfig) — 模型配置类,包含所有参数。使用配置文件初始化不会加载与模型关联的权重,只会加载配置。有关加载模型重量的详细信息,请参阅from_pretrained()方法。
未经任何特定头部处理的原始隐藏状态的 bare M-CTC-T 模型 transformer。这是一个 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参阅 PyTorch 文档了解所有与一般用法和行为相关的事项。
forward
< source >( input_features: Tensor attention_mask: Optional = None head_mask: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → transformers.modeling_outputs.BaseModelOutput or tuple(torch.FloatTensor)
参数
- input_features (
torch.LongTensor
of shape(batch_size, sequence_length)
) — 输入序列标记的索引,位于词汇表中。可以通过 Wav2Vec2CTCTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.FloatTensor
形状为(batch_size, sequence_length)
,可选) — 用于避免在填充标记索引上执行注意力的掩码。掩码值在[0, 1]
范围内选择:- 1 代表 未掩码 的标记,
- 0 代表 掩码 的标记。
- 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 (形状为
(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
) — 模型的最后一层输出的隐藏状态序列。 -
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
时返回) — 一个形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
的元组(一个用于每个层)。注意力softmax后的注意力权重,用于在自注意力头中进行加权平均。
MCTCTModel 前向方法重写了 __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
< 来源 >( config )
参数
- config (MCTCTConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只加载配置。检查from_pretrained()方法以加载模型权重。
MCTCT 模型,顶部带有用于关系时序分类 (CTC) 的语言建模头部。这是一个 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档了解所有与通用使用和行为相关的内容。
forward
< 来源 >( input_features: Tensor attention_mask: 可选 = None head_mask: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None labels: 可选 = None ) → transformers.modeling_outputs.CausalLMOutput 或 tuple(torch.FloatTensor)
参数
- input_features (
torch.LongTensor
of shape({0})
) — 输入序列标记在词汇表中的索引。索引可以使用 Wav2Vec2CTCTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call().
- attention_mask (
torch.FloatTensor
形状为({0})
,可选) — 避免在填充标记索引上进行注意力操作的工具。选择的屏蔽值在[0, 1]
之间:- 1 表示 未屏蔽 的标记;
- 0 表示 屏蔽 的标记。
- 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)
, 可选) — 连接时序分类的标签。注意,target_length
必须小于或等于输出对数序列的长度。索引在[-100, 0, ..., config.vocab_size - 1]
中选择。所有设置为-100
的标签都被忽略(掩码),只对[0, ..., config.vocab_size - 1]
中的标签计算损失。
返回
transformers.modeling_outputs.CausalLMOutput或tuple(torch.FloatTensor)
A transformers.modeling_outputs.CausalLMOutput或由torch.FloatTensor
组成的元组(如果传递return_dict=False
或当config.return_dict=False
时),由配置(MCTCTConfig)和输入定义的各个元素组成。
-
loss (
torch.FloatTensor
of shape(1,)
, 可选,当提供labels
时返回) — 语言模型损失(用于预测下一个标记)。 -
logits (形状为
(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
) — 语言建模头部预测分数(每个词汇表标记在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
时返回) — 一个形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
的元组(一个用于每个层)。注意力softmax后的注意力权重,用于在自注意力头中进行加权平均。
MCTCTForCTC 的 forward 方法重写了 __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