Conformer基于Paddle框架的实现
1. 模型结构

Conformer模型由Conformer: Convolution-augmented Transformer for Speech Recognition这篇论文首先提出,其架构如图所示。
基于Pytorch架构,已有多种对于Conformer的实现,本篇博客参考Sooftware的实现,将其迁移至Paddle框架。
2. 模型代码
下面将分层说明Conformer代码的实现。
2.1 数据预处理
该部分为Conformer Block之前的部分,包含一层SepcAug、一层卷积采样(Convolution Subsampling)以及一层线性层和随机失活层。这里未实现SpecAug。
此处代码为Convolution Subsampling的代码实现:
1 | class Conv2DSubSampling(nn.Layer): |
2.2 Feed Forward Module

该模块结构如图所示,下面展示该模块代码实现。
1 | class FeedForwardModule(nn.Layer): |
2.3 Multi-Headed Self Attention Module

该模块结构如图所示,下面展示该模块代码实现。
1 | class MultiHeadedSelfAttentionModule(nn.Layer): |
该模块涉及两个自定义层,分别是PositionalEncoding和RelativeMultiHeadAttention,下面分别进行介绍。
2.3.1 PositionalEncoding
该层负责对输出进行位置编码,具体实现如下:
1 | class PositionalEncoding(nn.Layer): |
2.3.2 RelativeMultiHeadAttention
该层负责结合位置编码输入进行相对多头注意力计算,具体实现如下:
1 | class RelativeMultiHeadAttention(nn.Layer): |
2.4 Convolution Module

该模块结构如图所示,下面展示该模块代码实现:
1 | class ConformerConvModule(nn.Layer): |
该模块涉及两个自定义层,分别是PointwiseConv1D和DepthWiseConv1D,下面分别介绍这两个自定义层。
2.4.1 PointwiseConv1D
1 | class PointwiseConv1D(nn.Layer): |
2.4.2 DepthWiseConv1D
1 | class DepthWiseConv1D(nn.Layer): |
2.5 Conformer Encoder
2.5.1 Conformer Block
考虑到每一个模块最后都需要进行一次残差连接,因此,我们定义了一个ResidualConnectionModule类,用于实现残差连接。
1 | class ResidualConnectionModule(nn.Layer): |
在上述计算层的定义后,我们可以直接写出ConformerBlock的定义:
1 | class ConformerBlock(nn.Layer): |
2.5.2 Conformer Encoder
综上给出ConformerEncoder的定义:
1 | class ConformerEncoder(nn.Layer): |
2.5 Conformer实现
1 | class Conformer(nn.Layer): |
2.6 其他辅助代码
此外,还有一些比较边缘但不可或缺的代码实现。这些代码在前面中已经使用,但是考虑行文结构放在最后。
1 | class Linear(nn.Layer): |