集束搜索、注意力模型和音频模型

基础模型

序列到序列类型的模型有翻译模型,描述图片模型等。

在一个翻译模型中,需要把一门语言的文字翻译成另外一门语言的文字,如下图把法文翻译成英文
集束搜索、注意力模型和音频模型
翻译模型使用多对多类型的RNN,前一部分相当于编码器,后一部分相当于解码器。

描述图片的模型如下
集束搜索、注意力模型和音频模型
该模型使用AlexNet模型对图片进行编码,然后接上RNN模型,输出对该图片的描述。

选择最可能的句子

机器翻译可以当成建立一个条件语言模型。语言模型的结构如下
集束搜索、注意力模型和音频模型
很像翻译模型的解码器部分。翻译模型就是在输入的是x<1>,,x<Ty>的情况下输出y<1>,,y<Ty>的语言模型。翻译模型要实现

argmaxyP(y<1>,,y<Ty>|x)

要最大化输出的概率,简单的方法是每个时间步中选择概率最大的单词作为输出,这是贪心选择法。贪心选择法的效果不是很好,翻译出来的句子可能不是最佳的句子,但是贪心选择法是实现概率最大化最简单的方法。

集束搜索

对于翻译模型,你希望输出最好的翻译句子,而不是随机的翻译结果;对于语音识别模型,你希望输出的是最有可能的句子,而不是随机的文本,集束搜索(Beam Search)算法可以帮助你找到最有可能的输出。

在一个法文翻译模型的第一步中,通过softmax计算得到10000个单词的概率
集束搜索、注意力模型和音频模型
集束搜索算法记录概率最大的前B=3个单词,在这里是”in”,”jane”,”setember”。

然后第二步,分别在第一个输出是”in”,”jane”,”setember”的情况下,计算单词是第二个输出的概率。
集束搜索、注意力模型和音频模型
例如,当第一个输出是”in”时,把”in”传到下一步中,然后计算P(y<2>|x,"in")。输出的前二项的概率是P(y<1>,y<2>|x)=P(y<1>|x)P(y<2>|x,y<1>)

在第二步中,一共有B10000=30000种可能,从这30000种可能中选择P(y<1>,y<2>|x)最大的前B=3项作为候选项,假设是”in september”,”jane is”和”jane visits”。

接着第三步
集束搜索、注意力模型和音频模型
如此类推,最后可能输出最佳的翻译结果:”jane visits africa in september.<EOF>”。

B=1时,集束搜索就变成贪婪搜索。

改进集束搜索

集束搜索的目的是

argmaxyΠt=1Typ(y<t>|x,y<1>,,y<t1>)

随着t的增大,概率P会越来越小,所以我们改进一下目标公式,为它添加log函数,变为
argmaxyt=1Tylogp(y<t>|x,y<1>,,y<t1>)

但是t越大,其和可以越小,需要对公式进行长度归一化处理
1Tαt=1Tylogp(y<t>|x,y<1>,,y<t1>)

α可以取0.7,当α=1,则进行完全长度归一化处理;当α=0,则不进行长度归一化处理。

每计算出新的y<t>值,代入上面的公式评估其概率。

对于B值,B值越大,算法就可以得到越好的结果,但是需要更长的时间;B值越小,可能得到越差的结果,但是需要更短的时间。可以从1、3、10、100、1000、3000中选择合适的B值。

集束搜索算法的误差分析

集束搜索算法是一种启发式搜索算法,它不会每次得到有最大可能的输出。当模型出现错误时,通过误差分析,判断是集束搜索算法出错,还是RNN模型有问题。

有一个翻译例子
集束搜索、注意力模型和音频模型
人翻译的结果是y,算法翻译的结果是y^,为了判断是集束搜索出错,还是RNN错误,把翻译的结果代入到模型的解码器中,然后计算翻译结果的概率。如果P(y|x)>P(y^|x),说明集束搜索没有找到最好的翻译结果。如果P(y|x)P(y^|x),说明错误来自RNN模型。

整个误差分析过程分析翻译错误的样本
集束搜索、注意力模型和音频模型
统计错误的主要原因是RNN还是集束搜索。

Bleu得分

