speechbrain.lobes.models.wav2vec 模块
构建遵循原始论文 https://arxiv.org/abs/2006.11477 的 wav2vec 2.0 架构所需的组件。
作者 * Rudolf A Braun 2022 * Guillermo Cambara 2022 * Titouan Parcollet 2022
总结
类
一个 Wrapper,用于添加位置信息、掩码输入,然后运行潜在编码器。 |
|
基于卷积的原始音频特征提取器。 |
|
封装了 |
函数
这将为目标形状创建一个布尔掩码,该掩码遵循样本长度,并且大约有 |
|
从目标张量 y 中采样负样本。 |
|
这将从样本列表中创建一个批次,并创建将用于掩码潜在编码器输入的布尔掩码。为了创建掩码,我们需要知道潜在提取器之后的输出形状,因此需要参数 |
参考
- 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
- 参数:
示例
>>> extractor = W2VLatentExtractor() >>> inputs = torch.rand(10, 5000) >>> outputs = extractor(inputs) >>> outputs.shape torch.Size([10, 14, 512])
- 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
,有关参数的文档请参阅此处。- 参数:
示例
>>> quantiser = W2VTargetQuantiser() >>> inputs = torch.rand(10, 12, 512) >>> output, meta = quantiser(inputs) >>> output.shape torch.Size([10, 12, 256])
- 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,用于添加位置信息、掩码输入,然后运行潜在编码器。
- 参数:
示例
>>> 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" : 特征
- 返回类型:
- speechbrain.lobes.models.wav2vec.compute_mask(shape, sample_lens, mask_prob, mask_length)[source]
这将为目标形状创建一个布尔掩码,该掩码遵循样本长度,并且大约有
mask_prob
的条目被设置为True
。- 参数:
- 返回:
mask – 形状与输入参数
shape
相同的布尔掩码。- 返回类型:
- 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
。也可以为每个样本(加载音频文件时)创建掩码,然后将它们整理起来,但那时不知道批次中最短样本的长度(这决定了掩码帧的数量),所以现在这样做更好。- 参数:
- 返回:
wavs_padded (torch.Tensor, shape (B, T)) – 右侧填充的音频数组。
wav_lens (torch.Tensor, shape (B,)) – 每个样本中非填充部分的百分比。
mask (torch.Tensor, shape (B, T)) – 用于掩码帧的布尔掩码。