speechbrain.lobes.models.wav2vec 模块

构建wav2vec 2.0架构所需的组件,遵循原始论文:https://arxiv.org/abs/2006.11477

作者 * Rudolf A Braun 2022 * Guillermo Cambara 2022 * Titouan Parcollet 2022

摘要

类:

EncoderWrapper

一个包装器,用于添加位置信息,屏蔽输入,然后运行潜在编码器。

W2VLatentExtractor

基于卷积的原始音频特征提取器。

W2VTargetQuantiser

封装了 nnet.quantiser.GumbelVectorQuantizer,有关参数的文档请参见。

函数:

compute_mask

这将为目标形状创建布尔掩码,该掩码尊重样本长度,并且大约有一半的mask_prob条目设置为True

sample_negatives

从目标张量 y 中采样负样本。

w2v_mask_collate_fn

这将从样本列表中创建一个批次,并创建布尔掩码,该掩码将用于屏蔽潜在编码器的输入。

参考

class speechbrain.lobes.models.wav2vec.W2VLatentExtractor(out_channels=[512, 512, 512, 512, 512, 512, 512], kernel_sizes=[11, 3, 3, 3, 3, 3, 3], strides=[5, 2, 2, 2, 2, 2, 2], dropout=0.0, conv_init='kaiming')[source]

基础:Module

基于卷积的原始音频特征提取器。 通道数的增加基于 https://arxiv.org/abs/2109.06870

Parameters:
  • out_channels (list of ints) – 卷积层的输出通道数。

  • kernel_sizes (list of ints) – 卷积层的核大小。

  • strides (list of ints) – 卷积层的步幅。

  • dropout (float) – CNN的Dropout。

  • conv_init (str) – 使用的初始化类型,默认为“kaiming”

Example

>>> extractor = W2VLatentExtractor()
>>> inputs = torch.rand(10, 5000)
>>> outputs = extractor(inputs)
>>> outputs.shape
torch.Size([10, 14, 512])
forward(x, normalize_signal=True)[source]

从音频输入计算潜在变量。

get_output_lengths(input_lengths: LongTensor)[source]

计算给定输入长度的输出长度。

class speechbrain.lobes.models.wav2vec.W2VTargetQuantiser(in_dim=512, out_dim=256, quantiser=<class 'speechbrain.nnet.quantisers.GumbelVectorQuantizer'>, num_vars=320, temperature_decay=(2.0, 0.25, 0.999995))[source]

基础:Module

包装 nnet.quantiser.GumbelVectorQuantizer,有关参数的文档请参见。

Parameters:
  • in_dim (int) – 输入维度(通道数)。

  • out_dim (int) – 输出维度

  • quantiser () – 默认的GumbelVectorQuantizer

  • num_vars (int) – 每组量化向量的数量。

  • temperature_decay (tuple) – 训练时的温度。这应该是一个包含3个元素的元组:(开始, 结束, 衰减因子)。

Example

>>> quantiser = W2VTargetQuantiser()
>>> inputs = torch.rand(10, 12, 512)
>>> output, meta = quantiser(inputs)
>>> output.shape
torch.Size([10, 12, 256])
forward(x)[source]

返回量化目标及元信息。

class speechbrain.lobes.models.wav2vec.EncoderWrapper(in_dim, embedding_dim, latent_encoder, positional_encoding=<class 'speechbrain.lobes.models.transformer.Transformer.PositionalEncoding'>, dropout_encoder_input=0.05)[source]

基础:Module

一个包装器,用于添加位置信息,屏蔽输入,然后运行潜在编码器。

Parameters:
  • in_dim (int) – 输入张量的最后一个维度。

  • embedding_dim (int) – 将输入投影到的维度,也是潜在编码器将使用的维度。

  • latent_encoder (torch.nn.module) – 初始化的潜在编码器对象。

  • positional_encoding (torch.nn.module) – 未初始化的 nn.module,用于添加位置信息,将使用 embedding_dim

  • dropout_encoder_input (float) – 编码器输入上的Dropout。

Example

>>> from speechbrain.lobes.models.transformer.Transformer import TransformerEncoder
>>> encoder = TransformerEncoder(d_model=768, num_layers=4, nhead=4, d_ffn=1024)
>>> wrapper = EncoderWrapper(1024, 768, encoder)
>>> inputs = torch.rand(10, 12, 1024)
>>> outputs = wrapper(inputs)
>>> outputs["embeddings"].shape
torch.Size([10, 12, 768])
forward(latents, wav_lens=None, padding_mask=None, mask=None)[source]
Parameters:
  • latents (torch.Tensor, shape (B, T, C)) – 从潜在提取器输出的潜在表示(也称为帧)的批次。

  • wav_lens (torch.Tensor, shape (B,)) – 批次中每个样本的实际(未填充的)相对长度(0

  • padding_mask (torch.Tensor, shape (B, T,)) – 可以代替 wav_lens 提供。

  • mask (torch.Tensor, shape (B, T)) – 布尔掩码,用于决定哪些潜在帧将被掩码。

Returns:

结果

包含以下术语:

”num_masked” : 被屏蔽的术语数量 “ratio_masked” : 被屏蔽的术语比例 “embeddings” : 特征

Return type:

dict

speechbrain.lobes.models.wav2vec.compute_mask(shape, sample_lens, mask_prob, mask_length)[source]

这将为目标形状创建一个布尔掩码,该掩码尊重样本长度,并且大约有一半的条目设置为mask_probTrue

Parameters:
  • shape (list of ints, like (N, M)) – 返回的布尔掩码的形状。

  • sample_lens (list of ints) – 每个样本长度的绝对长度。

  • mask_prob (float) – 掩码的百分比。

  • mask_length (int) – 要屏蔽的连续子序列的长度。

Returns:

mask – 布尔掩码,形状与输入参数 shape 相同。

Return type:

numpy.ndarray

speechbrain.lobes.models.wav2vec.sample_negatives(y, num_neg)[source]

从目标张量 y 中采样负样本。

Parameters:
  • y (torch.Tensor) – 形状为 (B, T, C) 的张量

  • num_neg (int) – 要采样的负样本数量。

Returns:

negs – 形状中的负值 (N, B, T, C)

Return type:

torch.Tensor

speechbrain.lobes.models.wav2vec.w2v_mask_collate_fn(samples_lst, get_out_len_fn, mask_prob, mask_length)[source]

这将从样本列表中创建一个批次,并创建将用于屏蔽潜在编码器输入的布尔掩码。为了创建掩码,我们需要知道潜在提取器之后的输出形状,因此需要参数get_out_len_fn。也可以在加载音频文件时为每个样本创建掩码,然后将它们整理在一起,但在那时我们不知道批次中最短样本的长度(这决定了掩码帧的数量),所以这种方式更好。

Parameters:
  • samples_lst (list) – 由audio_pipeline返回的样本列表。

  • get_out_len_fn (function) – 计算样本通过特征提取器后长度的函数。

  • mask_prob (float) – 要屏蔽的帧的近似百分比。

  • mask_length (int) – 将被屏蔽的连续帧数。

Returns:

  • wavs_padded (torch.Tensor, shape (B, T)) – 带有右侧填充的音频数组。

  • wav_lens (torch.Tensor, shape (B,)) – 对于每个样本,数组中非填充部分的百分比。

  • mask (torch.Tensor, shape (B, T)) – 用于屏蔽帧的布尔掩码。