序列模型和注意力机制
seq2seq(sequence to sequence)模型
集束搜索(Beam search)
注意力模型(Attention Model)
seq2seq
- 首先建立 encoder network,是一个 RNN 结构,RNN 的单元可以是 GRU,也可以是 LSTM,RNN 网络会输出一个向量来代表这个输入序列。
- 建立 decoder network,它以 encode network 的输出作为输入,每次输出一个翻译后的单词。
集束搜索
基本的集束搜索
改进集束搜索(Refinements to Beam Search):长度归一化(Length normalization)
目标函数有一个缺点,它可能不自然地倾向于简短的翻译结果,它更偏向短的输出,因为短句子的概率是由更少数量的小于 1 的数字乘积得到的,所以这个乘积不会那么小。
乘积概率:很多小于 1的数乘起来,会得到很小很小的数字,会造成数值下溢(numerical underflow)。数值下溢就是数值太小了,导致电脑的浮点表示不能精确地储存。(记录概率的对数和(the sum of logs of the probabilities),而不是概率的乘积(the production of probabilities)。)
归一化,通过除以翻译结果的单词数量(normalize this by the number
of words in your translation)。这样就是取每个单词的概率对数值的平均了,这样很明显地减少了对输出长的结果的惩罚(this significantly reduces the penalty for outputting longer translations.)。
在实践中,有个探索性的方法,相比于直接除,也就是输出句子的单词总数,我们有时会用一个更柔和的方法(a softer approach),在上加上指数,可以等于 0.7。如果等于 1,就相当于完全用长度来归一化,如果等于 0,的 0 次幂就是 1,就相当于完全没有归一化,这就是在完全归一化和没有归一化之间。就是算法另一个超参数(hyper parameter),需要调整大小来得到最好的结果。
归一化的对数似然目标函数(a normalized log likelihood objective)。
如何选择束宽 B
- 如果束宽很大,你会考虑很多的可能,你会得到一个更好的结果,因为你要考虑
很多的选择,但是算法会运行的慢一些,内存占用也会增大,计算起来会慢一点。 - 如果你用小的束宽,结果会没那么好,因为你在算法运行中,保存的选择更少,但是你的算法运行的更快,内存占用也小。
- 在产品中,经常可以看到把束宽设到 10
集束搜索的误差分析
束搜索算法是一种近似搜索算法,也被称作启发式搜索算法(a heuristic search algorithm),它不总是输出可能性最大的句子,它仅记录着 B 为前 3 或者 10 或是 100 种可能。
你的模型有两个主要部分,一个是神经网络模型,或说是序列到序列模型(sequence to sequence model),我们将这个称作是 RNN 模型,它实际上是个编码器和解码器( an encoder and a decoder)。另一部分是束搜索算法,以某个集束宽度 B 运行。
- RNN 模型的输出结果(∗|) 大于(^ |),束搜索算法的任务就是寻找一个的值来使这项更大,但是它却选择了,而∗实际上能得到更大的值。这种情况下你能够得出是束搜索算法出错了第二种情况是(∗|)小于或等于( |)
- (∗|)小于或等于(^ |),∗ 是比 ^更好的翻译结果,不过根据 RNN 模型的结果,(∗) 是小于(^)的,是 RNN 模型出了问题。
只有当你发现是束搜索算法造成了大部分错误时,才值得花费努力增大集束宽度。相反地,如果你发现是 RNN 模型出了更多错,那么你可以进行更深层次的分析,来决定是需要增加正则化还是获取更多的训练数据,抑或是尝试一个不同的网络结构,或是其他方案。
Bleu 得分
BLEU 代表 bilingual evaluation understudy (双语评估替补)
怎样评估一个机器翻译系统?——BLEU 得分(the BLEU score)
BLEU 得分做的就是,给定一个机器生成的翻译,它能够自动地计算一个分数来
衡量机器翻译的好坏