集束搜索、注意力模型和音频模型
基础模型
序列到序列类型的模型有翻译模型,描述图片模型等。
在一个翻译模型中,需要把一门语言的文字翻译成另外一门语言的文字,如下图把法文翻译成英文
翻译模型使用多对多类型的RNN,前一部分相当于编码器,后一部分相当于解码器。
描述图片的模型如下
该模型使用AlexNet模型对图片进行编码,然后接上RNN模型,输出对该图片的描述。
选择最可能的句子
机器翻译可以当成建立一个条件语言模型。语言模型的结构如下
很像翻译模型的解码器部分。翻译模型就是在输入的是的情况下输出的语言模型。翻译模型要实现
要最大化输出的概率,简单的方法是每个时间步中选择概率最大的单词作为输出,这是贪心选择法。贪心选择法的效果不是很好,翻译出来的句子可能不是最佳的句子,但是贪心选择法是实现概率最大化最简单的方法。
集束搜索
对于翻译模型,你希望输出最好的翻译句子,而不是随机的翻译结果;对于语音识别模型,你希望输出的是最有可能的句子,而不是随机的文本,集束搜索(Beam Search)算法可以帮助你找到最有可能的输出。
在一个法文翻译模型的第一步中,通过softmax计算得到10000个单词的概率
集束搜索算法记录概率最大的前个单词,在这里是”in”,”jane”,”setember”。
然后第二步,分别在第一个输出是”in”,”jane”,”setember”的情况下,计算单词是第二个输出的概率。
例如,当第一个输出是”in”时,把”in”传到下一步中,然后计算。输出的前二项的概率是。
在第二步中,一共有种可能,从这30000种可能中选择最大的前项作为候选项,假设是”in september”,”jane is”和”jane visits”。
接着第三步
如此类推,最后可能输出最佳的翻译结果:”jane visits africa in september.<EOF>”。
当时,集束搜索就变成贪婪搜索。
改进集束搜索
集束搜索的目的是
随着t的增大,概率P会越来越小,所以我们改进一下目标公式,为它添加log函数,变为
但是t越大,其和可以越小,需要对公式进行长度归一化处理
可以取0.7,当,则进行完全长度归一化处理;当,则不进行长度归一化处理。
每计算出新的值,代入上面的公式评估其概率。
对于B值,B值越大,算法就可以得到越好的结果,但是需要更长的时间;B值越小,可能得到越差的结果,但是需要更短的时间。可以从1、3、10、100、1000、3000中选择合适的B值。
集束搜索算法的误差分析
集束搜索算法是一种启发式搜索算法,它不会每次得到有最大可能的输出。当模型出现错误时,通过误差分析,判断是集束搜索算法出错,还是RNN模型有问题。
有一个翻译例子
人翻译的结果是,算法翻译的结果是,为了判断是集束搜索出错,还是RNN错误,把翻译的结果代入到模型的解码器中,然后计算翻译结果的概率。如果,说明集束搜索没有找到最好的翻译结果。如果,说明错误来自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元组,然后进行统计
表示Bleu改良后的n元组得分。
如果有、、和。Bleu得分为
BP为简短惩罚因子。因为输出一个简短的翻译句子更容易得到高分,需要添加BP来调整。
注意力模型的直观理解
使用Bleu的翻译模型有一个问题,随着翻译的句子变长,Bleu得分会降低,如
在添加注意力模型之后,这条曲线不会下降。
注意力模型结构如下
在这个翻译模型中,下面的结构是一个BRNN模型,是编码器,上面的结构是另外一个RNN模型,是解码器。中间连接的部分是注意力权重。在输出第一个单词”jane”时,模型的注意力应该放在输入句子开头的”jane”,这部分的注意力权重要大一些,其他的注意力权重要小一些。接着,在输出”visits”时注意力要集中在输入的”visite”。通过注意力权重,使得翻译模型翻译结果更加准确。
注意力模型
下方编码器的输出使用表示,。定义注意力权重为,表示对的注意力,而且。编码器传给解码器的值为。
注意力权重的计算公式是
通过和得到,映射函数由一个简单的神经网络学习得到。
语音识别
语音识别是把一段语音片段转换成相应的文字。
以前语音识别工作主要对象是音位(组成发音的单位),先把语音转成音位,再识别成文字。现在的计算力大大增加,因此可以直接从语音转成文字,比如使用注意力模型的语言识别模型
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的比例。