循环神经网络(五)
——Bean搜索、bleu评分与注意力模型
(原创内容,转载请注明来源,谢谢)
一、概述
本文主要讲解机器翻译过程中涉及的算法,主要包括bean搜索算法及其改进与误差分析、bleu计算多种翻译得分、注意力模型及其实际应用等。
二、Bean搜索算法
1、概述
翻译,涉及到编码器与解码器,这个是之前RNN网络解决的问题。但是,存在多种翻译的情况,需要选择一种好的翻译结果。
另外,在图像识别翻译中,通过一张图片返回一句话,如下图,需要CNN网络的输出接入到RNN网络的输入。同样,RNN网络的输出还是有多种表达方式。
另外,语言模型和机器翻译,区别在于语言模型是一个没有输入,仅有网络内部自己的处理。而机器翻译,则带有输入和输出。语言模型有点类似机器翻译的编码器部分。
当一句话翻译成多个结果,需要选择较好的结果。这里不使用最优结果,即贪心搜索算法,主要有两点原因:
1)贪心算法需要每个词的下一个词都是最常用的词,但是这样整句话组起来未必是最通顺的句子,如下面的例子。
2)贪心算法的速度较慢。
2、Bean搜索
不同于贪心算法,bean的核心思想是:每次选择若干个相关性较大的单词作为候选项,依次进行计算概率。再这些概率最高的前几个选择中,再往后选择若干相关性最高的下一个单词。
因此,bean是一个求尽量好结果的算法,而不是求最严格好结果的算法。
算法步骤如下:
1)根据编码器的输入,计算第一个单词输出的概率
这里首先引入一个参数B,这个参数称为bean宽度,下面的例子B=3,即每次都选择相关性最大的前3个单词(而不是贪心算法的1个单词,也可以说B=1时bean算法就变成了贪心算法)。
这里选择出了三个单词,假设为in、jane、September。
2)针对第一步选出来的三个单词,逐个单词去选出可能性最大的3个接下来的单词。
这样一共会选择出9个单词,配对成词组后,由于B=3,因此再筛掉6个,留下三个词组,例如留下的是in September、jane is、jane visits。
这里可以看成,每一步都拷贝3个(B个)神经网络,用于找出B个最可能的结果。
重复上面的步骤,直到句尾,得出目标句。
3、bean优化一——长度归一化
由于计算单词的概率,每多一个单词,需要进行一次乘法。当句子太长,会乘出一个特别小的数字,造成数值下溢。
1)log代替乘法
用log代替乘法,可以解决数值下溢的问题。因为这里每个概率都小于1,而且都比较小,因此log的值都是负的一个比较大的数字。相乘后可以避免数值下溢。
2)均值计算代替最大化
无论是乘法计算最值还是log乘法计算最大值,都存在问题。
乘法时,由于概率都是小于1的,因此乘的越多值越小,因此结果会是一个趋向于短句的翻译;而log乘法时,则乘的越多值越大(绝对值),因此结果是一个趋向于长句的翻译。
因此,这里用乘法求和,并且除以计算的总数量,求得均值。通过比较均值可以得到一个较好的结果。
另外,均值未必是直接除以数量,而是带上一个参数α,如下图公式所示,这样可以控制均值归一化的力度。
4、bean优化二——B的选择
上面的例子是B=3,但实际上B要选多少合适?
当B越大,则每次考虑的较优结果越多,则会得到一个更好的结果;但是其问题是占用的存储更多,而且计算速度更慢。
B较小则有相反的问题,速度快内存少,但是结果不太好。
通常,趋向于10~100即可。
另外,bean搜索和广度优先搜索(BFS)、深度优先搜索(DFS)不同,不是求最优的结果,而是一个相对而言较好的结果。
5、bean误差分析
由于这里网络是用RNN的输出接入Bean,因此当模型不好的时候,需要判断是要调整RNN还是调整bean。
这里假设人的翻译是比较好的,结果是y*。机器翻译不那么好,结果是y^。
分别用现有的RNN网络计算A = p(y*|x) 以及 B = p(y^|x),比较A和B。A>B则是Bean的问题,A<B则是RNN的问题,解释如下:
当A>=B,表示RNN计算人工翻译的结果好于机器翻译的结果,这个比较符合常理,则RNN网络本身没问题,但由于系统有问题,则表明是Bean的问题。反之A<B,说明用现有的RNN网络计算,人工翻译的结果还不如机器翻译的结果(这里假设人工翻译比较好),则不符合常理,说明是RNN的问题。
有多个句子时,可以逐个句子列表,看哪个问题比较大。
三、Bleu评分
1、概述
翻译的结果,可能存在多种,且都是正确的翻译,此时可以引入一个单一评价机制,来选择最优的翻译结果,因此引入了Bleu评分。
2、精度法及其改进
不太好的方法,是精度法,即比较正确的翻译结果,与及其翻译的结果,出现的共同单词的数量,与机器翻译本身单词的数量的比。
这个没考虑到词序,且单词出现一次也是相同的,极端情况下如下图所示,精度达到100%,但是是一个无效的翻译。因此这个方法不好。
可以进行改进,限定同样单词出现的次数,例如the在正确的句子中出现2次,则限定这里最多用2,得到一个结果。
由于这两个比较方式都没有考虑到词序,因此并不是好的评价机制。
3、Bigrams
Bigrams即两个相邻的单词同时和正确结果匹配的次数,比上翻译结果整句话中两两词组的个数。
由于需要两个词完全相等,则考虑到了词序的因素。下面的例子是计算的结果。
具体公式,是推广到所有的单词同时出现的次数。都可以计算概率。
要计算这些概率的总和,可以使用下面combined bleu score的公式。这里引入了一个参数BP,称为简短惩罚,是为了进行纠正机器翻译的结果太短的问题。
当翻译的结果比正确结果长,则BP=1;反之,则为下面的公式。这样可以避免翻译结果太短。
Bleu主要是提供了单一评估指标,以评判多个翻译的结果。有许多开源的库可以使用。
四、注意力模型
1、现有问题
当一个非常长的句子出现,则翻译的时候,机器一次性输入了一大段的文字,再一次性处理结果。这样的话处理结果不好,前面的词语的内容被弱化了。
研究表明,太长的句子,如果不用注意力模型,则随着词语的增多,bleu的评分结果会逐渐降低。而使用注意力模型,则可以保持在一个较高的值。
思想:考虑到人工翻译,如果特别长的句子,也是一小部分一小部分的翻译,而不会一次性读完整句话去翻译。注意力模型就是模拟人工翻译长句的过程。
2、模型
注意力模型,实质上是双向RNN,再加上一个单向的RNN网络。双向RNN每个x对应的输出a,经过一个处理因子c,其再反馈到上层的单向RNN网络,进行翻译处理。
处理因子c,起到的作用,即控制当前字符的翻译,需要考虑到前后字符的数量。
C的计算公式如下,表示注意力集中在前后若干个单词之间。每一个α取决于上一个S以及本层的a。
这里为了便于表达,把双向RNN的两个方向的a,整合成一个a来表示。
本层的a,加上上一层的s,共同作为输入,经过一个神经网络,得到结果成为e,这里就是利用这个e进行RNN传输计算。
3、注意力模型应用一——语音辨识
语音辨识,即通过一段话,来得到说话的内容。这里可以用注意力模型,得到说话发音的每个字母,再进行组合。
也可以通过一种叫做CTC的方式,即通过频率,每秒n次的输出。则这种输出可能会存在重复输出的情况,根据这个输出再进行进一步的处理,如下图所示:
4、注意力模型应用二——触发字控制系统
类似苹果的hi siri,通过一些关键词,得到结果,并且进行后续的处理。
五、总结
经过2个月的学习,终于学完这一轮网易微专业的深度学习,其中各种原因导致学习进度比预计慢了1个月。但是这里还是学完了,感觉对深度学习有了一个总体的了解,以及对各种各样的神经网络的处理优势有了大体的了解。
接下来准备先把tf框架学会,然后看看找一些实战的内容做一下,然后可能会再找一些视频课程学习。大家有好的内容也欢迎推荐~
——written by linhxx 2018.03.30