摘要

        作者展示了一种语音识别神经网络Listen, Attend and Spell。listen为一个金字塔形的RNN encoder网络,将声音信号的filter bank特征作为输入,speller为一个基于attention机制的RNN decoder网络,将文字字符作为输出。本网络不包含发音字典或者语言模型,在Google 语音搜索人物志,获得了14.1%的WER,使用语言模型进行rescore则WER为10.3%.

模型结构:

模型输入:语音信号的滤波器组特征x = (x1, ..... , xT )

输出:英语字符。y = (<sos>, y1, ... , yS, <eos>) yi 为26个英文字母加10个数字加一下空格,逗号,句号,unk标志。

        模型通过链式法则求下列函数,即给定输入语音序列,输出字符序列的概率

        模型包含两部分listener和speller。如下图所示:

        listener通过对声学特征编码为短的高级别声音特征序列h;

        speller包含attend和spell,计算h到y的概率分布。

下面介绍模型的具体模块

1.Listen

        listen使用双向LSTM金字塔结构。将上百万长度的初始声音序列转化为高级别的短的声音序列,即抽取声音特征。一方面,相对直接输入原始声音序列,可以大大加快训练时间,另一方面spller很难从特别长的序列提取有用的声音特征。

        该金字塔结构包含三层,每层递减2倍(文章说减少了8倍,我觉得只减少了4倍,或者肯可能实际有4层?不是很理解)。该结构第j层第i时刻的BLSTM单元要接收本层上一时刻的和上一层第2i时刻与第2i+1时刻的输入。具体公式如下。或者参考结构图很好理解。

2.Attend and Spell

包含三个步骤。

2.1计算decoder当前时刻的状态si。由上一时刻的状态si-1,上一时刻的输出yi-1,上一时刻的上下文(context)ci-1计算得出。

2.2 计算当前时刻的上下文向量(context)Ci,由当前时刻的状态由当前时刻的 状态和高级声音特征h计算得出:

        具体细节是这样的,该向量是基于attention机制计算来的。所以遵循attention的计算过程。如下图所示(图中的a即公式中的h,来源于吴恩达老师的课件):

        首先由s和h通过神经网络计算能量ei,在经过softmax计算每一时刻的权重系数α,i时刻上下文向量由所有时刻的α和h乘积求和得到。公式如下:

2.3计算概率分布

通过两层RNN网络,经过softmax计算每一时刻某个字符的分布概率:

3.learning

        Listen and Attend Spell可以看成一种encoder-decoder结构的端对端语音识别。

        训练时,目标函数为最大对数似然估计:第i时刻的预测依赖于前面所有时刻的预测输出。

         test时,由于没有label,所以没有前面时刻的正确输出,这导致有的时候预测的结果很差。为了改善这种情况,作者采用了一个trick, 训练的时候,前面时刻并不全部使用label数据,,采用10%的采样率从训练的结果进行采样,用于预测下一时刻的输出。

        作者通过研究发现,该结构不需要使用预训练,预训练不能提高本模型的识别结果。

4.decoding and rescoring

        语音识别即得到给的属于语音序列,输出最大可能性字符序列:

        所以decoding为一种从左到右的束搜索算法(beam search)。保持束宽不变,从<SOS>标记开始搜索,直到遇到<EOS>标记搜索结束。

        实际上我们拥有大量的文本数据,语音数据有限,所以可以使用语言模型对搜索束进行rescore。作者发现该模型对于短语音欠拟合,所以通过字符长度进行正则化,同时加入语言模型的对数概率。最终的概率计算结果如下:权重系数λ由验证集决定。

        总结:本文是一种基于attention机制的encoder-decoder语音识别模型。encoder结构中的金字塔结构抽取语音序列的特征,类似于CNN特性,decoder通过attention机制进行束搜索解码。

        本文作者在斯坦福大学进行了介绍本文。链接如下https://www.bilibili.com/video/av24307355?from=search&seid=110276919349787109

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