Transformers 4.37 中文文档(七十五)(2)https://developer.aliyun.com/article/1564208
EncodecFeatureExtractor
class transformers.EncodecFeatureExtractor
( feature_size: int = 1 sampling_rate: int = 24000 padding_value: float = 0.0 chunk_length_s: float = None overlap: float = None **kwargs )
参数
feature_size
(int
, 可选, 默认为 1) — 提取特征的特征维度。对于单声道使用 1,立体声使用 2。sampling_rate
(int
, 可选, 默认为 24000) — 音频波形应数字化的采样率,以赫兹(Hz)表示。padding_value
(float
, 可选, 默认为 0.0) — 用于填充值的值。chunk_length_s
(float
, 可选) — 如果定义了,则音频将被预处理成长度为chunk_length_s
的块,然后进行编码。overlap
(float
, 可选) — 定义每个块之间的重叠。用于计算chunk_stride
的公式为:int((1.0 - self.overlap) * self.chunk_length)
。
构建一个 EnCodec 特征提取器。
这个特征提取器继承自 SequenceFeatureExtractor,其中包含大部分主要方法。用户应参考这个超类以获取有关这些方法的更多信息。
使用默认值实例化特征提取器将产生类似于facebook/encodec_24khz架构的配置。
__call__
( raw_audio: Union padding: Union = None truncation: Optional = False max_length: Optional = None return_tensors: Union = None sampling_rate: Optional = None )
参数
raw_audio
(np.ndarray
,List[float]
,List[np.ndarray]
,List[List[float]]
) — 要处理的序列或序列批次。每个序列可以是一个 numpy 数组,一个浮点值列表,一个 numpy 数组列表或一个浮点值列表的列表。对于单声道音频(feature_size = 1
),numpy 数组的形状必须为(num_samples,)
,对于立体声音频(feature_size = 2
),形状为(2, num_samples)
。padding
(bool
,str
或 PaddingStrategy,可选,默认为True
) — 选择一种策略来填充返回的序列(根据模型的填充方向和填充索引):
True
或'longest'
:填充到批次中最长的序列(如果只提供单个序列,则不填充)。'max_length'
:填充到指定的最大长度(使用参数max_length
)或模型的最大可接受输入长度(如果未提供该参数)。False
或'do_not_pad'
(默认):无填充(即,可以输出长度不同的序列批次)。
truncation
(bool
,可选,默认为False
) — 激活截断,将长于max_length
的输入序列截断为max_length
。max_length
(int
, 可选) — 返回列表的最大长度,可选填充长度(见上文)。return_tensors
(str
或 TensorType,可选) — 如果设置,将返回张量而不是 Python 整数列表。可接受的值为:
'tf'
:返回 TensorFlowtf.constant
对象。'pt'
:返回 PyTorchtorch.Tensor
对象。'np'
:返回 Numpynp.ndarray
对象。
sampling_rate
(int
,可选) — 对audio
输入进行采样的采样率。强烈建议在前向调用时传递sampling_rate
以防止潜在错误。
对一个或多个序列进行特征化和准备模型的主要方法。
EncodecModel
class transformers.EncodecModel
( config: EncodecConfig )
参数
config
(EncodecConfig) — 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只加载配置。查看 from_pretrained()方法以加载模型权重。
EnCodec 神经音频编解码器模型。该模型继承自 PreTrainedModel。查看超类文档以了解库为所有模型实现的通用方法(如下载或保存、调整输入嵌入、修剪头等)。
该模型还是一个 PyTorch torch.nn.Module子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以了解所有与一般用法和行为相关的事项。
decode
( audio_codes: Tensor audio_scales: Tensor padding_mask: Optional = None return_dict: Optional = None )
参数
audio_codes
(torch.FloatTensor
,形状为(batch_size, nb_chunks, chunk_length)
,可选) — 使用model.encode
计算的离散码嵌入。audio_scales
(torch.Tensor
,形状为(batch_size, nb_chunks)
,可选) — 每个audio_codes
输入的缩放因子。padding_mask
(torch.Tensor
,形状为(batch_size, channels, sequence_length)
) — 用于填充input_values
的填充蒙版。return_dict
(bool
,可选) — 是否返回 ModelOutput 而不是普通元组。
将给定的帧解码为输出音频波形。
请注意,输出可能比输入大一点。在这种情况下,可以裁剪末尾的任何额外步骤。
encode
( input_values: Tensor padding_mask: Tensor = None bandwidth: Optional = None return_dict: Optional = None )
参数
input_values
(torch.Tensor
of shape(batch_size, channels, sequence_length)
) — 输入音频波形的浮点值。padding_mask
(torch.Tensor
of shape(batch_size, channels, sequence_length)
) — 用于填充input_values
的填充掩码。bandwidth
(float
, optional) — 目标带宽。必须是config.target_bandwidths
之一。如果为None
,则使用最小可能的带宽。带宽表示为其千分之一,例如 6kbps 带宽表示为bandwidth == 6.0
将输入音频波形编码为离散代码。
forward
( input_values: Tensor padding_mask: Optional = None bandwidth: Optional = None audio_codes: Optional = None audio_scales: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.models.encodec.modeling_encodec.EncodecOutput or tuple(torch.FloatTensor)
参数
input_values
(torch.FloatTensor
of shape(batch_size, channels, sequence_length)
, optional) — 将原始音频输入转换为 Float 并填充到适当的长度,以便使用长度为 self.chunk_length 的块和config.chunk_stride
的步长进行编码。padding_mask
(torch.BoolTensor
of shape(batch_size, channels, sequence_length)
, optional) — 用于避免在填充标记索引上计算缩放因子的掩码(我们可以避免在这些上计算卷积+)。掩码值选择在[0, 1]
之间:
- 对于未被
masked
的标记为 1, - 对于被
masked
的标记为 0。
- 应始终传递
padding_mask
,除非输入被截断或未填充。这是因为为了有效处理张量,输入音频应该被填充,以便input_length % stride = step
,其中step = chunk_length-stride
。这确保所有块具有相同的形状 bandwidth
(float
, optional) — 目标带宽。必须是config.target_bandwidths
之一。如果为None
,则使用最小可能的带宽。带宽表示为其千分之一,例如 6kbps 带宽表示为bandwidth == 6.0
audio_codes
(torch.FloatTensor
of shape(batch_size, nb_chunks, chunk_length)
, optional) — 使用model.encode
计算的离散代码嵌入。audio_scales
(torch.Tensor
of shape(batch_size, nb_chunks)
, optional) — 每个audio_codes
输入的缩放因子。return_dict
(bool
, optional) — 是否返回 ModelOutput 而不是普通元组。
返回
transformers.models.encodec.modeling_encodec.EncodecOutput
或tuple(torch.FloatTensor)
一个transformers.models.encodec.modeling_encodec.EncodecOutput
或一个torch.FloatTensor
元组(如果传递了return_dict=False
或config.return_dict=False
时)包含根据配置(EncodecConfig)和输入的各种元素。
audio_codes
(torch.FloatTensor
of shape(batch_size, nb_chunks, chunk_length)
, optional) — 使用model.encode
计算的离散代码嵌入。audio_values
(torch.FlaotTensor
of shape(batch_size, sequence_length)
, optional) 解码音频值,使用 Encodec 的解码器部分获得。
EncodecModel 的前向方法,覆盖__call__
特殊方法。
虽然前向传递的步骤需要在此函数内定义,但应该在此之后调用Module
实例,而不是这个,因为前者会负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from datasets import load_dataset >>> from transformers import AutoProcessor, EncodecModel >>> dataset = load_dataset("ashraq/esc50") >>> audio_sample = dataset["train"]["audio"][0]["array"] >>> model_id = "facebook/encodec_24khz" >>> model = EncodecModel.from_pretrained(model_id) >>> processor = AutoProcessor.from_pretrained(model_id) >>> inputs = processor(raw_audio=audio_sample, return_tensors="pt") >>> outputs = model(**inputs) >>> audio_codes = outputs.audio_codes >>> audio_values = outputs.audio_values
Hubert
原文链接:
huggingface.co/docs/transformers/v4.37.2/en/model_doc/hubert
概述
Hubert 是由 Wei-Ning Hsu、Benjamin Bolte、Yao-Hung Hubert Tsai、Kushal Lakhotia、Ruslan Salakhutdinov、Abdelrahman Mohamed 在《HuBERT: Self-Supervised Speech Representation Learning by Masked Prediction of Hidden Units》中提出的。
该论文的摘要如下:
自监督语音表示学习面临三个独特问题的挑战:(1)每个输入话语中有多个声音单元,(2)在预训练阶段没有输入声音单元的词典,(3)声音单元具有可变长度且没有明确的分割。为了解决这三个问题,我们提出了 Hidden-Unit BERT(HuBERT)方法,用于自监督语音表示学习,该方法利用离线聚类步骤为类似 BERT 的预测损失提供对齐的目标标签。我们方法的一个关键组成部分是仅在掩码区域上应用预测损失,这迫使模型在连续输入上学习组合声学和语言模型。HuBERT 主要依赖于无监督聚类步骤的一致性,而不是分配的簇标签的内在质量。从一个简单的 100 个簇的 k-means 教师开始,并使用两次聚类迭代,HuBERT 模型在 Librispeech(960h)和 Libri-light(60,000h)基准测试中的 10min、1h、10h、100h 和 960h 微调子集上要么与 wav2vec 2.0 的最新性能相匹配,要么有所提升。使用 1B 参数模型,HuBERT 在更具挑战性的 dev-other 和 test-other 评估子集上显示出高达 19%和 13%的相对 WER 降低。
该模型由patrickvonplaten贡献。
使用提示
- Hubert 是一个接受与语音信号的原始波形对应的浮点数组的语音模型。
- Hubert 模型使用连接主义时间分类(CTC)进行微调,因此模型输出必须使用 Wav2Vec2CTCTokenizer 进行解码。
资源
- 音频分类任务指南
- 自动语音识别任务指南
HubertConfig
class transformers.HubertConfig
( 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_layer_norm = True feat_proj_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 ctc_loss_reduction = 'sum' ctc_zero_infinity = False use_weighted_layer_sum = False classifier_proj_size = 256 pad_token_id = 0 bos_token_id = 1 eos_token_id = 2 **kwargs )
参数
vocab_size
(int
,可选,默认为 32)— Hubert 模型的词汇量。定义了在调用 HubertModel 时可以表示的不同标记数量。模型的词汇量。定义了可以由传递给 HubertModel 的inputs_ids表示的不同标记。hidden_size
(int
,可选,默认为 768)— 编码器层和池化器层的维度。num_hidden_layers
(int
,可选,默认为 12)— Transformer 编码器中的隐藏层数。num_attention_heads
(int
,可选,默认为 12)— Transformer 编码器中每个注意力层的注意力头数。intermediate_size
(int
,可选,默认为 3072)— Transformer 编码器中“中间”(即前馈)层的维度。hidden_act
(str
或function
,可选,默认为"gelu"
)— 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu"
、"relu"
、"selu"
和"gelu_new"
。hidden_dropout(float,
可选,默认为 0.1) — 嵌入层、编码器和池化器中所有全连接层的丢失概率。activation_dropout
(float
, optional, 默认为 0.1) — 全连接层内部激活的 dropout 比率。attention_dropout(float,
optional, 默认为 0.1) — 注意力概率的 dropout 比率。final_dropout
(float
, optional, 默认为 0.1) — Wav2Vec2ForCTC 最终投影层的 dropout 概率。layerdrop
(float
, optional, 默认为 0.1) — LayerDrop 概率。更多细节请参阅 LayerDrop paper)。initializer_range
(float
, optional, 默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。layer_norm_eps
(float
, optional, 默认为 1e-12) — 层归一化层使用的 epsilon。feat_extract_norm
(str
, optional, 默认为"group"
) — 应用于特征编码器中的 1D 卷积层的规范化方式。"group"
表示仅对第一个 1D 卷积层进行组归一化,"layer"
表示对所有 1D 卷积层进行层归一化。feat_proj_dropout
(float
, optional, 默认为 0.0) — 特征编码器输出的 dropout 概率。feat_proj_layer_norm
(bool
, optional, 默认为True
) — 是否对特征编码器的输出应用 LayerNorm。feat_extract_activation
(str,
optional, 默认为
“gelu”) -- 特征提取器中 1D 卷积层的非线性激活函数(函数或字符串)。如果是字符串,支持
“gelu”、
“relu”、
“selu”和
“gelu_new”`。conv_dim
(Tuple[int]
, optional, 默认为(512, 512, 512, 512, 512, 512, 512)
) — 一个整数元组,定义了特征编码器中每个 1D 卷积层的输入和输出通道数。conv_dim的长度定义了 1D 卷积层的数量。conv_stride
(Tuple[int]
, optional, 默认为(5, 2, 2, 2, 2, 2, 2)
) — 一个整数元组,定义了特征编码器中每个 1D 卷积层的步幅。conv_stride的长度定义了卷积层的数量,必须与conv_dim的长度匹配。conv_kernel
(Tuple[int]
, optional, 默认为(10, 3, 3, 3, 3, 3, 3)
) — 一个整数元组,定义了特征编码器中每个 1D 卷积层的内核大小。conv_kernel的长度定义了卷积层的数量,必须与conv_dim的长度匹配。conv_bias
(bool
, optional, 默认为False
) — 1D 卷积层是否有偏置。num_conv_pos_embeddings
(int
, optional, 默认为 128) — 卷积位置嵌入的数量。定义了 1D 卷积位置嵌入层的内核大小。num_conv_pos_embedding_groups
(int
, optional, 默认为 16) — 1D 卷积位置嵌入层的组数。do_stable_layer_norm
(bool
, optional, 默认为False
) — 是否应用 Transformer 编码器的stable层归一化架构。do_stable_layer_norm 为 True
表示在注意力层之前应用层归一化,而do_stable_layer_norm 为 False
表示在注意力层之后应用层归一化。apply_spec_augment
(bool
, optional, 默认为True
) — 是否对特征编码器的输出应用SpecAugment数据增强。参考SpecAugment: A Simple Data Augmentation Method for Automatic Speech Recognition。mask_time_prob
(float
, optional, 默认为 0.05) — 沿时间轴遮蔽的所有特征向量的百分比(介于 0 和 1 之间)。遮蔽过程在轴上生成“mask_time_prob*len(time_axis)/mask_time_length”个独立的遮蔽。如果从每个特征向量被选择为遮蔽向量跨度起始的概率推理,mask_time_prob应为prob_vector_start*mask_time_length
。请注意,重叠可能会降低实际遮蔽向量的百分比。仅在apply_spec_augment
为 True 时相关。mask_time_length
(int
, optional, 默认为 10) — 沿时间轴的向量跨度长度。mask_time_min_masks
(int
, optional, 默认为 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_prob*len(feature_axis)/mask_time_length”个独立的遮蔽。如果从每个特征向量被选择为遮蔽向量跨度起始的概率推理,mask_feature_prob应为prob_vector_start*mask_feature_length
。请注意,重叠可能会降低实际遮蔽向量的百分比。仅在apply_spec_augment
为 True 时相关。mask_feature_length
(int
, optional, 默认为 10) — 沿特征轴的向量跨度长度。mask_feature_min_masks
(int
, optional, 默认为 0) — 沿特征轴生成的长度为mask_feature_length
的最小遮蔽数量,每个时间步,与mask_feature_prob
无关。仅在“mask_feature_prob*len(feature_axis)/mask_feature_length < mask_feature_min_masks”时相关。ctc_loss_reduction
(str
, optional, 默认为"sum"
) — 指定应用于torch.nn.CTCLoss
输出的减少方式。仅在训练 HubertForCTC 实例时相关。ctc_zero_infinity
(bool
, optional, 默认为False
) — 是否将torch.nn.CTCLoss
的无限损失和相关梯度置零。当输入太短无法与目标对齐时,会出现无限损失。仅在训练 HubertForCTC 实例时相关。use_weighted_layer_sum
(bool
, optional, 默认为False
) — 是否使用具有学习权重的层输出的加权平均值。仅在使用 HubertForSequenceClassification 实例时相关。classifier_proj_size
(int
, optional, 默认为 256) — 分类前的投影维度,用于标记均值池化。
这是用于存储 HubertModel 配置的配置类。它用于根据指定的参数实例化 Hubert 模型,定义模型架构。使用默认值实例化配置将产生类似于 Hubert facebook/hubert-base-ls960架构的配置。
配置对象继承自 PretrainedConfig,可用于控制模型输出。阅读 PretrainedConfig 的文档以获取更多信息。
示例:
>>> from transformers import HubertModel, HubertConfig >>> # Initializing a Hubert facebook/hubert-base-ls960 style configuration >>> configuration = HubertConfig() >>> # Initializing a model from the facebook/hubert-base-ls960 style configuration >>> model = HubertModel(configuration) >>> # Accessing the model configuration >>> configuration = model.config
PytorchHide Pytorch content
HubertModel
class transformers.HubertModel
( config: HubertConfig )
参数
config
(HubertConfig)— 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只加载配置。查看 from_pretrained()方法以加载模型权重。
裸的 Hubert 模型变压器输出原始隐藏状态,没有特定的顶部头。Hubert 是由 Wei-Ning Hsu、Benjamin Bolte、Yao-Hung Hubert Tsai、Kushal Lakhotia、Ruslan Salakhutdinov、Abdelrahman Mohamed 在《HuBERT:通过隐藏单元的屏蔽预测进行自监督语音表示学习》中提出的。
这个模型继承自 PreTrainedModel。检查超类文档以获取库为所有模型实现的通用方法(例如下载或保存等)。
这个模型是 PyTorch torch.nn.Module子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。
forward
( input_values: Optional attention_mask: Optional = None mask_time_indices: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.BaseModelOutput or tuple(torch.FloatTensor)
参数
input_values
(形状为(batch_size, sequence_length)
的torch.FloatTensor
)— 输入原始语音波形的浮点值。值可以通过将.flac
或.wav
音频文件加载到List[float]
类型的数组或numpy.ndarray
中获得,例如通过声音文件库(pip install soundfile
)。要准备好数组为input_values
,应使用 AutoProcessor 进行填充和转换为torch.FloatTensor
类型的张量。有关详细信息,请参阅 Wav2Vec2Processor.call
()。attention_mask
(形状为(batch_size, sequence_length)
的torch.LongTensor
,可选)— 用于避免在填充标记索引上执行卷积和注意力的掩码。选择在[0, 1]
中的掩码值:
- 对于“未屏蔽”的标记返回 1,
- 对于“屏蔽”的标记返回 0。
- 什么是注意力掩码?
只有当相应的处理器具有config.return_attention_mask == True
时才应传递attention_mask
。对于所有处理器具有config.return_attention_mask == False
的模型,例如hubert-base,在进行批量推理时,应避免传递attention_mask
以避免性能下降。对于这种模型,input_values
应该简单地用 0 填充并在不传递attention_mask
的情况下传递。请注意,这些模型根据input_values
是否填充而产生略有不同的结果。 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
)包括根据配置(HubertConfig)和输入的不同元素。
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
时返回) — 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组(如果模型有嵌入层,则为嵌入的输出+每层的输出)。
模型在每一层的输出的隐藏状态加上可选的初始嵌入输出。attentions
(tuple(torch.FloatTensor)
, 可选, 当传递output_attentions=True
或config.output_attentions=True
时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组(每层一个)。
在自注意力头中用于计算加权平均值的注意力 softmax 之后的注意力权重。
HubertModel 的前向方法,覆盖了__call__
特殊方法。
虽然前向传递的步骤需要在此函数内定义,但应该在此之后调用Module
实例,而不是这个,因为前者会处理运行前后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoProcessor, HubertModel >>> from datasets import load_dataset >>> import soundfile as sf >>> processor = AutoProcessor.from_pretrained("facebook/hubert-large-ls960-ft") >>> model = HubertModel.from_pretrained("facebook/hubert-large-ls960-ft") >>> def map_to_array(batch): ... speech, _ = sf.read(batch["file"]) ... batch["speech"] = speech ... return batch >>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation") >>> ds = ds.map(map_to_array) >>> input_values = processor(ds["speech"][0], return_tensors="pt").input_values # Batch size 1 >>> hidden_states = model(input_values).last_hidden_state
Transformers 4.37 中文文档(七十五)(4)https://developer.aliyun.com/article/1564212