Transformers documentation
UniSpeech
该模型于 2021-01-19 在 HF papers 上发布,并于 2021-10-26 贡献至 Hugging Face Transformers。
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
class transformers.UniSpeechConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevocab_size: int = 32hidden_size: int = 768num_hidden_layers: int = 12num_attention_heads: int = 12intermediate_size: int = 3072hidden_act: str = 'gelu'hidden_dropout: float | int = 0.1activation_dropout: float | int = 0.1attention_dropout: float | int = 0.1feat_proj_dropout: float | int = 0.0feat_quantizer_dropout: float | int = 0.0final_dropout: float | int = 0.1layerdrop: float | int = 0.1initializer_range: float = 0.02layer_norm_eps: float = 1e-05feat_extract_norm: str = 'group'feat_extract_activation: str = 'gelu'conv_dim: list[int] | tuple[int, ...] = (512, 512, 512, 512, 512, 512, 512)conv_stride: list[int] | tuple[int, ...] = (5, 2, 2, 2, 2, 2, 2)conv_kernel: list[int] | tuple[int, ...] = (10, 3, 3, 3, 3, 2, 2)conv_bias: bool = Falsenum_conv_pos_embeddings: int = 128num_conv_pos_embedding_groups: int = 16do_stable_layer_norm: bool = Falseapply_spec_augment: bool = Truemask_time_prob: float | int = 0.05mask_time_length: int = 10mask_time_min_masks: int = 2mask_feature_prob: float | int = 0.0mask_feature_length: int = 10mask_feature_min_masks: int = 0num_codevectors_per_group: int = 320num_codevector_groups: int = 2contrastive_logits_temperature: float = 0.1num_negatives: int = 100codevector_dim: int = 256proj_codevector_dim: int = 256diversity_loss_weight: float = 0.1ctc_loss_reduction: str = 'mean'ctc_zero_infinity: bool = Falseuse_weighted_layer_sum: bool = Falseclassifier_proj_size: int = 256num_ctc_classes: int = 80pad_token_id: int | None = 0bos_token_id: int | None = 1eos_token_id: int | list[int] | None = 2replace_prob: float | int = 0.5 )
参数
- vocab_size (
int,可选,默认为32) — 模型的词汇表大小。定义了input_ids可以表示的不同 token 数量。 - hidden_size (
int,可选,默认为768) — 隐藏表示的维度。 - num_hidden_layers (
int, 可选, 默认为12) — Transformer 解码器中的隐藏层数量。 - num_attention_heads (
int,可选,默认为12) — Transformer 解码器中每个注意力层的注意力头数量。 - intermediate_size (
int,可选,默认为3072) — MLP 表示的维度。 - hidden_act (
str,可选,默认为gelu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、"relu"、"silu"等。 - hidden_dropout (
Union[float, int],可选,默认为0.1) — 嵌入层、编码器和池化层中所有全连接层的 dropout 概率。 - activation_dropout (
Union[float, int],可选,默认为0.1) — 全连接层内部激活值的 dropout 比率。 - attention_dropout (
Union[float, int],可选,默认为0.1) — 注意力概率的 dropout 比率。 - feat_proj_dropout (
float, 可选,默认值为 0.0) — 特征编码器输出的 dropout 概率。 - feat_quantizer_dropout (
float, 可选,默认值为 0.0) — 用于量化器的特征编码器输出的 dropout 概率。 - final_dropout (
float,可选,默认值为 0.1) — UniSpeechForCTC 最终投影层的 dropout 概率。 - layerdrop (
Union[float, int],可选,默认为0.1) — LayerDrop 概率。有关更多详细信息,请参阅 [LayerDrop 论文](参见 https://huggingface.co/papers/1909.11556)。 - initializer_range (
float,可选,默认为0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - layer_norm_eps (
float,可选,默认为1e-05) — 层归一化层所使用的 epsilon 值。 - feat_extract_norm (
str,可选,默认为"group") — 应用于特征编码器中一维卷积层的归一化方式。取值为"group",表示仅对第一个一维卷积层应用组归一化;或取值为"layer",表示对所有的一维卷积层应用层归一化。 - feat_extract_activation (
str, *optional*, defaults to“gelu”) -- The non-linear activation function (function or string) in the 1D convolutional layers of the feature extractor. If string,“gelu”,“relu”,“selu”and“gelu_new”` are supported. - conv_dim (
tuple[int]或list[int],可选,默认为(512, 512, 512, 512, 512, 512, 512)) — 一个整数元组,用于定义特征编码器中每个一维卷积层的输入和输出通道数。conv_dim 的长度决定了一维卷积层的数量。 - 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)) — 一个整数元组,用于定义特征编码器中每个一维卷积层的卷积核大小。conv_kernel 的长度决定了卷积层的数量,并且必须与 conv_dim 的长度一致。 - conv_bias (
bool,可选,默认为False) — 一维卷积层是否包含偏置。 - num_conv_pos_embeddings (
int,可选,默认为 128) — 卷积位置嵌入的数量。定义一维卷积位置嵌入层的核大小。 - num_conv_pos_embedding_groups (
int,可选,默认为 16) — 一维卷积位置嵌入层的组数。 - 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, defaults to 0.05) — Percentage (between 0 and 1) of all feature vectors along the time axis which will be masked. The masking procedure generates ”mask_time_problen(time_axis)/mask_time_length” independent masks over the axis. If reasoning from the probability of each feature vector to be chosen as the start of the vector span to be masked, mask_time_prob should be `prob_vector_startmask_time_length. Note that overlap may decrease the actual percentage of masked vectors. This is only relevant ifapply_spec_augment is True`. - mask_time_length (
int,可选,默认为 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, defaults to 0.0) — Percentage (between 0 and 1) of all feature vectors along the feature axis which will be masked. The masking procedure generates ”mask_feature_problen(feature_axis)/mask_time_length” independent masks over the axis. If reasoning from the probability of each feature vector to be chosen as the start of the vector span to be masked, mask_feature_prob should be `prob_vector_startmask_feature_length. Note that overlap may decrease the actual percentage of masked vectors. This is only relevant ifapply_spec_augment is True`. - mask_feature_length (
int,可选,默认为 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,可选,默认值为 320) — 每个量化码本(组)中的条目数量。 - num_codevector_groups (
int, 可选,默认为 2) — 乘积码向量量化(product codevector quantization)的码向量组数。 - contrastive_logits_temperature (
float,可选,默认值为 0.1) — 对比损失中的温度 kappa。 - num_negatives (
int,可选,默认为 100) — 用于对比损失的负样本数量。 - codevector_dim (
int,可选,默认为 256) — 量化特征向量的维度。 - proj_codevector_dim (
int,可选,默认为 256) — 量化特征和 Transformer 特征最终投影的维度。 - diversity_loss_weight (
int, 可选,默认为 0.1) — 码本多样性损失项的权重。 - ctc_loss_reduction (
str,可选,默认为mean) — 指定应用于torch.nn.CTCLoss输出的归约方式。仅在训练时相关。 - ctc_zero_infinity (
bool,可选,默认为False) — 是否将torch.nn.CTCLoss的无穷大损失及其相关梯度置零。无穷大损失主要出现在输入过短、无法与目标对齐的情况下。仅在训练 UniSpeechForCTC 实例时相关。 - use_weighted_layer_sum (
bool,可选,默认为False) — 是否使用带学习权重的层输出加权平均。仅在使用 UniSpeechForSequenceClassification 实例时相关。 - classifier_proj_size (
int,可选,默认为 256) — 用于分类的 token 平均池化之前投影的维度。 - num_ctc_classes (
int, 可选,默认为 80) — 指定音素级 CTC 损失的类别数(音素 token 和空白 token)。仅在使用 UniSpeechForPreTraining 实例时相关。 - pad_token_id (
int, 可选,默认为0) — 词表中用于填充的 token id。 - bos_token_id (
int,可选,默认为1) — 词汇表中用于表示流起始的 token id。 - eos_token_id (
Union[int, list[int]],可选,默认为2) — 词汇表中用于表示流结束(end-of-stream)的 token id。 - replace_prob (
float,可选,默认为 0.5) — 在预训练过程中,transformer 特征被量化特征替换的概率。
这是用于存储 UniSpeechModel 配置的类。它根据指定的参数实例化 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.configUniSpeech 特定输出
类 transformers.models.unispeech.modeling_unispeech.UniSpeechForPreTrainingOutput
< source >( loss: typing.Optional[torch.Tensor] = Noneprojected_states: typing.Optional[torch.Tensor] = Noneprojected_quantized_states: typing.Optional[torch.Tensor] = Nonecodevector_perplexity: typing.Optional[torch.Tensor] = Nonehidden_states: tuple[torch.Tensor] | None = Noneattentions: tuple[torch.Tensor] | None = None )
参数
- loss (
*optional*, returned when model is in train mode,torch.Tensorof shape(1,)) — Total loss as the sum of the contrastive loss (L_m) and the diversity loss (L_d) as stated in the official paper. - projected_states(形状为
(batch_size, sequence_length, config.proj_codevector_dim)的torch.Tensor)— 模型隐藏状态投影到 config.proj_codevector_dim 后的结果,可用于预测被掩码的投影量化状态。 - projected_quantized_states (
torch.Tensor,形状为(batch_size, sequence_length, config.proj_codevector_dim)) — 量化后的提取特征向量,投影至 config.proj_codevector_dim,表示用于对比损失的阳性目标向量。 - codevector_perplexity (
torch.Tensor,形状为(1,)) — 码向量分布的困惑度,用于衡量码本(codebook)的多样性。 - hidden_states (
tuple[torch.Tensor], 可选, 当output_hidden_states=True被传入或config.output_hidden_states=True) — 元组,包含torch.Tensor(嵌入层输出(如果模型有嵌入层)+ 每层输出的张量,形状为(batch_size, sequence_length, hidden_size).模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。
- attentions (
tuple[torch.Tensor], 可选, 在传入output_attentions=True或config.output_attentions=True) — 的元组torch.Tensor((每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length).注意力权重,即经过注意力 softmax 之后的权重,用于在自注意力头中计算加权平均值。
UniSpeechForPreTrainingOutput 的输出类型,可能包含隐藏状态和注意力。
UniSpeechModel
class transformers.UniSpeechModel
< source >( config: UniSpeechConfig )
参数
- config (UniSpeechConfig) — 模型的配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
输出原始隐藏状态且顶部未添加任何特定头部的裸 Unispeech 模型。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( input_values: typing.Optional[torch.Tensor]attention_mask: typing.Optional[torch.Tensor] = Nonemask_time_indices: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → Wav2Vec2BaseModelOutput or tuple(torch.Tensor)
参数
- input_values (
torch.Tensor,形状为(batch_size, sequence_length),可选) — 输入原始语音波形的浮点值。可以通过将.flac或.wav音频文件加载为list[float]、numpy.ndarray或torch.Tensor类型的数组来获取这些值,例如 使用 torchcodec 库(pip install torchcodec)或 soundfile 库(pip install soundfile)。要将该数组准备为input_values,应使用 AutoProcessor 进行填充并转换为torch.Tensor类型的张量。详情请参见 Wav2Vec2Processor.call()。 - attention_mask (
torch.Tensor形状为(batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自[0, 1]:- 1 表示未被屏蔽的 token,
- 对于被掩码的 token,值为 0。
- mask_time_indices (
torch.BoolTensor,形状为(batch_size, sequence_length),可选) — 用于对比损失中掩码提取特征的索引。在训练模式下,模型学习在 config.proj_codevector_dim 空间中预测被掩码的提取特征。
返回值
Wav2Vec2BaseModelOutput 或 tuple(torch.Tensor)
一个 Wav2Vec2BaseModelOutput 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(UniSpeechConfig)和输入。
UniSpeechModel 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
last_hidden_state(形状为
(batch_size, sequence_length, hidden_size)的torch.Tensor)— 模型最后一层输出的隐藏状态序列。extract_features(形状为
(batch_size, sequence_length, conv_dim[-1])的torch.Tensor)— 模型最后一个卷积层提取的特征向量序列。hidden_states (
tuple(torch.Tensor),可选,在传入output_hidden_states=True或config.output_hidden_states=True时返回) — 一个torch.Tensor元组(包含嵌入层的输出以及每一层的输出),形状为(batch_size, sequence_length, hidden_size)。模型在每一层输出处的隐藏状态,以及初始嵌入输出。
attentions (
tuple(torch.Tensor),可选,当传入output_attentions=True或config.output_attentions=True时返回) — 一个torch.Tensor元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。注意力权重,即经过注意力 softmax 之后的权重,用于在自注意力头中计算加权平均值。
UniSpeechForCTC
class transformers.UniSpeechForCTC
< source >( config: UniSpeechConfigtarget_lang: str | None = None )
参数
- config (UniSpeechConfig) — 模型的配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
- target_lang (
str, 可选) — 适配器权重的语言 ID。适配器权重以 adapter..safetensors 或 adapter. .bin 的格式存储。仅在使用带有适配器的 UniSpeechForCTC 实例时相关。默认使用 ‘eng’。
带有 language modeling 头部的 UniSpeech 模型,用于连接主义时间分类(CTC)。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( input_values: typing.Optional[torch.Tensor]attention_mask: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → CausalLMOutput or tuple(torch.Tensor)
参数
- input_values (
torch.Tensor,形状为(batch_size, sequence_length),可选) — 输入原始语音波形的浮点值。可以通过将.flac或.wav音频文件加载为list[float]、numpy.ndarray或torch.Tensor类型的数组来获取这些值,例如 使用 torchcodec 库(pip install torchcodec)或 soundfile 库(pip install soundfile)。要将该数组准备为input_values,应使用 AutoProcessor 进行填充并转换为torch.Tensor类型的张量。详情请参见 Wav2Vec2Processor.call()。 - attention_mask (
torch.Tensor形状为(batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自[0, 1]:- 1 表示未被屏蔽的 token,
- 对于被掩码的 token,值为 0。
- labels (
torch.LongTensor,形状为(batch_size, target_length),可选) — 用于连接时序分类的标签。请注意,target_length必须小于或等于输出 logits 的序列长度。索引的取值范围为[-100, 0, ..., config.vocab_size - 1]。 所有设置为-100的标签都会被忽略(即被掩码),损失仅针对[0, ..., config.vocab_size - 1]范围内的标签进行计算。
返回值
CausalLMOutput 或 tuple(torch.Tensor)
torch.Tensor 的元组,或 CausalLMOutput(当传入 return_dict=False 或 config.return_dict=False 时),其包含的元素取决于配置(UniSpeechConfig)和输入。
UniSpeechForCTC 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
loss (
torch.Tensor,形状为(1,),可选,当提供labels时返回) — 语言建模损失(用于下一个 token 预测)。logits(形状为
(batch_size, sequence_length, config.vocab_size)的torch.Tensor)— 语言建模头的预测分数(SoftMax 之前每个词汇表 token 的分数)。hidden_states (
tuple(torch.Tensor),可选,当传入output_hidden_states=True或config.output_hidden_states=True时返回) — 一个torch.Tensor元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为(batch_size, sequence_length, hidden_size)。模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。
attentions (
tuple(torch.Tensor),可选,当传入output_attentions=True或config.output_attentions=True时返回) — 一个torch.Tensor元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。注意力权重,即经过注意力 softmax 之后的权重,用于在自注意力头中计算加权平均值。
示例:
>>> from transformers import AutoProcessor, UniSpeechForCTC
>>> from datasets import load_dataset
>>> import torch
>>> dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation")
>>> dataset = dataset.sort("id")
>>> sampling_rate = dataset.features["audio"].sampling_rate
>>> processor = AutoProcessor.from_pretrained("microsoft/unispeech-large-1500h-cv")
>>> model = UniSpeechForCTC.from_pretrained("microsoft/unispeech-large-1500h-cv")
>>> # 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]
...
>>> inputs["labels"] = processor(text=dataset[0]["text"], return_tensors="pt").input_ids
>>> # compute loss
>>> loss = model(**inputs).loss
>>> round(loss.item(), 2)
...UniSpeechForSequenceClassification
class transformers.UniSpeechForSequenceClassification
< source >( config: UniSpeechConfig )
参数
- config (UniSpeechConfig) — 模型的配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
在 UniSpeech 模型顶部添加一个序列分类头(在池化输出上应用一个线性层),用于 SUPERB 关键词检测等任务。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( input_values: typing.Optional[torch.Tensor]attention_mask: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → SequenceClassifierOutput or tuple(torch.Tensor)
参数
- input_values (
torch.Tensor,形状为(batch_size, sequence_length)) — 输入原始语音波形的浮点值。可以通过将.flac或.wav音频文件加载为list[float]、numpy.ndarray或torch.Tensor类型的数组来获取这些值,例如 使用 torchcodec 库(pip install torchcodec)或 soundfile 库(pip install soundfile)。要将该数组准备为input_values,应使用 AutoProcessor 进行填充并转换为torch.Tensor类型的张量。详情请参见UniSpeechProcessor.__call__。 - attention_mask (
torch.Tensor形状为(batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自[0, 1]:- 1 表示未被屏蔽的 token,
- 对于被掩码的 token,值为 0。
- labels (
torch.LongTensor,形状为(batch_size,),可选) — 用于计算序列分类/回归损失的标签。索引应在[0, ..., config.num_labels - 1]范围内。如果config.num_labels == 1,则计算回归损失(均方损失);如果config.num_labels > 1,则计算分类损失(交叉熵)。
返回值
SequenceClassifierOutput 或 tuple(torch.Tensor)
一个 SequenceClassifierOutput 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(UniSpeechConfig)和输入。
UniSpeechForSequenceClassification 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
loss (
torch.Tensor,形状为(1,),可选,当提供labels时返回) — 分类损失(如果 config.num_labels==1,则为回归损失)。logits(形状为
(batch_size, config.num_labels)的torch.Tensor)— 分类(或当 config.num_labels==1 时为回归)得分(SoftMax 之前)。hidden_states (
tuple(torch.Tensor),可选,当传入output_hidden_states=True或config.output_hidden_states=True时返回) — 一个torch.Tensor元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为(batch_size, sequence_length, hidden_size)。模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。
attentions (
tuple(torch.Tensor),可选,当传入output_attentions=True或config.output_attentions=True时返回) — 一个torch.Tensor元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。注意力权重,即经过注意力 softmax 之后的权重,用于在自注意力头中计算加权平均值。
单标签分类示例:
>>> import torch
>>> from transformers import AutoTokenizer, UniSpeechForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("microsoft/unispeech-large-1500h-cv")
>>> model = UniSpeechForSequenceClassification.from_pretrained("microsoft/unispeech-large-1500h-cv")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_class_id = logits.argmax().item()
>>> model.config.id2label[predicted_class_id]
...
>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = UniSpeechForSequenceClassification.from_pretrained("microsoft/unispeech-large-1500h-cv", num_labels=num_labels)
>>> labels = torch.tensor([1])
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
...多标签分类示例:
>>> import torch
>>> from transformers import AutoTokenizer, UniSpeechForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("microsoft/unispeech-large-1500h-cv")
>>> model = UniSpeechForSequenceClassification.from_pretrained("microsoft/unispeech-large-1500h-cv", problem_type="multi_label_classification")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_class_ids = torch.arange(0, logits.shape[-1])[torch.sigmoid(logits).squeeze(dim=0) > 0.5]
>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = UniSpeechForSequenceClassification.from_pretrained(
... "microsoft/unispeech-large-1500h-cv", num_labels=num_labels, problem_type="multi_label_classification"
... )
>>> labels = torch.sum(
... torch.nn.functional.one_hot(predicted_class_ids[None, :].clone(), num_classes=num_labels), dim=1
... ).to(torch.float)
>>> loss = model(**inputs, labels=labels).lossUniSpeechForPreTraining
class transformers.UniSpeechForPreTraining
< source >( config: UniSpeechConfig )
参数
- config (UniSpeechConfig) — 模型的配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
带有向量量化模块和 ctc 损失函数的 UniSpeech 模型,用于预训练。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( input_values: typing.Optional[torch.Tensor]attention_mask: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → UniSpeechForPreTrainingOutput or tuple(torch.Tensor)
参数
- input_values (
torch.Tensor,形状为(batch_size, sequence_length),可选) — 输入原始语音波形的浮点值。可以通过将.flac或.wav音频文件加载为list[float]、numpy.ndarray或torch.Tensor类型的数组来获取这些值,例如 使用 torchcodec 库(pip install torchcodec)或 soundfile 库(pip install soundfile)。要将该数组准备为input_values,应使用 AutoProcessor 进行填充并转换为torch.Tensor类型的张量。详情请参见 Wav2Vec2Processor.call()。 - attention_mask (
torch.Tensor形状为(batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自[0, 1]:- 1 表示未被屏蔽的 token,
- 对于被掩码的 token,值为 0。
返回值
UniSpeechForPreTrainingOutput 或 tuple(torch.Tensor)
一个 UniSpeechForPreTrainingOutput 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(UniSpeechConfig)和输入。
UniSpeechForPreTraining 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
loss (
*optional*, 在模型处于训练模式时返回,形状为(1,)的torch.Tensor) — 如官方 论文所述,对比损失 (L_m) 与多样性损失 (L_d) 之和的总损失。projected_states(形状为
(batch_size, sequence_length, config.proj_codevector_dim)的torch.Tensor)— 模型隐藏状态投影到 config.proj_codevector_dim 后的结果,可用于预测被掩码的投影量化状态。projected_quantized_states(形状为
(batch_size, sequence_length, config.proj_codevector_dim)的torch.Tensor)— 量化提取的特征向量,投影至 config.proj_codevector_dim,表示用于对比损失的阳性目标向量。codevector_perplexity(形状为
(1,)的torch.Tensor)— 码向量分布的困惑度,用于衡量码本(codebook)的多样性。hidden_states (
tuple[torch.Tensor],可选,当传入output_hidden_states=True或config.output_hidden_states=True时返回) — 一个torch.Tensor元组(如果模型具有嵌入层,则包含嵌入层输出的一个张量,以及每个层输出的一个张量),形状为(batch_size, sequence_length, hidden_size)。模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。
attentions (
tuple[torch.Tensor],可选,当传入output_attentions=True或config.output_attentions=True时返回) — 一个torch.Tensor元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。注意力权重,即经过注意力 softmax 之后的权重,用于在自注意力头中计算加权平均值。
示例:
>>> 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