UniSpeech
概述
UniSpeech模型由Chengyi Wang、Yu Wu、Yao Qian、Kenichi Kumatani、Shujie Liu、Furu Wei、Michael Zeng、Xuedong Huang在UniSpeech: Unified Speech Representation Learning with Labeled and Unlabeled Data中提出。
论文的摘要如下:
在本文中,我们提出了一种名为UniSpeech的统一预训练方法,通过使用未标记和标记的数据来学习语音表示,其中监督的音素CTC学习和音素感知的对比自监督学习以多任务学习的方式进行。所得的表示能够捕捉更多与音素结构相关的信息,并提高跨语言和跨领域的泛化能力。我们在公共的CommonVoice语料库上评估了UniSpeech在跨语言表示学习中的有效性。结果表明,UniSpeech在语音识别方面分别比自监督预训练和监督迁移学习最大减少了13.4%和17.8%的相对音素错误率(在所有测试语言上平均)。UniSpeech的可迁移性也在一个领域转移的语音识别任务上得到了验证,即相对于之前的方法,相对词错误率减少了6%。
该模型由patrickvonplaten贡献。作者的代码可以在这里找到。
使用提示
- UniSpeech 是一个语音模型,它接受与语音信号的原始波形相对应的浮点数组。请使用 Wav2Vec2Processor 进行特征提取。
- UniSpeech模型可以使用连接主义时间分类(CTC)进行微调,因此模型输出必须使用Wav2Vec2CTCTokenizer进行解码。
资源
UniSpeechConfig
类 transformers.UniSpeechConfig
< source >( vocab_size = 32 hidden_size = 768 num_hidden_layers = 12 num_attention_heads = 12 intermediate_size = 3072 hidden_act = 'gelu' hidden_dropout = 0.1 activation_dropout = 0.1 attention_dropout = 0.1 feat_proj_dropout = 0.0 feat_quantizer_dropout = 0.0 final_dropout = 0.1 layerdrop = 0.1 initializer_range = 0.02 layer_norm_eps = 1e-05 feat_extract_norm = 'group' feat_extract_activation = 'gelu' conv_dim = (512, 512, 512, 512, 512, 512, 512) conv_stride = (5, 2, 2, 2, 2, 2, 2) conv_kernel = (10, 3, 3, 3, 3, 2, 2) conv_bias = False num_conv_pos_embeddings = 128 num_conv_pos_embedding_groups = 16 do_stable_layer_norm = False apply_spec_augment = True mask_time_prob = 0.05 mask_time_length = 10 mask_time_min_masks = 2 mask_feature_prob = 0.0 mask_feature_length = 10 mask_feature_min_masks = 0 num_codevectors_per_group = 320 num_codevector_groups = 2 contrastive_logits_temperature = 0.1 num_negatives = 100 codevector_dim = 256 proj_codevector_dim = 256 diversity_loss_weight = 0.1 ctc_loss_reduction = 'mean' ctc_zero_infinity = False use_weighted_layer_sum = False classifier_proj_size = 256 num_ctc_classes = 80 pad_token_id = 0 bos_token_id = 1 eos_token_id = 2 replace_prob = 0.5 **kwargs )
参数
- vocab_size (
int
, optional, 默认为 32) — UniSpeech 模型的词汇表大小。定义了调用 UniSpeechModel 时传递的inputs_ids
可以表示的不同标记的数量。模型的词汇表大小。定义了传递给 UniSpeechModel 的 inputs_ids 可以表示的不同标记的数量。 - hidden_size (
int
, optional, 默认为 768) — 编码器层和池化层的维度。 - num_hidden_layers (
int
, optional, 默认为 12) — Transformer 编码器中的隐藏层数量。 - num_attention_heads (
int
, optional, defaults to 12) — Transformer编码器中每个注意力层的注意力头数。 - intermediate_size (
int
, optional, 默认为 3072) — Transformer 编码器中“中间”(即前馈)层的维度。 - hidden_act (
str
或function
, 可选, 默认为"gelu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu"
,"relu"
,"selu"
和"gelu_new"
. - hidden_dropout (
float
, optional, 默认为 0.1) — 嵌入层、编码器和池化器中所有全连接层的 dropout 概率。 - activation_dropout (
float
, optional, 默认为 0.1) — 全连接层内部激活的丢弃比例。 - attention_dropout (
float
, optional, defaults to 0.1) — 注意力概率的丢弃比率。 - feat_proj_dropout (
float
, optional, 默认为 0.0) — 特征编码器输出的丢弃概率。 - feat_quantizer_dropout (
float
, 可选, 默认为 0.0) — 量化器使用的特征编码器输出的丢弃概率。 - final_dropout (
float
, optional, defaults to 0.1) — UniSpeechForCTC的最终投影层的dropout概率。 - layerdrop (
float
, optional, 默认为 0.1) — LayerDrop 概率。更多详情请参阅 [LayerDrop 论文](见 https://arxiv.org/abs/1909.11556)。 - initializer_range (
float
, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。 - layer_norm_eps (
float
, optional, defaults to 1e-05) — 层归一化层使用的epsilon值。 - feat_extract_norm (
str
, 可选, 默认为"group"
) — 应用于特征编码器中1D卷积层的归一化方法。可以是"group"
用于仅对第一个1D卷积层进行组归一化,或者"layer"
用于对所有1D卷积层进行层归一化。 - feat_extract_activation (
str, *optional*, defaults to
“gelu”) -- 特征提取器的1D卷积层中的非线性激活函数(函数或字符串)。如果是字符串,支持
“gelu”,
“relu”,
“selu”和
“gelu_new”`。 - conv_dim (
Tuple[int]
或List[int]
, 可选, 默认为(512, 512, 512, 512, 512, 512, 512)
) — 一个整数元组,定义了特征编码器中每个1D卷积层的输入和输出通道数。conv_dim 的长度定义了1D卷积层的数量。 - conv_stride (
Tuple[int]
或List[int]
, 可选, 默认为(5, 2, 2, 2, 2, 2, 2)
) — 一个整数元组,定义了特征编码器中每个一维卷积层的步幅。conv_stride 的长度定义了卷积层的数量,并且必须与 conv_dim 的长度匹配。 - conv_kernel (
Tuple[int]
或List[int]
, 可选, 默认为(10, 3, 3, 3, 3, 2, 2)
) — 一个整数元组,定义了特征编码器中每个1D卷积层的卷积核大小。conv_kernel 的长度定义了卷积层的数量,并且必须与 conv_dim 的长度匹配。 - conv_bias (
bool
, optional, defaults toFalse
) — 一维卷积层是否具有偏置。 - num_conv_pos_embeddings (
int
, 可选, 默认为 128) — 卷积位置嵌入的数量。定义了1D卷积位置嵌入层的核大小。 - num_conv_pos_embedding_groups (
int
, optional, defaults to 16) — 1D卷积位置嵌入层的组数。 - do_stable_layer_norm (
bool
, 可选, 默认为False
) — 是否应用Transformer编码器的稳定层归一化架构。do_stable_layer_norm is True
对应于在注意力层之前应用层归一化,而do_stable_layer_norm is False
对应于在注意力层之后应用层归一化。 - apply_spec_augment (
bool
, 可选, 默认为True
) — 是否对特征编码器的输出应用SpecAugment数据增强。有关参考,请参见 SpecAugment: A Simple Data Augmentation Method for Automatic Speech Recognition. - mask_time_prob (
float
, optional, 默认为 0.05) — 沿时间轴的所有特征向量将被掩码的百分比(介于 0 和 1 之间)。掩码过程生成 ”mask_time_problen(time_axis)/mask_time_length” 个独立的掩码。如果从每个特征向量被选为要掩码的向量跨度的起始点的概率来推理,mask_time_prob 应为 `prob_vector_startmask_time_length。请注意,重叠可能会减少实际被掩码的向量的百分比。这仅在
apply_spec_augment 为 True` 时相关。 - mask_time_length (
int
, optional, 默认为 10) — 沿时间轴的向量跨度长度。 - mask_time_min_masks (
int
, 可选, 默认为 2) — 每次沿时间轴生成的mask_feature_length
长度的最小掩码数量,每个时间步长,不考虑mask_feature_prob
。仅在“mask_time_prob*len(time_axis)/mask_time_length < mask_time_min_masks”时相关 - mask_feature_prob (
float
, optional, 默认为 0.0) — 所有特征向量沿特征轴的百分比(介于 0 和 1 之间)将被掩码。掩码过程生成 ”mask_feature_problen(feature_axis)/mask_time_length” 个独立掩码覆盖该轴。如果从每个特征向量被选为要掩码的向量跨度的起始点的概率推理,mask_feature_prob 应为 `prob_vector_startmask_feature_length。请注意,重叠可能会减少实际被掩码的向量的百分比。这仅在
apply_spec_augment 为 True` 时相关。 - mask_feature_length (
int
, optional, defaults to 10) — 沿特征轴的向量跨度长度。 - mask_feature_min_masks (
int
, 可选, 默认为 0) — 每次时间步长生成的长度为mask_feature_length
的最小掩码数量,与mask_feature_prob
无关。仅在 ”mask_feature_prob*len(feature_axis)/mask_feature_length < mask_feature_min_masks” 时相关 - num_codevectors_per_group (
int
, optional, defaults to 320) — 每个量化码本(组)中的条目数。 - num_codevector_groups (
int
, 可选, 默认为 2) — 用于产品码向量量化的码向量组数量。 - contrastive_logits_temperature (
float
, optional, defaults to 0.1) — 对比损失中的温度 kappa. - num_negatives (
int
, optional, defaults to 100) — 对比损失的负样本数量。 - codevector_dim (
int
, optional, defaults to 256) — 量化特征向量的维度。 - proj_codevector_dim (
int
, optional, 默认为 256) — 量化特征和变压器特征的最终投影的维度。 - diversity_loss_weight (
int
, optional, 默认为 0.1) — 代码本多样性损失组件的权重。 - ctc_loss_reduction (
str
, 可选, 默认为"mean"
) — 指定应用于torch.nn.CTCLoss
输出的减少方式。仅在训练UniSpeechForCTC实例时相关。 - ctc_zero_infinity (
bool
, 可选, 默认为False
) — 是否将无限损失和torch.nn.CTCLoss
的相关梯度归零。无限损失主要发生在输入太短无法与目标对齐时。仅在训练UniSpeechForCTC实例时相关。 - use_weighted_layer_sum (
bool
, 可选, 默认为False
) — 是否使用带有学习权重的层输出的加权平均。仅在使用 UniSpeechForSequenceClassification 实例时相关。 - classifier_proj_size (
int
, optional, defaults to 256) — 分类前投影的维度,用于标记的平均池化。 - num_ctc_classes (
int
, 可选, 默认为 80) — 指定用于音素级CTC损失的类别数(音素标记和空白标记)。仅在使用UniSpeechForPreTraining实例时相关。 - pad_token_id (
int
, optional, 默认为 0) — 填充标记的ID. - bos_token_id (
int
, optional, defaults to 1) — “序列开始”标记的id. - eos_token_id (
int
, optional, defaults to 2) — “序列结束”标记的ID。 - replace_prob (
float
, optional, 默认为 0.5) — 在预训练中,transformer 特征被量化特征替换的概率。
这是用于存储UniSpeechModel配置的配置类。它用于根据指定的参数实例化一个UniSpeech模型,定义模型架构。使用默认值实例化配置将产生与UniSpeech microsoft/unispeech-large-1500h-cv架构类似的配置。
配置对象继承自PretrainedConfig,可用于控制模型输出。阅读PretrainedConfig的文档以获取更多信息。
示例:
>>> from transformers import UniSpeechConfig, UniSpeechModel
>>> # Initializing a UniSpeech facebook/unispeech-base-960h style configuration
>>> configuration = UniSpeechConfig()
>>> # Initializing a model (with random weights) from the facebook/unispeech-base-960h style configuration
>>> model = UniSpeechModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
UniSpeech 特定输出
类 transformers.models.unispeech.modeling_unispeech.UniSpeechForPreTrainingOutput
< source >( loss: typing.Optional[torch.FloatTensor] = None projected_states: FloatTensor = None projected_quantized_states: FloatTensor = None codevector_perplexity: FloatTensor = None hidden_states: typing.Optional[typing.Tuple[torch.FloatTensor]] = None attentions: typing.Optional[typing.Tuple[torch.FloatTensor]] = None )
参数
- loss (可选,当模型处于训练模式时返回,
torch.FloatTensor
形状为(1,)
) — 总损失为对比损失(L_m)和多样性损失(L_d)的总和,如官方论文所述。(分类)损失。 - projected_states (
torch.FloatTensor
of shape(batch_size, sequence_length, config.proj_codevector_dim)
) — 模型的隐藏状态投影到config.proj_codevector_dim,可用于预测被遮蔽的投影量化状态。 - projected_quantized_states (
torch.FloatTensor
of shape(batch_size, sequence_length, config.proj_codevector_dim)
) — 量化提取的特征向量投影到config.proj_codevector_dim,表示对比损失的正目标向量。 - hidden_states (
tuple(torch.FloatTensor)
, optional, returned whenoutput_hidden_states=True
is passed or whenconfig.output_hidden_states=True
) — Tuple oftorch.FloatTensor
(one for the output of the embeddings + one for the output of each layer) of shape(batch_size, sequence_length, hidden_size)
.模型在每一层输出处的隐藏状态加上初始嵌入输出。
- attentions (
tuple(torch.FloatTensor)
, optional, returned whenoutput_attentions=True
is passed or whenconfig.output_attentions=True
) — Tuple oftorch.FloatTensor
(one for each layer) of shape(batch_size, num_heads, sequence_length, sequence_length)
.注意力权重在注意力softmax之后,用于计算自注意力头中的加权平均值。
输出类型为 UniSpeechForPreTrainingOutput
,可能包含隐藏状态和注意力。
UniSpeechModel
类 transformers.UniSpeechModel
< source >( config: UniSpeechConfig )
参数
- config (UniSpeechConfig) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
基本的UniSpeech模型转换器,输出原始隐藏状态,没有任何特定的头部。 UniSpeech是由Chengyi Wang, Yu Wu, Yao Qian, Kenichi Kumatani, Shujie Liu, Furu Wei, Michael Zeng, Xuedong Huang在UniSpeech: Unified Speech Representation Learning with Labeled and Unlabeled Data中提出的。
该模型继承自 PreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(如下载或保存等)。
该模型是一个PyTorch torch.nn.Module 子类。将其作为常规的PyTorch模块使用,并参考PyTorch文档以获取与一般使用和行为相关的所有信息。
前进
< source >( input_values: typing.Optional[torch.Tensor] attention_mask: typing.Optional[torch.Tensor] = None mask_time_indices: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.Wav2Vec2BaseModelOutput 或 tuple(torch.FloatTensor)
参数
- input_values (
torch.FloatTensor
of shape(batch_size, sequence_length)
) — 输入原始语音波形的浮点值。可以通过将.flac
或.wav
音频文件加载到List[float]
类型的数组或numpy.ndarray
中来获取这些值,例如通过soundfile库(pip install soundfile
)。要将数组准备为input_values
,应使用AutoProcessor进行填充并转换为torch.FloatTensor
类型的张量。有关详细信息,请参阅Wav2Vec2Processor.call()。 - attention_mask (
torch.LongTensor
of shape(batch_size, sequence_length)
, optional) — Mask to avoid performing convolution and attention on padding token indices. Mask values selected in[0, 1]
:- 1 for tokens that are not masked,
- 0 for tokens that are masked.
attention_mask
只有在相应的处理器具有config.return_attention_mask == True
时才应传递。对于所有处理器具有config.return_attention_mask == False
的模型,attention_mask
应不传递,以避免在进行批量推理时性能下降。对于这些模型,input_values
应简单地用 0 填充并在没有attention_mask
的情况下传递。请注意,这些模型也会根据input_values
是否填充而产生略微不同的结果。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。 - output_hidden_states (
bool
, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。
返回
transformers.modeling_outputs.Wav2Vec2BaseModelOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.Wav2Vec2BaseModelOutput 或一个由
torch.FloatTensor
组成的元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),包含各种
元素,具体取决于配置(UniSpeechConfig)和输入。
-
last_hidden_state (
torch.FloatTensor
形状为(batch_size, sequence_length, hidden_size)
) — 模型最后一层输出的隐藏状态序列。 -
extract_features (
torch.FloatTensor
形状为(batch_size, sequence_length, conv_dim[-1])
) — 模型最后一个卷积层提取的特征向量序列。 -
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 之后,用于计算自注意力头中的加权平均值。
UniSpeechModel 的前向方法,重写了 __call__
特殊方法。
尽管前向传递的配方需要在此函数内定义,但之后应该调用Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoProcessor, UniSpeechModel
>>> import torch
>>> from datasets import load_dataset
>>> 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("patrickvonplaten/unispeech-large-1500h-cv-timit")
>>> model = UniSpeechModel.from_pretrained("patrickvonplaten/unispeech-large-1500h-cv-timit")
>>> # audio file is decoded on the fly
>>> inputs = processor(dataset[0]["audio"]["array"], sampling_rate=sampling_rate, return_tensors="pt")
>>> with torch.no_grad():
... outputs = model(**inputs)
>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 292, 1024]
UniSpeechForCTC
类 transformers.UniSpeechForCTC
< source >( config target_lang: typing.Optional[str] = None )
参数
- config (UniSpeechConfig) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
- target_lang (
str
, optional) — 适配器权重的语言ID。适配器权重以adapter..safetensors或adapter. .bin的格式存储。仅在使用带有适配器的UniSpeechForCTC实例时相关。默认使用‘eng’。
UniSpeech 模型,顶部带有语言建模
头,用于连接时序分类(CTC)。
UniSpeech 是由 Chengyi Wang、Yu Wu、Yao Qian、Kenichi Kumatani、Shujie Liu、Furu Wei、Michael Zeng、Xuedong Huang 在 UniSpeech: Unified Speech Representation Learning with Labeled and Unlabeled Data 中提出的。
该模型继承自 PreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(如下载或保存等)。
该模型是一个PyTorch torch.nn.Module 子类。将其作为常规的PyTorch模块使用,并参考PyTorch文档以获取与一般使用和行为相关的所有信息。
前进
< source >( input_values: typing.Optional[torch.Tensor] attention_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.Tensor] = None ) → transformers.modeling_outputs.CausalLMOutput 或 tuple(torch.FloatTensor)
参数
- input_values (
torch.FloatTensor
of shape(batch_size, sequence_length)
) — 输入原始语音波形的浮点值。可以通过将.flac
或.wav
音频文件加载到List[float]
类型的数组或numpy.ndarray
中来获取值,例如通过soundfile库(pip install soundfile
)。要将数组准备为input_values
,应使用AutoProcessor进行填充并转换为torch.FloatTensor
类型的张量。详情请参见Wav2Vec2Processor.call()。 - attention_mask (
torch.LongTensor
of shape(batch_size, sequence_length)
, optional) — Mask to avoid performing convolution and attention on padding token indices. Mask values selected in[0, 1]
:- 1 for tokens that are not masked,
- 0 for tokens that are masked.
attention_mask
只有在相应的处理器具有config.return_attention_mask == True
时才应传递。对于所有处理器具有config.return_attention_mask == False
的模型,attention_mask
应不传递,以避免在进行批量推理时性能下降。对于这些模型,input_values
应简单地用 0 填充并在没有attention_mask
的情况下传递。请注意,这些模型也会根据input_values
是否填充而产生略微不同的结果。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量中的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回一个ModelOutput而不是一个普通的元组。 - labels (
torch.LongTensor
形状为(batch_size, target_length)
, 可选) — 用于连接主义时间分类的标签。注意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
时),包含各种
元素,具体取决于配置(UniSpeechConfig)和输入。
-
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 后的注意力权重,用于计算自注意力头中的加权平均值。
UniSpeechForCTC 的前向方法,重写了 __call__
特殊方法。
尽管前向传递的配方需要在此函数内定义,但之后应该调用Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoProcessor, UniSpeechForCTC
>>> 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("patrickvonplaten/unispeech-large-1500h-cv-timit")
>>> model = UniSpeechForCTC.from_pretrained("patrickvonplaten/unispeech-large-1500h-cv-timit")
>>> # 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]
'mister quilter is the apposl of the midle classes and weare glad to welcom his gosepl'
>>> inputs["labels"] = processor(text=dataset[0]["text"], return_tensors="pt").input_ids
>>> # compute loss
>>> loss = model(**inputs).loss
>>> round(loss.item(), 2)
17.17
UniSpeechForSequenceClassification
类 transformers.UniSpeechForSequenceClassification
< source >( config )
参数
- config (UniSpeechConfig) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
UniSpeech 模型,顶部带有序列分类头(在池化输出上的线性层),用于诸如 SUPERB 关键词检测等任务。
UniSpeech 是在 UniSpeech: Unified Speech Representation Learning with Labeled and Unlabeled Data 中由 Chengyi Wang, Yu Wu, Yao Qian, Kenichi Kumatani, Shujie Liu, Furu Wei, Michael Zeng, Xuedong Huang 提出的。
该模型继承自 PreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(如下载或保存等)。
该模型是一个PyTorch torch.nn.Module 子类。将其作为常规的PyTorch模块使用,并参考PyTorch文档以获取与一般使用和行为相关的所有信息。
前进
< source >( input_values: typing.Optional[torch.Tensor] attention_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.Tensor] = None ) → transformers.modeling_outputs.SequenceClassifierOutput 或 tuple(torch.FloatTensor)
参数
- input_values (
torch.FloatTensor
of shape(batch_size, sequence_length)
) — Float values of input raw speech waveform. Values can be obtained by loading a.flac
or.wav
audio file into an array of typeList[float]
or anumpy.ndarray
, e.g. via the soundfile library (pip install soundfile
). To prepare the array intoinput_values
, the AutoProcessor should be used for padding and conversion into a tensor of typetorch.FloatTensor
. See Wav2Vec2Processor.call() for details. - attention_mask (
torch.LongTensor
of shape(batch_size, sequence_length)
, optional) — Mask to avoid performing convolution and attention on padding token indices. Mask values selected in[0, 1]
:- 1 for tokens that are not masked,
- 0 for tokens that are masked.
attention_mask
只有在相应的处理器具有config.return_attention_mask == True
时才应传递。对于所有处理器具有config.return_attention_mask == False
的模型,attention_mask
应不传递,以避免在进行批量推理时性能下降。对于这些模型,input_values
应简单地用 0 填充并在没有attention_mask
的情况下传递。请注意,这些模型也会根据input_values
是否填充而产生略微不同的结果。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量中的attentions
。 - output_hidden_states (
bool
, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。 - labels (
torch.LongTensor
of shape(batch_size,)
, optional) — 用于计算序列分类/回归损失的标签。索引应在[0, ..., config.num_labels - 1]
范围内。如果config.num_labels == 1
,则计算回归损失(均方损失),如果config.num_labels > 1
,则计算分类损失(交叉熵)。
返回
transformers.modeling_outputs.SequenceClassifierOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.SequenceClassifierOutput 或一个由
torch.FloatTensor
组成的元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),包含各种
元素,具体取决于配置(UniSpeechConfig)和输入。
-
loss (
torch.FloatTensor
形状为(1,)
,可选,当提供labels
时返回) — 分类(或回归,如果 config.num_labels==1)损失。 -
logits (
torch.FloatTensor
形状为(batch_size, config.num_labels)
) — 分类(或回归,如果 config.num_labels==1)得分(在 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 后的注意力权重,用于计算自注意力头中的加权平均值。
UniSpeechForSequenceClassification 的前向方法,重写了 __call__
特殊方法。
尽管前向传递的配方需要在此函数内定义,但之后应该调用Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoFeatureExtractor, UniSpeechForSequenceClassification
>>> 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
>>> feature_extractor = AutoFeatureExtractor.from_pretrained("patrickvonplaten/unispeech-large-1500h-cv-timit")
>>> model = UniSpeechForSequenceClassification.from_pretrained("patrickvonplaten/unispeech-large-1500h-cv-timit")
>>> # audio file is decoded on the fly
>>> inputs = feature_extractor(dataset[0]["audio"]["array"], sampling_rate=sampling_rate, return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_class_ids = torch.argmax(logits, dim=-1).item()
>>> predicted_label = model.config.id2label[predicted_class_ids]
>>> # compute loss - target_label is e.g. "down"
>>> target_label = model.config.id2label[0]
>>> inputs["labels"] = torch.tensor([model.config.label2id[target_label]])
>>> loss = model(**inputs).loss
UniSpeechForPreTraining
类 transformers.UniSpeechForPreTraining
< source >( config: UniSpeechConfig )
参数
- config (UniSpeechConfig) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
带有向量量化模块和CTC损失的UniSpeech模型用于预训练。 UniSpeech由Chengyi Wang, Yu Wu, Yao Qian, Kenichi Kumatani, Shujie Liu, Furu Wei, Michael Zeng, Xuedong Huang在UniSpeech: Unified Speech Representation Learning with Labeled and Unlabeled Data中提出。
该模型继承自 PreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(如下载或保存等)。
该模型是一个PyTorch torch.nn.Module 子类。将其作为常规的PyTorch模块使用,并参考PyTorch文档以获取与一般使用和行为相关的所有信息。
前进
< source >( input_values: typing.Optional[torch.Tensor] attention_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.models.unispeech.modeling_unispeech.UniSpeechForPreTrainingOutput 或 tuple(torch.FloatTensor)
参数
- input_values (
torch.FloatTensor
of shape(batch_size, sequence_length)
) — 输入原始语音波形的浮点值。可以通过将.flac
或.wav
音频文件加载到List[float]
类型的数组或numpy.ndarray
中来获取值,例如通过soundfile库(pip install soundfile
)。要将数组准备为input_values
,应使用AutoProcessor进行填充并转换为torch.FloatTensor
类型的张量。有关详细信息,请参阅Wav2Vec2Processor.call()。 - attention_mask (
torch.LongTensor
of shape(batch_size, sequence_length)
, optional) — Mask to avoid performing convolution and attention on padding token indices. Mask values selected in[0, 1]
:- 1 for tokens that are not masked,
- 0 for tokens that are masked.
attention_mask
只有在相应的处理器具有config.return_attention_mask == True
时才应传递。对于所有处理器具有config.return_attention_mask == False
的模型,attention_mask
应不传递,以避免在进行批量推理时性能下降。对于这些模型,input_values
应简单地用 0 填充并在没有attention_mask
的情况下传递。请注意,这些模型也会根据input_values
是否填充而产生略微不同的结果。 - output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回一个ModelOutput而不是一个普通的元组。 - mask_time_indices (
torch.BoolTensor
of shape(batch_size, sequence_length)
, optional) — 用于对比损失的特征提取掩码索引。在训练模式下,模型学习在config.proj_codevector_dim空间中预测被掩码的特征提取结果。 - sampled_negative_indices (
torch.BoolTensor
of shape(batch_size, sequence_length, num_negatives)
, optional) — 指示哪些量化目标向量在对比损失中被用作负采样向量的索引。 预训练所需的输入。
返回
transformers.models.unispeech.modeling_unispeech.UniSpeechForPreTrainingOutput 或 tuple(torch.FloatTensor)
一个 transformers.models.unispeech.modeling_unispeech.UniSpeechForPreTrainingOutput 或一个由
torch.FloatTensor
组成的元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),包含各种
元素,具体取决于配置(UniSpeechConfig)和输入。
-
loss (可选,当模型处于训练模式时返回,
torch.FloatTensor
形状为(1,)
) — 总损失,作为对比损失(L_m)和多样性损失(L_d)的总和,如 官方论文 中所述。(分类)损失。 -
projected_states (
torch.FloatTensor
形状为(batch_size, sequence_length, config.proj_codevector_dim)
) — 模型投影到 config.proj_codevector_dim 的隐藏状态,可用于预测被遮蔽的投影量化状态。 -
projected_quantized_states (
torch.FloatTensor
形状为(batch_size, sequence_length, config.proj_codevector_dim)
) — 量化提取的特征向量投影到 config.proj_codevector_dim,表示对比损失的正目标向量。 -
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 之后,用于计算自注意力头中的加权平均值。
UniSpeechForPreTraining 的前向方法,重写了 __call__
特殊方法。
尽管前向传递的配方需要在此函数内定义,但之后应该调用Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> import torch
>>> from transformers import AutoFeatureExtractor, UniSpeechForPreTraining
>>> feature_extractor = AutoFeatureExtractor.from_pretrained("microsoft/unispeech-large-1500h-cv")
>>> model = UniSpeechForPreTraining.from_pretrained("microsoft/unispeech-large-1500h-cv")
>>> # TODO: Add full pretraining example