ASR之Conformer

文章探讨了Conformer,一种结合了Transformer全局关联性和CNN局部特性在端到端语音识别中的模型。它包含ConformerBlock、不同模块设计、研究维度如MHSA-CNN结合方式、MacaronFFN和注意头数量,以及在LibriSpeech数据集上的实验结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接:Conformer: Convolution-augmented Transformer for Speech Recognition

一、原理分析

由于Transformer注重全局相关性,而CNN注重局部相关性,则二者结合可能在端到端ASR中取得较以往的RNN更好的效果。

二、结构

Conformer Block = (1/2 * FNN + MHSA + Conv + 1/2 * FNN + LayerNorm) with Reisdual

三、与Transformer区别

1.不同的模块

a)SWISH + ReLU: 使用激活函数 Swish(x) = x * torch.sigmoid(x)

b)CNN Block

c)Macaron FFN : 使用成对FNN 并乘以1/2权重,如Conformer Block图

d)Relative Pos.Emb 位置编码方法:       

  PE(pos, 2i) = sin(pos / 10000 ^ {2i/dm})\\\ PE(pos, 2i+1) = cos(pos / 10000 ^ {2i/dm})

其中pos为输入单位在输入中的位置,2i 代表该向量中的第 2i 个维度,dm为维度的总数。

2.结论

第二个与第三个模块最为重要

四、几个研究维度

1.MHSA与CNN结合方式

a)使用轻量级CNN

b)交换MHSA与CNN的顺序

c)将输入划分开再传入多个注意头中

2.Macaron FFN

使用双FFN和权重乘以1/2,哪个更重要?都重要!

3.注意头的数量

注意头数 * 维度数(dm) == 512,其中注意头数取16较为合适

4.卷积核大小

文章研究了3、7、17、32、65等大小的卷积核对结果的影响,kernel_size == 32 时效果最好

五、数据相关

1.数据集

LibriSpeech、testclean、testother

2.语音预处理

80-channel filterbanks、25ms window、10ms stride

3.频谱增强

with mask parameter (F = 27), and ten time masks with maximum time-mask ratio (pS = 0.05),, where the maximum-size of the time mask is set to pS times the length of the utterance.

(这里暂时不太明白)

### Conformer 架构及其在语音识别和自然语言处理中的实现 #### 背景介绍 Conformer 是一种结合卷积神经网络 (CNN) 和变压器 (Transformer) 的混合架构,最初由 Google 提出并广泛应用于自动语音识别 (ASR)[^1]。它通过融合 CNN 的局部特征提取能力和 Transformer 的全局依赖建模能力,在多个任务上表现出卓越性能。 #### Conformer 的核心组件 Conformer 主要由以下几个部分组成: 1. **多头自注意力机制 (Multi-head Self-Attention)** 多头自注意力模块允许模型捕捉输入序列之间的长期依赖关系。这一特性对于理解上下文丰富的语音信号至关重要。 2. **卷积前馈网络 (Convolution Module)** 卷积模块利用一维深度可分离卷积来增强局部特征的学习能力。这种设计不仅提高了计算效率,还保留了时间维度上的结构信息。 3. **位置编码 (Positional Encoding)** 为了使 Transformer 能够感知到序列的位置信息,通常会加入正弦/余弦形式的位置编码。然而,在某些变体中也采用了相对位置编码技术以进一步优化性能。 4. **残差连接与层归一化 (Residual Connections & Layer Normalization)** 这些标准操作有助于缓解梯度消失问题,并促进深层网络训练过程中的稳定收敛。 #### 实现细节 以下是基于 PyTorch 的简化版 Conformer 块代码示例: ```python import torch.nn as nn class ConvModule(nn.Module): def __init__(self, d_model, kernel_size=31): super(ConvModule, self).__init__() self.pointwise_conv1 = nn.Conv1d(d_model, 2 * d_model, kernel_size=1) self.depthwise_conv = nn.Conv1d( d_model, d_model, kernel_size=kernel_size, groups=d_model, padding=(kernel_size - 1) // 2, ) self.batch_norm = nn.BatchNorm1d(d_model) def forward(self, x): x = self.pointwise_conv1(x.permute(0, 2, 1)).permute(0, 2, 1) x = nn.functional.glu(x, dim=-1) x = self.depthwise_conv(x.transpose(1, 2)) x = self.batch_norm(x).transpose(1, 2) return x class ConformerBlock(nn.Module): def __init__(self, d_model, nhead, dim_feedforward, dropout=0.1): super(ConformerBlock, self).__init__() self.self_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout) self.conv_module = ConvModule(d_model) self.ffn1 = nn.Linear(d_model, dim_feedforward) self.ffn2 = nn.Linear(dim_feedforward, d_model) self.norm1 = nn.LayerNorm(d_model) self.norm2 = nn.LayerNorm(d_model) self.dropout = nn.Dropout(dropout) def forward(self, src): q = k = v = self.norm1(src) attn_output, _ = self.self_attn(q, k, v) out = src + self.dropout(attn_output) conv_out = self.conv_module(out.permute(0, 2, 1)).permute(0, 2, 1) out += self.dropout(conv_out) ffn_out = self.ffn2(nn.functional.relu(self.ffn1(self.norm2(out)))) out += self.dropout(ffn_out) return out ``` 上述代码定义了一个基本的 Conformer 块,其中包含了自注意力、卷积以及前馈网络三个主要子模块。 #### 应用场景 Conformer 已经被成功部署于多种实际应用场景之中,特别是在语音领域表现突出。例如,在 Hugging Face 平台上提供了 REST API 接口用于测试预训练好的遮蔽语言模型(Masked Language Models),这可以作为评估 Conformer 性能的一个工具[^2]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值