机器翻译的一个问题是对于同样一句话,翻译结果有许多种,而且每一种翻译结果都是很合适的,这时候该如何衡量算法的准确性呢?答案是使用Bleu(双语评估替补,bilingual evaluation understudy)得分。

假设有一句法文:”Le chat est sur le tapis.”。
参考翻译1是:”The cat is on the mat.”。
参考翻译2是:”There is a cat on the mat.”。
机器翻译的结果和上面参考翻译的结果要足够接近。

假设机器翻译的结果是:”the the the the the the the”。

计算一元组的Bleu得分。如果翻译的单词在参考翻译中出现,则单词得分为1。上面的机器翻译的得分是7/7。这样显然不对。

改良后,为每个单词设置一个得分上限,比如”the”在参考翻译1中出现2次,在参考翻译2中出现1次,则”the”的得分上限是2。上面的机器翻译的得分是2/7。

计算二元组的Bleu得分。两个单词组合在一起为二元组。假设机器翻译的结果是:”The cat the cat on the mat.”。统计二元组出现的次数:

机器翻译 参考翻译(带上限)
the cat 2
cat the 1
cat on 1
on the 1
the mat 1

最后二元组得分为4/6。

对于n元组,同样对翻译的结果划分为n元组,然后进行统计

Pn=n-gramy^countclip(n-gram)n-gramy^count(n-gram)

Pn表示Bleu改良后的n元组得分。

如果有P1P2P3P4。Bleu得分为

BPexp(14n=14pn)

BP为简短惩罚因子。因为输出一个简短的翻译句子更容易得到高分,需要添加BP来调整。
BP={1if MT output length>reference output lengthexp(1MT output length/reference output length)otherwise

注意力模型的直观理解

使用Bleu的翻译模型有一个问题,随着翻译的句子变长,Bleu得分会降低,如
集束搜索、注意力模型和音频模型
在添加注意力模型之后,这条曲线不会下降。

注意力模型结构如下
集束搜索、注意力模型和音频模型
在这个翻译模型中,下面的结构是一个BRNN模型,是编码器,上面的结构是另外一个RNN模型,是解码器。中间连接的部分是注意力权重。在输出第一个单词”jane”时,模型的注意力应该放在输入句子开头的”jane”,这部分的注意力权重要大一些,其他的注意力权重要小一些。接着,在输出”visits”时注意力要集中在输入的”visite”。通过注意力权重,使得翻译模型翻译结果更加准确。

注意力模型

集束搜索、注意力模型和音频模型
下方编码器的输出使用a<t>表示,a<t>=(a<t>,a<t>)。定义注意力权重为α<t,t>,表示y<t>a<t>的注意力,而且tα<t,t>=1。编码器传给解码器的值为c<t>=tα<t,t>a<t>

注意力权重的计算公式是

α<t,t>=exp(e<t,t>)t=1Txexp(e<t,t>)

e<t,t>通过s<t1>a<t>得到,映射函数由一个简单的神经网络学习得到。
集束搜索、注意力模型和音频模型

语音识别

语音识别是把一段语音片段转换成相应的文字。
集束搜索、注意力模型和音频模型
以前语音识别工作主要对象是音位(组成发音的单位),先把语音转成音位,再识别成文字。现在的计算力大大增加,因此可以直接从语音转成文字,比如使用注意力模型的语言识别模型
集束搜索、注意力模型和音频模型
CTC(Connectionist temporal classification)损失函数应用在语音识别模型上效果也不错。
集束搜索、注意力模型和音频模型
在识别音频片段”the quick brown fox”中,RNN模型输出”ttt_h_eee___ ___qqq__ …”,”_”表示空白,然后把重复的字符折叠起来”the quick …”,这就是使用CTC损失函数的识别过程。

触发字检测

现在有智能音箱产品,只要设置好触发字,或者说唤醒词,你就可以与智能音箱进行语言互动。那么智能音箱是如何检测到触发字呢?触发字检测使用的模型也是RNN
集束搜索、注意力模型和音频模型
把音频片段输入到RNN中,当检测到某个触发字时,输出1,没有检测到触发字就输出0。考虑到输出的1和0比例不平衡,可以在输出1之后持续输出几个1,稍微调整一下1和0的比例。