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

基础模型

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

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

描述图片的模型如下
描述图片模型
该模型使用AlexNet模型对图片进行编码,然后接上RNN模型,输出对该图片的描述。

选择最可能的句子

机器翻译可以当成建立一个条件语言模型。语言模型的结构如下
语言模型结构
很像翻译模型的解码器部分。翻译模型就是在输入的是 x<1>,,x<Ty> x < 1 > , ⋯ , x < T y > 的情况下输出 y<1>,,y<Ty> y < 1 > , ⋯ , y < T y > 的语言模型。翻译模型要实现

argmaxyP(y<1>,,y<Ty>|x) a r g m a x y P ( y < 1 > , ⋯ , y < T y > | x )

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

集束搜索

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

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

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

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

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

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

改进集束搜索

集束搜索的目的是

argmaxyΠTyt=1p(y<t>|x,y<1>,,y<t1>) a r g m a x y Π t = 1 T y p ( y < t > | x , y < 1 > , ⋯ , y < t − 1 > )

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

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

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

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

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

集束搜索算法的误差分析

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

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

整个误差分析过程分析翻译错误的样本
集束搜索算法误差分析2
统计错误的主要原因是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 cat2
cat the1
cat on1
on the1
the mat1

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

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

Pn=n-gramy^countclip(n-gram)n-gramy^count(n-gram) P n = ∑ n-gram ∈ y ^ count clip ( n-gram ) ∑ n-gram ∈ y ^ count ( n-gram )

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

如果有 P1 P 1 P2 P 2 P3 P 3 P4 P 4 。Bleu得分为

BPexp(14n=14pn) B P ∗ e x p ( 1 4 ∑ n = 1 4 p n )

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

注意力模型的直观理解

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

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

注意力模型

注意力模型
下方编码器的输出使用 a<t> a < t ′ > 表示, a<t>=(a<t>,a<t>) a < t ′ > = ( a → < t ′ > , a ← < t ′ > ) 。定义注意力权重为 α<t,t> α < t , t ′ > ,表示 y<t> y < t > a<t> a < t ′ > 的注意力,而且 tα<t,t>=1 ∑ t ′ α < t , t ′ > = 1 。编码器传给解码器的值为 c<t>=tα<t,t>a<t> c < t > = ∑ t ′ α < t , t ′ > a < t ′ >

注意力权重的计算公式是

α<t,t>=exp(e<t,t>)Txt=1exp(e<t,t>) α < t , t ′ > = e x p ( e < t , t ′ > ) ∑ t ′ = 1 T x e x p ( e < t , t ′ > )

e<t,t> e < t , t ′ > 通过 s<t1> s < t − 1 > a<t> a < t ′ > 得到,映射函数由一个简单的神经网络学习得到。
学习e<t,t'>的神经网络

语音识别

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

触发字检测

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值