这是CMU的助理教授Graham Neubig的一篇tutorial的翻译,原文来自Neural Machine Translation and Sequence-to-sequence Models: A Tutorial。本文只取其中重要部分,略掉习题和高级领域。
2 统计机器翻译
任何翻译系统都可以定义成一个函数,输入是原句,输出是一个翻译假设。统计机器翻译系统是用给定原句下译句的概率分布来进行翻译的系统。找到最大的译句,使得条件概率最大。模型的参数由平行语料库习得。
为了创建一个好的翻译系统,有三个主要问题需要解决:
- 建模:模型长什么样子,有什么参数,参数如何确立概率分布。
- 学习:从训练数据学习参数取值。
- 搜索:最后我们需要寻找最有可能的译句。这个过程通常叫解码。
3 n元语言模型
语言模型是句子的概率分布,机器翻译中需要目标语言的语言模型。语音模型有两个用处:
- 评估自然程度:给定一个句子,语言模型可以分辨这个句子多大程度上是这个语言的自然句。
- 产生文本:根据语言模型的概率分布随机生成文本,这可以告诉我们语言模型“认为”什么是自然句。
解读:关于n元语言模型,可以看我的另一篇文章 N元语言模型。
3.1 逐词计算概率
我们感兴趣的是计算一个句子 E=eT1 的概率:
P(E)=P(|E|=T,eT1)
句子长度是 |E|=T ,第一个词是 e1 ,第 T 个词是eT 。一个句子的概率,可以由单词的条件联合概率求出:
P(E)=∏t=1T+1P(et⎪et−11)
在这里 eT+1=</s> ,表示句尾。语言模型问题就变成了给定一个词计数下一个词的个数的问题。
3.2 基于计数的n元语言模型
PML(et⎪et−11)=cprefix(et1)cprefix(et−11)
这个式子表示在前 t−1 个词的条件下,第 t 个词的概率。cprefix(.) 是这个分句出现在句首的次数。这个方法叫做极大似然估计(MLE)。然而,对于未出现在训练数据的句子,概率模型会得到0。为了解决这个问题,我们设置一个移动窗口,把条件概率链式法则简化成固定长度的链式法则:
P(et⎪et−11)≈PML(et⎪et−1t−n+1)
经过这种简化的语言模型就叫做n元语言模型。
解读:n元语言模型在计算条件概率的时候往前看 n−1 个词,比如二元语言模型就往前看一个词。记概率分布为A,数据为B。A对B的似然表示“A有多大可能生成B,B有多大可能是由A生成的”。记两个事件分别为C,D。C在D条件下的概率等于D对于C的似然。
n元语言模型的参数 θ 由所有条件概率(某个单词给定前 n−1 个单词条件下的概率)组成:
θett−n+1=P(et⎪et−1t−n+1)
参数可由极大似然估计求得:
θett−n+1=PML(et⎪et−1t−n+1)=c(ett−n+1)c(et−1t−n+1)
c(.) 是语料库中任何地方某个子句的个数。如果我们遇到语料库中没有的子句,也会得到概率0。解决办法是平滑。目前,通常被认为标准有效的平滑方法是Modified Kneser-Ney smoothing (MKN)。
3.3 语言模型的评估
最直接的定义精确度的方法是模型对于测试数据的似然,等于模型赋予数据的概率:
P(εtest;θ)
通常假设数据由相互独立的句子或文件E组成,我们有:
P(εtest;θ)=∏E∈εtestP(E;θ)
另一个测度是对数似然:
logP(εtest;θ)=∑E∈εtestlogP(E;θ)
另一个常用测量是困惑度:
ppl(εtest;θ)=e−(logP(εtest;θ))/length(εtest)
困惑度的一个直观解释是,“模型对于它的决定有多困惑?”。更确切地,“如果我们每一步从概率分布中随机挑选单词,平均需要挑选多少个单词才能得到正确的那个?”3.4 处理未知词
测试数据中未出现在训练数据的单词叫做未知词,处理未知词的方法有:
- 假设封闭的词汇表:假设测试集上不会出现新的单词。
- Interpolate with an unknown words distribution
- 添加一个单词:把训练集中的一些单词用替换。