ConvEmformer¶
- class torchaudio.prototype.models.ConvEmformer(input_dim: int, num_heads: int, ffn_dim: int, num_layers: int, segment_length: int, kernel_size: int, dropout: float = 0.0, ffn_activation: str = 'relu', left_context_length: int = 0, right_context_length: int = 0, max_memory_size: int = 0, weight_init_scale_strategy: Optional[str] = 'depthwise', tanh_on_mem: bool = False, negative_inf: float = -100000000.0, conv_activation: str = 'silu')[source]¶
實現了 Streaming Transformer Transducer based Speech Recognition Using Non-Causal Convolution [Shi et al., 2022] 中介紹的卷積增強流式 Transformer 架構。
- 引數::
input_dim (int) – 輸入維度。
num_heads (int) – 每個 ConvEmformer 層中的注意力頭數量。
ffn_dim (int) – 每個 ConvEmformer 層的全連線前饋網路的隱藏層維度。
num_layers (int) – 要例項化的 ConvEmformer 層數量。
segment_length (int) – 每個輸入段的長度。
kernel_size (int) – 卷積模組中使用的核大小。
dropout (float, 可選) – Dropout 機率。(預設值: 0.0)
ffn_activation (str, 可選) – 全連線前饋網路中使用的啟用函式。必須是 (“relu”, “gelu”, “silu”) 之一。(預設值: “relu”)
left_context_length (int, 可選) – 左上下文長度。(預設值: 0)
right_context_length (int, 可選) – 右上下文長度。(預設值: 0)
max_memory_size (int, 可選) – 要使用的最大記憶體元素數量。(預設值: 0)
weight_init_scale_strategy (str 或 None, 可選) – 每層權重初始化縮放策略。必須是 (“depthwise”, “constant”,
None) 之一。(預設值: “depthwise”)tanh_on_mem (bool, 可選) – 如果為
True,則對記憶體元素應用 tanh。(預設值:False)negative_inf (float, 可選) – 注意力權重中用於負無窮大的值。(預設值: -1e8)
conv_activation (str, 可選) – 卷積模組中使用的啟用函式。必須是 (“relu”, “gelu”, “silu”) 之一。(預設值: “silu”)
示例
>>> conv_emformer = ConvEmformer(80, 4, 1024, 12, 16, 8, right_context_length=4) >>> input = torch.rand(10, 200, 80) >>> lengths = torch.randint(1, 200, (10,)) >>> output, lengths = conv_emformer(input, lengths) >>> input = torch.rand(4, 20, 80) >>> lengths = torch.ones(4) * 20 >>> output, lengths, states = conv_emformer.infer(input, lengths, None)
方法¶
forward¶
- ConvEmformer.forward(input: Tensor, lengths: Tensor) Tuple[Tensor, Tensor]¶
用於訓練和非流式推理的前向傳播。
B: 批次大小;T: 批次中最大輸入幀數;D: 每幀的特徵維度。
- 引數::
input (torch.Tensor) – 使用右上下文幀在右側填充的語音幀,形狀為 (B, T + right_context_length, D)。
lengths (torch.Tensor) – 形狀為 (B,),其中第 i 個元素表示
input中第 i 個批次元素的有效語音幀數。
- 返回值::
- Tensor
輸出幀,形狀為 (B, T, D)。
- Tensor
輸出長度,形狀為 (B,),其中第 i 個元素表示輸出幀中第 i 個批次元素的有效幀數。
- 返回型別::
(Tensor, Tensor)
infer¶
- ConvEmformer.infer(input: Tensor, lengths: Tensor, states: Optional[List[List[Tensor]]] = None) Tuple[Tensor, Tensor, List[List[Tensor]]]¶
用於流式推理的前向傳播。
B: 批次大小;D: 每幀的特徵維度。
- 引數::
input (torch.Tensor) – 使用右上下文幀在右側填充的語音幀,形狀為 (B, segment_length + right_context_length, D)。
lengths (torch.Tensor) – 形狀為 (B,),其中第 i 個元素表示
input中第 i 個批次元素的有效幀數。states (List[List[torch.Tensor]] 或 None, 可選) – 表示在
infer上次呼叫中生成的內部狀態的張量列表的列表。(預設值:None)
- 返回值::
- Tensor
輸出幀,形狀為 (B, segment_length, D)。
- Tensor
輸出長度,形狀為 (B,),其中第 i 個元素表示輸出幀中第 i 個批次元素的有效幀數。
- List[List[Tensor]]
輸出狀態;表示在
infer當前呼叫中生成的內部狀態的張量列表的列表。
- 返回型別::
(Tensor, Tensor, List[List[Tensor]])