speechbrain.lobes.models.beats 模块
该叶瓣使得预训练的BEATs能够集成:使用声学标记器进行音频预训练。
参考: https://arxiv.org/abs/2212.09058 基于Github源码: https://github.com/microsoft/unilm/tree/master/beats
你可以从以下链接下载检查点:https://github.com/microsoft/unilm/tree/master/beats
- Author
Pooneh Mousavi 2024
摘要
类:
BEATs: 使用声学标记器进行音频预训练。 |
|
BEATs模型的配置类。 |
|
实现了一个结合线性变换的门控线性单元(GLU)。 |
|
一个自定义的自动梯度函数,用于在反向传播过程中缩放梯度。 |
|
实现多头注意力机制,支持相对位置嵌入和基于GRU的门控相对位置嵌入等高级功能。 |
|
实现了一个模块,该模块在卷积后调整张量的填充以保持其原始大小,并提供因果填充的选项。 |
|
实现Swish激活函数作为一个PyTorch模块。 |
|
实现Transformer编码器模块。 |
|
实现一个单一的Transformer句子编码器层。 |
函数:
应用高斯误差线性单元(GELU)激活函数。 |
|
应用高斯误差线性单元(GELU)激活函数,使用精确近似。 |
|
返回与提供的激活名称对应的激活函数。 |
|
初始化BERT模型中模块的权重和偏差。 |
|
封装模块并对其权重应用量化噪声,以便后续使用迭代产品量化(iPQ)进行量化。 |
参考
- class speechbrain.lobes.models.beats.BEATs(ckp_path: str = None, freeze: bool = True, output_all_hiddens: bool = False)[source]
基础:
ModuleBEATs: 使用声学标记器进行音频预训练。
该类实现了BEATs模型,该模型处理音频信号以进行特征提取或下游任务。模型支持从检查点加载、应用归一化,并可选择冻结参数。
- Parameters:
ckp_path (str, 可选) – 检查点文件的路径。如果为None,模型将不使用预训练权重进行初始化。 你可以从以下链接下载检查点:https://github.com/microsoft/unilm/tree/master/beats
freeze (bool, 可选 (默认: False)) – 如果为True,模型参数将被冻结,模型将设置为评估模式。
output_all_hiddens (bool, 可选 (默认: False)) – 如果为True,前向函数会输出所有transformer层的隐藏状态。 例如,BEATs_iter3有12个transformer层,输出形状为(13, B, T, C), 其中CNN输出的投影被添加到开头。 如果为False,前向函数仅输出最后一个transformer层的隐藏状态。
Example
>>> audio = torch.randn(4, 10000) # Batch of 4 audio signals >>> length = torch.tensor([1.0, 0.5, 0.75, 1.0]) >>> model = BEATs() >>> outputs = model.extract_features(audio, length)[0] >>> outputs.shape torch.Size([4, 24, 768])
- forward_padding_mask(features: Tensor, padding_mask: Tensor) Tensor[source]
调整给定特征的填充掩码。
- Parameters:
特征 (torch.Tensor) – 经过补丁嵌入后的输入特征。
padding_mask (torch.Tensor) – 输入信号的原始填充掩码。
- Returns:
调整后的填充掩码。
- Return type:
torch.Tensor
- preprocess(source: Tensor, fbank_mean: float = 15.41663, fbank_std: float = 6.55582) Tensor[source]
通过提取滤波器组并应用归一化来预处理输入波形。
- forward(wav: Tensor, wav_lens: Tensor | None = None, fbank_mean: float = 15.41663, fbank_std: float = 6.55582)[source]
接收一个输入波形并返回其对应的节拍编码。
- speechbrain.lobes.models.beats.gelu_accurate(x)[source]
应用高斯误差线性单元(GELU)激活函数,使用精确近似。
- Parameters:
x (torch.Tensor) – 输入张量,将对其应用GELU激活函数。
- Returns:
应用了GELU激活的逐元素张量。
- Return type:
torch.Tensor
- speechbrain.lobes.models.beats.gelu(x: Tensor) Tensor[source]
应用高斯误差线性单元(GELU)激活函数。
- Parameters:
x (torch.Tensor) – 应用GELU激活的输入张量。
- Returns:
应用了GELU激活的逐元素张量。
- Return type:
torch.Tensor
- speechbrain.lobes.models.beats.get_activation_fn(activation: str)[source]
返回与提供的激活名称对应的激活函数。
- Parameters:
activation (str) – 激活函数的名称。支持的值为: - “relu”:应用ReLU激活。 - “gelu”:应用GELU激活。 - “gelu_fast”:
gelu_accurate的别名,带有弃用警告。 - “gelu_accurate”:应用精确的GELU激活。 - “tanh”:应用Tanh激活。 - “linear”:应用恒等函数。 - “glu”:应用恒等函数(GLU占位符)。- Returns:
应用于输入张量的相应激活函数。
- Return type:
Callable[[torch.Tensor], torch.Tensor]
- Raises:
RuntimeError – 如果不支持指定的激活函数。
- class speechbrain.lobes.models.beats.SamePad(kernel_size, causal=False)[source]
基础:
Module实现了一个模块,该模块在卷积后调整张量的填充以保持其原始大小,并提供因果填充的选项。
这对于处理卷积层中的填充特别有用,其中内核大小或因果关系会影响输出大小。
- Parameters:
- class speechbrain.lobes.models.beats.Swish[source]
基础:
Module实现Swish激活函数作为一个PyTorch模块。
- Swish is a smooth, non-monotonic activation function defined as:
Swish(x) = x * sigmoid(x)
它经常用于深度学习中,因为它能够提高某些架构中的训练性能。
- class speechbrain.lobes.models.beats.GLU_Linear(input_dim, output_dim, glu_type='sigmoid', bias_in_glu=True)[source]
基础:
Module实现了一个结合线性变换的门控线性单元(GLU)。
- class speechbrain.lobes.models.beats.GradMultiply(*args, **kwargs)[source]
基础:
Function一个自定义的自动梯度函数,在反向传播过程中缩放梯度。
这对于需要在不影响前向传播输出的情况下进行梯度缩放的场景非常有用。前向传播返回输入本身,而后向传播则通过指定的因子缩放梯度。
- speechbrain.lobes.models.beats.quant_noise(module, p, block_size)[source]
封装模块并对其权重应用量化噪声,以便后续使用迭代产品量化(iPQ)进行量化。
这种方法在论文中有所描述: “Training with Quantization Noise for Extreme Model Compression.” 它 在训练过程中引入量化噪声,以提高模型在极端权重压缩场景下的鲁棒性。
- class speechbrain.lobes.models.beats.TransformerEncoder(args)[source]
基础:
Module实现Transformer编码器模块。
- Parameters:
args (Namespace 或 dict) – 模型超参数和配置的集合。
- forward(x, padding_mask=None, output_all_hiddens=None)[source]
通过Transformer编码器层处理输入序列。
- Parameters:
x (torch.Tensor) – 输入张量的形状为
(seq_len, batch_size, embed_dim),包含输入嵌入。padding_mask (torch.Tensor, optional) – 一个形状为
(batch_size, seq_len)的二进制掩码,指示哪些位置是填充的,在注意力计算中应被忽略。 默认值为None。output_all_hiddens (bool, 可选) – 如果为True,除了最终输出外,还会返回所有编码器层的隐藏状态。默认值为
None。
- Returns:
最终输出的张量形状为
(seq_len, batch_size, embed_dim)。
- Return type:
元组[torch.Tensor, 列表[torch.Tensor]]
- extract_features(x, padding_mask=None, output_all_hiddens=None)[source]
使用位置卷积、层归一化、dropout 和一系列 Transformer 编码器层从输入序列中提取特征。
- Parameters:
x (torch.Tensor) – 输入张量,形状为
(batch_size, seq_len, embed_dim),包含输入嵌入。padding_mask (torch.Tensor, optional) – 一个形状为
(batch_size, seq_len)的二进制掩码,指示哪些位置是填充的,在计算中应被忽略。默认值为None。output_all_hiddens (bool, optional) – 如果为True,除了最终输出外,还会收集并返回所有编码器层的隐藏状态。默认值为
None。
- Returns:
最终输出的张量形状为
(batch_size, seq_len, embed_dim)。
- Return type:
元组[torch.Tensor, 列表[torch.Tensor]]
- class speechbrain.lobes.models.beats.TransformerSentenceEncoderLayer(embedding_dim: float = 768, ffn_embedding_dim: float = 3072, num_attention_heads: float = 8, dropout: float = 0.1, attention_dropout: float = 0.1, activation_dropout: float = 0.1, activation_fn: str = 'relu', layer_norm_first: bool = False, deep_norm: bool = False, has_relative_attention_bias: bool = False, num_buckets: int = 0, max_distance: int = 0, rescale_init: bool = False, gru_rel_pos: bool = False, encoder_layers: int = 0)[source]
基础:
Module实现一个单一的Transformer句子编码器层。
- Parameters:
embedding_dim (float, 可选 (默认=768)) – 输入嵌入的维度。
ffn_embedding_dim (float, 可选 (默认=3072)) – 前馈网络隐藏层的维度。
num_attention_heads (float, 可选 (默认=8)) – 自注意力机制中的注意力头数量。
dropout (float, 可选 (默认=0.1)) – 应用于前馈网络和注意力层输出的丢弃率。
attention_dropout (float, 可选 (默认=0.1)) – 在注意力机制中应用的dropout率。
activation_dropout (float, 可选 (默认=0.1)) – 在前馈网络中激活函数后应用的丢弃率。
activation_fn (str, 可选 (默认="relu")) – 在前馈网络中使用的激活函数。支持的数值包括“relu”和“gelu”。
layer_norm_first (bool, 可选 (默认=False)) – 如果为True,则在注意力和前馈层之前应用层归一化;否则,在之后应用。
deep_norm (bool, 可选 (默认=False)) – 如果为True,则对残差连接使用深度归一化缩放。
has_relative_attention_bias (bool, 可选 (默认=False)) – 如果为True,则在注意力机制中包含相对位置偏差。
num_buckets (int, 可选 (默认=0)) – 用于相对注意力偏置的桶的数量(如果启用)。
max_distance (int, 可选 (默认=0)) – 相对注意力偏差的最大距离(如果启用)。
rescale_init (bool, 可选 (默认=False)) – 如果为True,则重新调整参数初始化以提高稳定性。
gru_rel_pos (bool, 可选 (默认=False)) – 如果为True,则采用GRU风格的相对位置编码。
encoder_layers (int, 可选 (默认=0)) – Transformer中的编码器层数。
- forward(x: Tensor, self_attn_mask: Tensor = None, self_attn_padding_mask: Tensor = None, need_weights: bool = False, pos_bias=None)[source]
通过Transformer句子编码器层处理输入张量。
- Parameters:
x (torch.Tensor) – 输入张量的形状为
(seq_len, batch_size, embed_dim)。self_attn_mask (torch.Tensor, optional) – 用于自注意力机制的掩码,通常用于因果或填充掩码。默认值为
None。self_attn_padding_mask (torch.Tensor, optional) – 形状为
(batch_size, seq_len)的填充掩码,指示在注意力计算中应忽略哪些标记。默认值为None。need_weights (bool, 可选 (默认=False)) – 是否返回注意力权重。如果
True,则输出中包含注意力权重。pos_bias (可选) – 如果适用,相对注意力的位置偏差。默认值为
None。
- Returns:
x(torch.Tensor): 输出张量的形状为(seq_len, batch_size, embed_dim)
在应用编码器层之后。
- Return type:
元组[torch.Tensor, torch.Tensor, 可选]
- class speechbrain.lobes.models.beats.MultiheadAttention(embed_dim, num_heads, kdim=None, vdim=None, dropout=0.0, bias=True, add_bias_kv=False, add_zero_attn=False, self_attention=False, encoder_decoder_attention=False, q_noise=0.0, qn_block_size=8, has_relative_attention_bias=False, num_buckets=32, max_distance=128, gru_rel_pos=False, rescale_init=False)[source]
基础:
Module实现了多头注意力机制,支持相对位置嵌入和基于GRU的门控相对位置嵌入等高级功能。
- Parameters:
embed_dim (int) – 输入嵌入的总维度数。
num_heads (int) – 注意力头的数量。
kdim (int, 可选) – 键嵌入的维度。默认为
embed_dim。vdim (int, 可选) – 值嵌入的维度。默认为
embed_dim。dropout (float, 可选) – 注意力权重的丢弃概率。默认为 0.0。
bias (bool, 可选) – 是否在投影中包含偏置项。默认为 True。
add_bias_kv (bool, optional) – 是否包含键和值投影的偏置。默认为 False。
add_zero_attn (bool, 可选) – 是否包含零注意力向量。默认为 False。
self_attention (bool, 可选) – 该层是否用于自注意力机制。默认为 False。
encoder_decoder_attention (bool, 可选) – 该层是否用于编码器-解码器注意力。默认为 False。
q_noise (float, 可选) – 量化的噪声水平。默认为0.0。
qn_block_size (int, 可选) – 量化的块大小。默认为8。
has_relative_attention_bias (bool, 可选) – 是否使用相对位置嵌入。默认为 False。
num_buckets (int, 可选) – 相对位置嵌入的桶数。默认为32。
max_distance (int, 可选) – 相对位置嵌入的最大距离。默认为128。
gru_rel_pos (bool, 可选) – 是否使用门控相对位置嵌入。默认为 False。
rescale_init (bool, 可选) – 是否重新缩放权重的初始化。默认为 False。
- forward(query: Tensor, key: Tensor | None, value: Tensor | None, key_padding_mask: Tensor | None = None, incremental_state: Dict[str, Dict[str, Tensor | None]] | None = None, need_weights: bool = True, static_kv: bool = False, attn_mask: Tensor | None = None, before_softmax: bool = False, need_head_weights: bool = False, position_bias: Tensor | None = None) Tuple[Tensor, Tensor | None, Tensor | None][source]
支持相对位置嵌入、缓存和可选dropout的多头注意力前向传播。
此方法实现了多头注意力的核心功能,包括相对位置偏差、增量解码以及支持各种掩码选项等可选特性。
- Parameters:
query (torch.Tensor) – 查询张量的形状为
(target_length, batch_size, embed_dim)。key (torch.Tensor, optional) – 形状为
(source_length, batch_size, embed_dim)的键张量。默认为None。value (torch.Tensor, optional) – 形状为
(source_length, batch_size, embed_dim)的值张量。默认为None。key_padding_mask (torch.Tensor, optional) – 用于排除填充键的掩码,形状为
(batch_size, source_length), 其中填充元素由1表示。默认为None。incremental_state (dict, 可选) – 存储用于增量解码的缓存键和值张量。默认为
None。need_weights (bool, 可选) – 如果为True,返回注意力权重。默认为
True。static_kv (bool, 可选) – 如果为True,键和值张量在增量解码时保持静态。 默认为
False。attn_mask (torch.Tensor, optional) – 注意力掩码,用于防止某些位置参与注意力计算,通常用于因果注意力。形状:
(target_length, source_length)。默认为None。before_softmax (bool, 可选) – 如果为True,返回softmax之前的原始注意力分数。默认为
False。need_head_weights (bool, 可选) – 如果为True,返回每个头的注意力权重。意味着
need_weights=True。 默认为False。position_bias (torch.Tensor, optional) – 预计算的位置偏置张量。如果
None,则在正向传播期间计算。
- Returns:
attn (torch.Tensor) – 形状为
(target_length, batch_size, embed_dim)的注意力输出。attn_weights (torch.Tensor, optional) – 形状为
(batch_size, num_heads, target_length, source_length)的注意力权重, 如果need_head_weights=False,则在头部之间平均。position_bias (torch.Tensor, optional) – 计算或传递的相对位置偏差,形状为
(num_heads, target_length, source_length)。
- apply_bias(k, v, bsz, attn_mask=None, key_padding_mask=None)[source]
将bias_k和bias_v应用于键和值张量,相应地更新注意力掩码和键填充掩码。
- Parameters:
k (torch.Tensor) – 键张量。
v (torch.Tensor) – 值张量。
bsz (int) – 批量大小。
attn_mask (torch.Tensor) – 注意力掩码
key_padding_mask (torch.Tensor) – 键填充掩码。
- Returns:
Tuple[torch.Tensor, torch.Tensor, Optional[torch.Tensor], Optional[torch.Tensor]] – 注意力掩码和键填充掩码。
- Return type:
更新了键,值,