循环神经网络(五)——Bean搜索、bleu评分与注意力模型

循环神经网络(五)

——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

当A>=B,表示RNN计算人工翻译的结果好于机器翻译的结果,这个比较符合常理,则RNN网络本身没问题,但由于系统有问题,则表明是Bean的问题。反之A

有多个句子时,可以逐个句子列表,看哪个问题比较大。

三、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

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180330G0N7ZU00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券