赶上最新的AI论文

超轻量级CNN语音识别模型!谷歌开发的 "ContextNet "解读

语音识别

三个要点
✔️ 谷歌提出轻量级CNN语音识别模型
✔️ 用挤压和激发模块考虑全球背景
✔️ 用渐进式下采样减少计算成本

ContextNet: Improving Convolutional Neural Networks for Automatic Speech Recognition with Global Context
written by Wei HanZhengdong ZhangYu ZhangJiahui YuChung-Cheng ChiuJames QinAnmol GulatiRuoming PangYonghui Wu
(Submitted on 7 May 2020 (v1), last revised 16 May 2020 (this version, v3))
Comments: Submitted to Interspeech 2020

Subjects: Audio and Speech Processing (eess.AS); Computation and Language (cs.CL); Machine Learning (cs.LG); Sound (cs.SD)

code:  

本文所使用的图片要么来自该文件,要么是参照该文件制作的。

简介

人们对建立基于CNN而不是RNN变形金刚E2E(端到端)语音识别模型的兴趣越来越大。虽然基于RNNTransformer的方法在语音识别中往往更准确,但它们往往有大量的参数,在计算能力方面非常昂贵。

另一方面,基于CNN的模型比RNN变形金刚的参数效率更高,这可能使小公司在实践中更容易产生高质量的语音识别模型。

然而,尽管CNN模型善于通过卷积考虑近距离的特征,但它们不善于考虑远距离的全局背景,甚至SOTACNN模型QuartzNet也不如RNN/Transformer模型准确。

在本文中,我们介绍了ContextNet,它通过挤压和激发考虑到了全局背景,并通过渐进式下采样减少了参数。尽管是一个基于CNN的模型,但ContextNet的准确性超过了基于TransformerLSTM的模型。下图显示了模型大小和准确性(WER)之间的权衡,并显示ContextNetAuartzNet和基于RNN/Transformer的模型具有最好的权衡性能。

让我们来看看ContextNet模型的细节。

模型

端到端网络:CNN-RNN-Transducer

ContextNet网络基于RNN-Transducer框架 (https://arxiv.org/abs/1811.06621 ),由一个 用于输入音频的音频编码器、 一个用于输入标签的标签编码器和 一个结合两者的联合网络组成。ContextNet网络基于RNN-Transducer框架(),一个用于输入语音的音频编码器、一个用于输入标签的标签编码器和一个结合两者的联合网络组成。在我们的方法中,音频编码器被一个基于CNN的编码器所取代,这是我们建议的一个新点。

编码器设计

每个Ck(-)是一个卷积块,由几个卷积层组成,之后是批量归一化和激活函数。它还具有挤压和激励以及跳过连接功能

在对C(-)进行详细描述之前,让我们从C(-)的重要模块开始。

挤压和激发

如上图所示,挤压和激发函数SE(-)对输入的x进行全局平均池化,将其转换为全局信道权重θ(x),然后根据该权重对每一帧进行逐元乘法。每一帧的元素明智的乘法。将这一想法适用于一维情况,我们得到以下方程。

tensorflow中做这件事的代码如下。它非常简单,你肯定应该尝试在你的模型中实现挤压和激发模块。

x_orig = x

x = tf.reduce_sum(x, axis=1) / tf.expand_dims(tf.cast(x_len, tf.float32), 1) # 平均池化

for i in rage(len(num_units))。

x = tf.nn.swish(fc_layers[i][x]))

x = tf.expand_dims(tf.nn.sigmoid(x), 1)

返回 x * x_orig

深度可分离卷积

为了在不牺牲性能的前提下实现更高的参数效率,我们使用深度可分离卷积,而不是单纯的卷积。conv(-)代表深度可分离卷积

顺便说一下,深度可分离卷积MobileNet中使用的一种技术,它以轻量级模型著称,先进行深度卷积(空间方向),然后再进行卷积(通道方向)。这种技术用于MobileNet,它以其轻量级模型而闻名。

使用Tensorflow进行深度卷积的代码如下所示。

Separable1D(filters, kernel_size, strides, padding) conv = tf.keras.layer.

唰的一声激活功能

Act(-)表示激活函数。我们测试了两个激活函数,ReLUSwish,发现Swish的表现更好:Swish的导数比ReLU的更平滑,而ReLU0和1之间是离散的。与ReLU函数相比,Swish函数的导数变化更平稳,因为ReLU函数是在0和1之间离散的,所以训练结果也可能更平稳。

Tensorflow中,这可以通过以下方式实现。

X = tf.nn.swish(x)

卷积块

上述的各个模块可以如上图所示进行组合。而这里是C(-)在第一个方程式中的表示。

其中f^m是叠加的m层f(-),P(-)代表对残差点状投影这一部分的代码如下。

for conv_layer in conv_layers:

x = conv_layer(x)

x = se_layer(x)

x = x + residual(x_orig)

x = tf.nn.swish(x)

渐进式下采样

为了进一步降低计算成本,我们采用渐进式降采样。具体来说,我们通过逐步增加卷积层的步长进行实验,观察参数数量和性能之间的权衡。因此,当对ContextNet进行8倍下采样时,可以获得最佳的权衡结果。

ContextNet的配置细节

ContextNet23个卷积块组成(C0,...,C22),除C0和C22外,其他都有5个卷积层。下图是对架构细节的总结。

这里,全局参数α控制着模型的缩放,增加到α>1将增加卷积通道的数量。

实验结果

上图显示了在Librispeech数据集上测试时的误码率值。同样来自上图。我们可以看到,无论是有还是没有语言模型(LM),ContextNet的表现都超过了其他模型。

在下图中,你也可以看到,挤压和激发模块通过考虑全局背景,大大改善了性能。

最后

在这篇文章中,我们介绍了ContextNet,一个基于CNN的端到端语音识别模型。虽然现在普遍使用变压器,但其计算成本非常高,这使得个人和小公司难以负担。另一方面,如本文所示,基于CNN的变压器可以以相对较低的成本实现,那么为什么不使用挤压-激励和渐进式降采样等技术呢?

  • メルマガ登録(ver
  • ライター
  • エンジニア_大募集!!

如果您对文章内容有任何改进建议等,请通过 "联系我们 "表格与爱学网编辑部联系。
如果您能通过咨询表与我们联系,我们将非常感激。

联系我们