speechbrain.lobes.models.transformer.Conformer 模块
Conformer 实现。
摘要
类
此类实现了 Transformer 解码器。 |
|
这是 Conformer 编码器层的实现。 |
|
此类实现了 Conformer 编码器。 |
|
这是 Conformer 编码器层的实现。 |
|
|
|
|
|
这是 Conformer 中卷积模块的实现。 |
参考
- class speechbrain.lobes.models.transformer.Conformer.ConformerEncoderLayerStreamingContext(mha_left_context_size: int, mha_left_context: Tensor | None = None, dcconv_left_context: Tensor | None = None)[source]
基类:
object
ConformerEncoderLayer
的流式元数据和状态。多头注意力和动态分块卷积需要保存一些左上下文,这些上下文将作为左填充插入。
请参阅
ConvolutionModule
文档了解更多详细信息。
- class speechbrain.lobes.models.transformer.Conformer.ConformerEncoderStreamingContext(dynchunktrain_config: DynChunkTrainConfig, layers: List[ConformerEncoderLayerStreamingContext])[source]
基类:
object
ConformerEncoder
的流式元数据和状态。- dynchunktrain_config: DynChunkTrainConfig
包含块大小和上下文大小信息的动态分块训练配置。
- layers: List[ConformerEncoderLayerStreamingContext]
编码器每一层的流式元数据和状态。
- class speechbrain.lobes.models.transformer.Conformer.ConvolutionModule(input_size, kernel_size=31, bias=True, activation=<class 'speechbrain.nnet.activations.Swish'>, dropout=0.0, causal=False, dilation=1)[source]
基类:
Module
这是 Conformer 中卷积模块的实现。
- 参数:
示例
>>> import torch >>> x = torch.rand((8, 60, 512)) >>> net = ConvolutionModule(512, 3) >>> output = net(x) >>> output.shape torch.Size([8, 60, 512])
- forward(x: Tensor, mask: Tensor | None = None, dynchunktrain_config: DynChunkTrainConfig | None = None)[source]
将卷积应用于输入张量
x
。- 参数:
x (torch.Tensor) – 卷积模块的输入张量。
mask (torch.Tensor, 可选) – 如果指定,使用
masked_fill_
应用于卷积输出的掩码。dynchunktrain_config (DynChunkTrainConfig, 可选) – 如果指定,则使模块支持动态分块卷积 (DCConv),其实现方式类似于 Dynamic Chunk Convolution for Unified Streaming and Non-Streaming Conformer ASR。这允许掩码未来的帧,同时比完全因果卷积保持更好的准确性,但会稍微牺牲速度。这仅应用于训练 (或者,如果您知道自己在做什么,可用于推断时的掩码评估),因为推断时应使用流式前向传播函数。
- 返回:
out – 输出张量。
- 返回类型:
torch.Tensor
- class speechbrain.lobes.models.transformer.Conformer.ConformerEncoderLayer(d_model, d_ffn, nhead, kernel_size=31, kdim=None, vdim=None, activation=<class 'speechbrain.nnet.activations.Swish'>, bias=True, dropout=0.0, causal=False, attention_type='RelPosMHAXL')[source]
基类:
Module
这是 Conformer 编码器层的实现。
- 参数:
d_model (int) – 输入嵌入的期望大小。
d_ffn (int) – 自注意力前馈层的隐藏大小。
nhead (int) – 注意力头数。
kernel_size (int, 可选) – 卷积模型的核大小。
kdim (int, 可选) – 键的维度。
vdim (int, 可选) – 值的维度。
activation (torch.nn.Module) – 在每个 Conformer 层中使用的激活函数。
bias (bool, 可选) – 是否使用卷积模块。
dropout (int, 可选) – 编码器的 Dropout。
causal (bool, 可选) – 卷积是否应为因果的。
attention_type (str, 可选) – 注意力层类型,例如 regularMHA 表示普通多头注意力。
示例
>>> import torch >>> x = torch.rand((8, 60, 512)) >>> pos_embs = torch.rand((1, 2*60-1, 512)) >>> net = ConformerEncoderLayer(d_ffn=512, nhead=8, d_model=512, kernel_size=3) >>> output = net(x, pos_embs=pos_embs) >>> output[0].shape torch.Size([8, 60, 512])
- forward(x, src_mask: Tensor | None = None, src_key_padding_mask: Tensor | None = None, pos_embs: Tensor | None = None, dynchunktrain_config: DynChunkTrainConfig | None = None)[source]
- 参数:
src (torch.Tensor) – 编码器层的输入序列。
src_mask (torch.Tensor, 可选) – src 序列的掩码。
src_key_padding_mask (torch.Tensor, 可选) – 每批次 src 键的掩码。
pos_embs (torch.Tensor, torch.nn.Module, 可选) – 包含输入序列位置嵌入的模块或张量
dynchunktrain_config (可选[DynChunkTrainConfig]) – 用于流式处理的动态分块训练配置对象,特别是在此处用于将动态分块卷积应用于卷积模块。
- forward_streaming(x, context: ConformerEncoderLayerStreamingContext, pos_embs: Tensor | None = None)[source]
Conformer 层流式前向传播 (通常用于动态分块训练的模型),用于推断时。依赖于由
make_streaming_context
初始化的可变上下文对象,该对象应在不同块之间使用。由ConformerEncoder.forward_streaming
调用。- 参数:
x (torch.Tensor) – 此层的输入张量。只要上下文一致,就支持批处理。
context (ConformerEncoderStreamingContext) – 可变流式上下文;在调用之间应传递同一个对象。
pos_embs (torch.Tensor, 可选) – 位置嵌入,如果使用的话。
- 返回:
x (torch.Tensor) – 输出张量。
self_attn (list) – 自注意力值列表。
- class speechbrain.lobes.models.transformer.Conformer.ConformerEncoder(num_layers, d_model, d_ffn, nhead, kernel_size=31, kdim=None, vdim=None, activation=<class 'speechbrain.nnet.activations.Swish'>, bias=True, dropout=0.0, causal=False, attention_type='RelPosMHAXL', output_hidden_states=False, layerdrop_prob=0.0)[source]
基类:
Module
此类实现了 Conformer 编码器。
- 参数:
num_layers (int) – 层数。
d_model (int) – 嵌入维度大小。
d_ffn (int) – 自注意力前馈层的隐藏大小。
nhead (int) – 注意力头数。
kernel_size (int, 可选) – 卷积模型的核大小。
kdim (int, 可选) – 键的维度。
vdim (int, 可选) – 值的维度。
activation (torch.nn.Module) – 在每个 Conformer 层中使用的激活函数。
bias (bool, 可选) – 是否使用卷积模块。
dropout (int, 可选) – 编码器的 Dropout。
causal (bool, 可选) – 卷积是否应为因果的。
attention_type (str, 可选) – 注意力层类型,例如 regulaMHA 表示普通多头注意力。
output_hidden_states (bool, 可选) – 模型是否应将隐藏状态作为张量列表输出。
layerdrop_prob (float) – 丢弃整个层的概率。
示例
>>> import torch >>> x = torch.rand((8, 60, 512)) >>> pos_emb = torch.rand((1, 2*60-1, 512)) >>> net = ConformerEncoder(1, 512, 512, 8) >>> output, _ = net(x, pos_embs=pos_emb) >>> output.shape torch.Size([8, 60, 512])
>>> import torch >>> from speechbrain.lobes.models.transformer.Conformer import ConformerEncoder >>> x = torch.rand((8, 60, 512)); pos_emb = torch.rand((1, 2*60-1, 512)); >>> net = ConformerEncoder(4, 512, 512, 8, output_hidden_states=True) >>> output, _, hs = net(x, pos_embs=pos_emb) >>> hs[0].shape torch.Size([8, 60, 512])
- forward(src, src_mask: Tensor | None = None, src_key_padding_mask: Tensor | None = None, pos_embs: Tensor | None = None, dynchunktrain_config: DynChunkTrainConfig | None = None)[source]
- 参数:
src (torch.Tensor) – 编码器层的输入序列。
src_mask (torch.Tensor, 可选) – src 序列的掩码。
src_key_padding_mask (torch.Tensor, 可选) – 每批次 src 键的掩码。
pos_embs (torch.Tensor, torch.nn.Module,) – 包含输入序列位置嵌入的模块或张量。如果给定自定义 pos_embs,则其形状需要为 (1, 2*S-1, E),其中 S 是序列长度,E 是嵌入维度。
dynchunktrain_config (可选[DynChunkTrainConfig]) – 用于流式处理的动态分块训练配置对象,特别是在此处用于将动态分块卷积应用于卷积模块。
- 返回:
output (torch.Tensor) – Conformer 的输出。
attention_lst (list) – 注意力值。
hidden_state_lst (list, 可选) – 编码器隐藏层的输出。仅当 output_hidden_states 设置为 true 时有效。
- forward_streaming(src: Tensor, context: ConformerEncoderStreamingContext, pos_embs: Tensor | None = None)[source]
Conformer 流式前向传播 (通常用于动态分块训练的模型),用于推断时。依赖于由
make_streaming_context
初始化的可变上下文对象,该对象应在不同块之间使用。- 参数:
src (torch.Tensor) – 输入张量。只要上下文一致,就支持批处理。
context (ConformerEncoderStreamingContext) – 可变流式上下文;在调用之间应传递同一个对象。
pos_embs (torch.Tensor, 可选) – 位置嵌入,如果使用的话。
- 返回:
output (torch.Tensor) – 流式 Conformer 的输出。
attention_lst (list) – 注意力值。
- make_streaming_context(dynchunktrain_config: DynChunkTrainConfig)[source]
为编码器创建一个空白流式上下文。
- 参数:
dynchunktrain_config (可选[DynChunkTrainConfig]) – 用于流式处理的动态分块训练配置对象
- 返回类型:
- class speechbrain.lobes.models.transformer.Conformer.ConformerDecoderLayer(d_model, d_ffn, nhead, kernel_size, kdim=None, vdim=None, activation=<class 'speechbrain.nnet.activations.Swish'>, bias=True, dropout=0.0, causal=True, attention_type='RelPosMHAXL')[source]
基类:
Module
这是 Conformer 编码器层的实现。
- 参数:
d_model (int) – 输入嵌入的期望大小。
d_ffn (int) – 自注意力前馈层的隐藏大小。
nhead (int) – 注意力头数。
kernel_size (int, 可选) – 卷积模型的核大小。
kdim (int, 可选) – 键的维度。
vdim (int, 可选) – 值的维度。
activation (torch.nn.Module, 可选) – 在每个 Conformer 层中使用的激活函数。
bias (bool, 可选) – 是否使用卷积模块。
dropout (int, 可选) – 编码器的 Dropout。
causal (bool, 可选) – 卷积是否应为因果的。
attention_type (str, 可选) – 注意力层类型,例如 regularMHA 表示普通多头注意力。
示例
>>> import torch >>> x = torch.rand((8, 60, 512)) >>> pos_embs = torch.rand((1, 2*60-1, 512)) >>> net = ConformerEncoderLayer(d_ffn=512, nhead=8, d_model=512, kernel_size=3) >>> output = net(x, pos_embs=pos_embs) >>> output[0].shape torch.Size([8, 60, 512])
- forward(tgt, memory, tgt_mask=None, memory_mask=None, tgt_key_padding_mask=None, memory_key_padding_mask=None, pos_embs_tgt=None, pos_embs_src=None)[source]
- 参数:
tgt (torch.Tensor) – 解码器层的输入序列。
memory (torch.Tensor) – 来自编码器最后一层的序列。
tgt_mask (torch.Tensor, 可选, 可选) – tgt 序列的掩码。
memory_mask (torch.Tensor, 可选) – memory 序列的掩码。
tgt_key_padding_mask (torch.Tensor, 可选) – 每批次 tgt 键的掩码。
memory_key_padding_mask (torch.Tensor, 可选) – 每批次 memory 键的掩码。
pos_embs_tgt (torch.Tensor, torch.nn.Module, 可选) – 包含每个注意力层目标序列位置嵌入的模块或张量。
pos_embs_src (torch.Tensor, torch.nn.Module, 可选) – 包含每个注意力层源序列位置嵌入的模块或张量。
- 返回:
x (torch.Tensor) – 输出张量
self_attn (torch.Tensor)
self_attn (torch.Tensor) – 自注意力张量
- class speechbrain.lobes.models.transformer.Conformer.ConformerDecoder(num_layers, nhead, d_ffn, d_model, kdim=None, vdim=None, dropout=0.0, activation=<class 'speechbrain.nnet.activations.Swish'>, kernel_size=3, bias=True, causal=True, attention_type='RelPosMHAXL')[source]
基类:
Module
此类实现了 Transformer 解码器。
- 参数:
num_layers (int) – 层数。
nhead (int) – 注意力头数。
d_ffn (int) – 自注意力前馈层的隐藏大小。
d_model (int) – 嵌入维度大小。
kdim (int, 可选) – 键的维度。
vdim (int, 可选) – 值的维度。
dropout (float, 可选) – Dropout 比率。
activation (torch.nn.Module, 可选) – 非瓶颈卷积层后使用的激活函数。
kernel_size (int, 可选) – 卷积层的核大小。
bias (bool, 可选) – 是否使用卷积模块。
causal (bool, 可选) – 卷积是否应为因果的。
attention_type (str, 可选) – 注意力层类型,例如 regularMHA 表示普通多头注意力。
示例
>>> src = torch.rand((8, 60, 512)) >>> tgt = torch.rand((8, 60, 512)) >>> net = ConformerDecoder(1, 8, 1024, 512, attention_type="regularMHA") >>> output, _, _ = net(tgt, src) >>> output.shape torch.Size([8, 60, 512])
- forward(tgt, memory, tgt_mask=None, memory_mask=None, tgt_key_padding_mask=None, memory_key_padding_mask=None, pos_embs_tgt=None, pos_embs_src=None)[source]
- 参数:
tgt (torch.Tensor) – 解码器层的输入序列。
memory (torch.Tensor) – 来自编码器最后一层的序列。
tgt_mask (torch.Tensor, 可选, 可选) – tgt 序列的掩码。
memory_mask (torch.Tensor, 可选) – memory 序列的掩码。
tgt_key_padding_mask (torch.Tensor, 可选) – 每批次 tgt 键的掩码。
memory_key_padding_mask (torch.Tensor, 可选) – 每批次 memory 键的掩码。
pos_embs_tgt (torch.Tensor, torch.nn.Module, 可选) – 包含每个注意力层目标序列位置嵌入的模块或张量。
pos_embs_src (torch.Tensor, torch.nn.Module, 可选) – 包含每个注意力层源序列位置嵌入的模块或张量。
- 返回:
output (torch.Tensor) – Conformer 解码器输出。
self_attns (list) – 自注意力位置。
multihead_attns (list) – 多头注意力位置。