speechbrain.lobes.models.BESTRQ 模块

支持BEST RQ训练的组件较少,如原始论文所述:https://arxiv.org/pdf/2202.01855

作者 * Ryan Whetten 2024 * Titouan Parcollet 2025

摘要

函数:

brq_mask_collate_fn

这将从样本列表中创建一个批次,并创建将用于屏蔽BEST-RQ输入的掩码。

compute_mask

此函数生成BEST-RQ的掩码。

参考

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

此函数生成BEST-RQ的掩码。

它为整个批次生成一个独特的掩码,并基于较短的语音。这一点很重要,因为如果批次中包含一个短句子和许多长句子,只有少数帧会被掩码,这可能会改变训练。

特别是,从传递给 sample_lens 的较小长度中,我们将生成 N 个掩码,其中 N = mask_prob * smallest_len。因此,mask_prob 是帧开始掩码的概率,而不是被掩码的概率。

如果一个句子的长度是100个时间步长,mask_prob为0.15,mask大小为4,那么100*0.15*4=60%的帧将被掩盖。

Parameters:
  • shape (tuple) – 要掩码的输入张量的形状。通常为(批次,时间,特征)。

  • sample_lens (list) – 对应于批次中每个样本帧数的整数列表。例如 (12,13,14,20)

  • mask_prob (float) – 一个帧生成掩码的概率。已经被掩码的帧不能生成新的掩码。

  • mask_length (int) – 由掩码覆盖的帧数。

Return type:

计算出的掩码

Example

>>> compute_mask((2,50,60), [40, 50], 0.15, 2).shape
torch.Size([12])
speechbrain.lobes.models.BESTRQ.brq_mask_collate_fn(samples_lst, get_out_len_fn, mask_prob, mask_length, n_mels)[source]

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

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

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

  • mask_prob (float) – 帧生成掩码的概率。已经掩码的帧不能生成新的掩码。

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

  • n_mels (int) – 输入张量最后一维中的梅尔滤波器组数量。

Returns:

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

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

  • mask (torch.Tensor, shape (T)) – 包含输入张量中需要屏蔽的索引的掩码。