speechbrain.lobes.models.wav2vec 模块

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

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

总结

EncoderWrapper

一个 Wrapper,用于添加位置信息、掩码输入,然后运行潜在编码器。

W2VLatentExtractor

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

W2VTargetQuantiser

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

函数

compute_mask

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

sample_negatives

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

w2v_mask_collate_fn

这将从样本列表中创建一个批次,并创建将用于掩码潜在编码器输入的布尔掩码。为了创建掩码,我们需要知道潜在提取器之后的输出形状,因此需要参数 get_out_len_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

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

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

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

  • dropout (float) – CNN 的 Dropout。

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

示例

>>> 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,有关参数的文档请参阅此处。

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

  • out_dim (int) – 输出维度

  • quantiser (class) – 默认 GumbelVectorQuantizer

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

  • temperature_decay (tuple) – 训练温度。这应该是一个包含 3 个元素的元组:(起始值,终止值,衰减因子)。

示例

>>> 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

一个 Wrapper,用于添加位置信息、掩码输入,然后运行潜在编码器。

参数:
  • 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 比率。

示例

>>> 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]
参数:
  • latents (torch.Tensor, shape (B, T, C)) – 从潜在提取器输出的潜在表示(即帧)的批次。

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

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

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

返回:

results

包含以下项

"num_masked" : 掩码项的数量 "ratio_masked" : 掩码项的比例 "embeddings" : 特征

返回类型:

dict

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

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

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

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

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

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

返回:

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

返回类型:

numpy.ndarray

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

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

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

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

返回:

negs – 形状为 (N, B, T, C) 的负样本。

返回类型:

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。也可以为每个样本(加载音频文件时)创建掩码,然后将它们整理起来,但那时不知道批次中最短样本的长度(这决定了掩码帧的数量),所以现在这样做更好。

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

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

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

  • mask_length (int) – 将被掩码的连续帧的数量。

返回:

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

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

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