一、机器翻译
1.1 基于规则
1950年代由于冷战,研发了最早的基于规则的机器翻译系统:俄语2英语
1.2 基于概率(statistical)统计(SMT)
1990s-2010s: 基于概率统计的机器翻译系统。
例如我们需要将法语的句子x翻译为英语句子y, 任务描述如下
由于源语言x序列确定,使用贝叶斯公式将该规则拆分为两个独立的部分,拆分工作便于模型训练效果提升:
其中为从双语对照数据学习到的翻译模型,为从目标语言学习到的语言模型,决定目标语言流畅度。
1.2.1 P(x|y)的学习
- 需要大量源语言-目标语言数据对
- 任务进一步拆分,考虑学习P(x, a|y), a为alignment,即语言对齐作为一个指标单独考虑
- alignment:两种语言句子词素之间的对应关系,有一对多、多对一、多对多、顺序混乱等多种复杂的可能
- 代表了多个目标任务:(a)某个位置的特定词的对齐 (b)某个词的译文…
- 使用启发式搜索最佳译文,优良的SMT还有非常多的细节,十分复杂,例如复杂的特征工程、借助同义词短语表等。(课程介绍也比较模糊)
1.3 神经网络机器翻译(NMT)
1.3.1 seq2seq结构
用来输入一段序列生成另一段序列的网络架构称为seq2seq, 一般有两个RNN。先来看这张图,信息量很丰富。
总结一下上面图中的信息:
- 两个RNN分别处理源语言与目标语言,当然也需要两个Embedding
- 源语言和目标语言分别对应的是encoder、decoder
- encoder负责对源语言编码,并将编码结果提供给decoder作为其初始状态。
- decoder是一个语言模型,负责带条件的语言生成。
seq2seq除了能用来翻译,还能干很多事:
- 摘要
- 对话
- 文档解析
- 代码生成
- …
1.3.2 seq2seq模型训练
seq2seq的decoder是一个条件语言模型,预测,其中x为源语言句子。
训练原理如下:
- 训练阶段,time-steps的数目不固定,一般来说是每个batch中最长序列的长度(也可以固定序列为一个较大值,使用padding填充)
- decoder不会因为提前预测到<end>导致loss计算出问题,因为在预测阶段,预测到表示这句话结束,而训练阶段,如果使用那就是在固定长度下计算loss,这当然ok, 而使用变长序列的话,在decoder的hidden中传递的是向量,即使该向量对应的是符号,也仍然可以往后传递,loss计算以训练集样本y的长度来确定。
1.3.3 贪心解码
贪心是指每一步都寻找当前最接近的答案。这里decoder计算是这样的,利用上一步的argmax的词向量作为下一个的输入,而不是直接用。这么做的缺点是,在每个词上先进行了argmax, 这并不一定是整个句子的argmax。
由于decoder贪心解码的缺点是由于没有回退撤销,我们对它进行改进
1.3.4 穷举(exhaustive)搜索解码
根据公式1.3.2, 如果每一步都考虑所有可能序列的概率,那就是复杂度,复杂度太高了。
1.3.5 启发式搜索方法:Beam Search
beam search是以上两种办法的折中,即在第t步保留前k(一般为4-5)个高概率的可能序列。以k=2为例的一个搜索过程如图:
终止条件:由于在测试阶段,表示结束,而使用beam search会导致一些不通长度的预测序列。终止规则如下:1. 设置非固定最大长度T。 2. 设置当有n个搜索结果达到时。
为了平衡不通长度结果的评分,使用如下评分函数:
1.3.6 NMT优势与缺点
优势:
- 翻译更流畅、更好的利用上下文、更少的人力投入,端到端,一个框架多种语言
缺点:
- 不可解释、不好debug,不可预测
- 难以控制,比如一些很明显的语言短语映射规则,不能直接规定
1.3.7 模型验证
BLEU(bilingual evalution understudy): 比较机器翻译结果和人类翻译结果如下相似度指标:
- n-gram准确率
- 对太短的机器翻译结果增加惩罚
BLEU缺点:
- 一种语言可以有多种翻译,一个好的翻译模型可能获得较低分数
1.3.8 NMT发展史及现存问题
- 2014年提出seq2seq, 2016年google将SMT换为NMT
- 几百人历时数十年研发的SMT, 比不过几个人几个月训练的NMT
待解决问题:
- 词汇表中没有的词的处理
- 训练集与测试集领域不匹配时,表现较差
- 在长文本中维持context
- 某些语言缺少训练数据
- 不可解释性的系统奇怪举止:
二、Attention
2.1 Attention结构
2.1.1 预备知识
- RNN结构、前向反向传播
- seq2seq
2.1.2 朴素seq2seq的缺点
- 原始的seq2seq, encoder从一开始的每一个time-step的信息都可能会丢失,无法有效传播到decoder的对应位置。
- encoder只有最后一个状态传到decoder,大量信息损失
2.1.3 dot-product Attention计算方式
如下图,在seq2seq的基础上:
- 有encoder的hidden向量
- 对于decoder每个step有hidden向量
- 通过点击计算注意力分数:
- 使用softmax将分数转换为注意力权重:(在attention论文中提出还要乘以缩放因子,避免因维度过大导致分数太大,使得softmax函数梯度太小)
- 对encoder的hidden向量加权求和:
- 将与拼接作为decoder输出。
- 在decoder的设计中,有时候会将前一个time-step的attention作为当前这一步的输入之一。
decoder
扩展: Attention论文中对该结构的解释用到了Q(query), K(key), V(value),其中Q对应这里的decoder的hidden向量, K和V对应encoder的hidden向量。直观理解就是将每一个decoder的时间不作为一个查询,通过encoder计算得到输出向量,这个向量包含了整个encoder的加权信息。
其他Attention
点积attention是计算代价最小的一种,它要求和维度相同,如果维度不同怎么办呢?有了前面的基础,应该能想到:
-
multiplicative Attention
-
addictive attention, 这里是模型参数,它的维度是一个超参数。
这两种Attention都引入了新的模型参数,学习能力比dot-product更强(但个人觉得attention的瓶颈是加权求和会损失信息,因此引入更多参数的意义似乎不大)