文章目录
参考 红石头
一、集束搜索
1.1、背景及使用场景
使用场景:机器会翻译出多条语句,为了让机器翻译最贴合人工翻译,我们就会使用集束搜索。
机器翻译seq2seq:由encoder netword和decoder network组成的网络,输入语句经过encoder网络得到的特征向量,再将特征向量输入decoder网络得到语句。这是一个翻译的过程,可以理解为机器翻译。
知识点的联系:
- 语言模型:利用RNN网络随机生成一条语句。
- 机器翻译:在输入语句的前提下输出语句,因而又叫条件语言模型。
知识点的联系:
- 贪婪搜索:每次找出预测概率最大的一个单词作为当前rnn单元的输出。弊端:并不是单个概率最大的单词所组成的语句就是最优解,举个例子,下面翻译中,第一个结果最准确,但是在机器翻译过程中,如果采用贪婪搜索,第三个单词就会选择going而不是visiting。
- 集束搜索:每次找出预测概率最大的B个单词
1.2、算法思想
核心思想:最大化最优语句的概率,这个概率就是乘积:
P
(
y
<
1
>
,
…
,
y
<
T
y
>
∣
X
)
=
P
(
y
<
1
>
∣
X
)
P
(
y
<
2
>
∣
X
,
y
<
1
>
)
P
(
y
<
3
>
∣
X
,
y
<
1
>
,
y
<
2
>
)
…
P
(
y
<
T
x
>
∣
X
,
y
<
1
>
,
y
<
2
>
,
…
,
y
<
T
y
−
1
>
)
P(y^{<1>},\dots,y^{<T_y>}|X)=P(y^{<1>}|X)P(y^{<2>}|X,y^{<1>})P(y^{<3>}|X,y^{<1>},y^{<2>})\dots P(y^{<T_x>}|X,y^{<1>},y^{<2>},\dots,y^{<T_y-1>})
P(y<1>,…,y<Ty>∣X)=P(y<1>∣X)P(y<2>∣X,y<1>)P(y<3>∣X,y<1>,y<2>)…P(y<Tx>∣X,y<1>,y<2>,…,y<Ty−1>)
步骤:
首先,从词汇表中找出翻译的第一个单词概率最大的B=3个预测单词,在这个例子中,预测的第一个单词为:in,jane,september。
然后,再分别以in,jane,september为条件,计算每个词汇表单词作为预测第二个单词的概率,in后面会有三个最优选择,同理可得,jane、september也会有三个最优选择,这样就有9条语句,然后计算前两个单词的整体概率,在9条语句中选择概率最大的3个语句,得到:in september,jane is,jane visits。
以此类推得到整个句子。
1.3、改进、优化
背景:
采用集束搜索的机器翻译是最大化最优语句的概率,其形式为:
a
r
g
m
a
x
∏
t
=
1
T
y
P
(
y
^
<
t
>
∣
x
,
y
^
<
1
>
,
…
,
y
^
<
t
−
1
>
)
argmax \prod_{t=1}^{T_y}P(\hat y^{<t>}|x,\hat y^{<1>}, \dots,\hat y^{<t-1>})
argmaxt=1∏TyP(y^<t>∣x,y^<1>,…,y^<t−1>)
由上式可以看出,多个概率相乘可能会使乘积结果很小,远小于1,容易造成数值下溢,为了使数据更加稳定有效,可以对乘积形式取对数log运算,log是单调函数,并不会影响概率的极值。
知识点的联系:
联系到梯度消失,因为激活函数sigmad会让函数值在0-1之间,再对sigmad函数求偏导,其值在0-0.25之间,在后向传播的过程中,函数求偏导再相乘再跟新参数,在相乘的过程中,乘以无数多个小于1的数,会使乘积结果很小,这样就对参数w和b的影响变小。
1、取log
将乘积转化为求和形式,避免了数值下溢,使数据更加稳定有效。
缺点:机器翻译的单词越多,乘积形式或者求和形式得到的概率就越小,这样机器翻译就会不自觉的选择短的句子作为翻译的结果。
2、长度归一化
为了解决机器翻译不自觉选择短句子作为结果,我们不再追求最大化最优语句的概率,而是归一化最优语句的概率,通过除以翻译结果的单词数量,取每个单词的概率对数值的平均。
a
r
g
m
a
x
1
T
y
∑
t
=
1
T
y
P
(
y
^
<
t
>
∣
x
,
y
^
<
1
>
,
…
,
y
^
<
t
−
1
>
)
arg max \frac{1}{T_y} \sum_{t=1}^{T_y}P(\hat y^{<t>}|x,\hat y^{<1>},\dots,\hat y^{<t-1>})
argmaxTy1t=1∑TyP(y^<t>∣x,y^<1>,…,y^<t−1>)
实际应用中,会引入归一化因子
α
\alpha
α:
a
r
g
m
a
x
1
T
y
α
∑
t
=
1
T
y
P
(
y
^
<
t
>
∣
x
,
y
^
<
1
>
,
…
,
y
^
<
t
−
1
>
)
arg max \frac{1}{T_y^{\alpha}} \sum_{t=1}^{T_y}P(\hat y^{<t>}|x,\hat y^{<1>},\dots,\hat y^{<t-1>})
argmaxTyα1t=1∑TyP(y^<t>∣x,y^<1>,…,y^<t−1>)
若
α
\alpha
α=1,则完全进行长度归一化,若
α
\alpha
α=0,则不进行长度归一化,一般令
α
\alpha
α=0.7,效果较佳。
疑问:为何做归一化就能让机器翻译不再倾向选择较短的句子作为结果?使用了什么数学思维呢?
解答:例如,两个变量就是两个维度,看作xy轴,如果不进行归一化,假如x的取值区间很长,y取值区间很短,则在坐标轴中的图是一个椭圆,不利于梯度下降,这时候使用长度归一化,那么在坐标轴中的图类似正圆,就很容易进行梯度下降来获取最优值,如下图所示:
1.4、误差分析
因为机器翻译是由两部分组成:RNN+集束搜索,为了确定是那个部分出错,就需要进行误差分析。
假设人工翻译的结果为
y
∗
y^*
y∗,机器翻译的结果为
y
^
\hat y
y^,将输入语句输入到RNN模型中,分别计算输出
y
∗
y^*
y∗的概率
P
(
y
∗
∣
x
)
P(y^*|x)
P(y∗∣x)和
y
^
\hat y
y^的概率
P
(
y
^
∣
x
)
P(\hat y|x)
P(y^∣x),接下来就是比较
P
(
y
∗
∣
x
)
P(y^*|x)
P(y∗∣x)和
P
(
y
^
∣
x
)
P(\hat y|x)
P(y^∣x)的大小。
- P ( y ∗ ∣ x ) P(y^*|x) P(y∗∣x)> P ( y ^ ∣ x ) P(\hat y|x) P(y^∣x):集束搜索算法有误
- P ( y ∗ ∣ x ) P(y^*|x) P(y∗∣x)< P ( y ^ ∣ x ) P(\hat y|x) P(y^∣x):RNN模型有误
Jane visite l’Afrique en septembre.
Human: Jane visits Africa in September.
y
∗
y^*
y∗
Algorithm: Jane visited Africa last September.
y
^
\hat y
y^
若RNN表现不好,可以正则化、增加网络层数、增加训练样本数目等等进行优化;
若集束搜索表现不好,可以修改调试参数B。
二、机器翻译评判标准–bleu得分
1、使用场景:为了让机器翻译结果接近参考的人工翻译,使其得分越高,使用bleu score,对机器翻译进行打分。
2、原理:看机器翻译的各个单词是否出现在参考翻译中。
人
工
翻
译
次
数
机
器
翻
译
次
数
\frac{人工翻译次数}{机器翻译次数}
机器翻译次数人工翻译次数
3、步骤:
首先,对原语句建立人工翻译参考,一般有多个人工翻译,最简单的评价方式:看机器翻译的每个单词是否出现在参考翻译中,在下图例子中,每个单词都出现在参考翻译里,准确率为
7
7
=
1
\frac{7}{7}=1
77=1,其中,分母是机器翻译单词数目,分子是相应单词是否出现在人工翻译中,但这个方法不合理。
French: Le chat est sur le tapis.
Reference 1: The cat is on the mat.
Reference 2: There is a cat on the mat.
MT output: the the the the the the the.
另外一种评价方式:看机器翻译单词出现在人工翻译单个语句中的次数,取最大次数。上例中准确率为
2
7
=
1
\frac{2}{7}=1
72=1,the出现在参考1的次数为2,出现在参考2的次数为1,因此分子取最大次数2,分母是机器翻译单词数目。
另外一种更科学的打分方法是:bleu score on bigrams,即同时对两个连续单词进行打分。
用下面的例子,得到bigrams及其出现在机器翻译中的次数count为:
the cat:2
cat the:1
cat on:1
on the:1
the mat:1
得到bigrams及其出现在人工翻译中的最大次数
c
o
u
n
t
c
l
i
p
count_{clip}
countclip为:
the cat:1
cat the:0
cat on:1
on the:1
the mat:1
相应的bigrams precision为:
c
o
u
n
t
c
l
i
p
c
o
u
n
t
=
1
+
0
+
1
+
1
+
1
+
1
2
+
1
+
1
+
1
+
1
=
4
6
=
2
3
\frac{count_{clip}}{count}=\frac{1+0+1+1+1+1}{2+1+1+1+1}=\frac{4}{6}=\frac{2}{3}
countcountclip=2+1+1+1+11+0+1+1+1+1=64=32
French: Le chat est sur le tapis.
Reference 1: The cat is on the mat.
Reference 2: There is a cat on the mat.
MT output: The cat the cat on the mat.
总结:
- 如果只看单个单词,相应的unigrams precision为:
- 如果是n个连续单词,相应的n-grams precison为:
可以同时计算 p 1 , … , p n p_1,\dots,p_n p1,…,pn,再对其求平均:
p = 1 n ∑ i = 1 n p i p=\frac{1}{n} \sum_{i=1}^{n}p_i p=n1i=1∑npi。
通常,对上式进行指数处理,并引入参数因子brevity penalty,记为bp,引入bp是为了惩罚机器翻译语句过短而造成的得分虚高的情况–(具体化:如果机器翻译较短的句子,上式中分母变小,整体值会变大)。
p = B P e x p ( 1 n ∑ i = 1 n p i ) p = BP exp(\frac{1}{n} \sum_{i=1}^{n}p_i) p=BPexp(n1i=1∑npi)
其中,BP值由机器翻译长度和参考翻译长度共同决定。
三、注意力模型
3.1、背景–局部聚焦
一次性对整个句子进行翻译,效果不佳,并且在长语句中bleu score会变低,因而引入注意力模型,将长语句分段,每次只对长语句的一部分进行翻译,从而翻译整个语句。
3.2、算法思路
抽象来说,有三步。第一步,在encoder阶段用BRNN得到前后向激活值,在此基础上提炼得到每个单元的激活值
a
<
t
>
a^{<t>}
a<t>;第二步,对于多对多的encoder-decoder模型来说,我们会匹配两个网络的对应位置激活值,再通过一个小的cnn网络得到softmax多分类的概率值,
c
<
t
>
c^{<t>}
c<t>是概率值与对应位置的激活值相乘再加权;第三步:将
c
<
t
>
c^{<t>}
c<t>和上一个单元的输出作为decoder网络当前单元的输入,得到结果。