文章目录
前言
本期将介绍机器翻译,参考书籍《机器翻译:基础与模型》,本期知识将会对当前主流的机器翻译技术做个总览,不会过于深入,后面几期会深入探讨每种方法。本期作为笔者自己的学习笔记,以供大家复习使用。
机器翻译
机器翻译技术大体上可以分为两种方法,分别为基于规则的机器翻译方法
以及数据驱动的机器翻译方法
。进一步,数据驱动的机器翻译方法又可以分为统计机器翻译方法
以及神经机器翻译方法
。
基于规则的方法
基于规则的方法其主要思想是通过形式文法定义的规则引入源语言和目标语言中的语言学知识。我们将基于规则的机器翻译又分为转换法和基于中间语言的方法。它们都以词典和人工书写的规则库作为翻译知识,用一系列规则的组合完成翻译。我们接下来具体讲解一下:
规则的定义
规则就像语言中的“If then”语句,如果满足条件,则执行相应的语义动作。我们可以看到不同的规则对应不同的转换。
上图中规则1可以表示单词间的对应,规则6表示句法甚至语法的对应,我们又将规则划分四个层次,词汇转化,句法转换,语义转换以及中间语言层。其中,上层可以继承下层的翻译知识,比如句法转换层会利用到词汇转换层知识,早期基于规则的方法属于词汇转换层。
转换法
我们将这个方法分为“独立分析 - 相关转换 - 独立生成“三个过程。转换法的目标就是使用规则定义的词法和语法,将源语言句子分解为一个蕴含语言学标志的结构。转换法的分析结果(如源语言的句法结构)需要与目标语言的生成规则严格匹配。
基于中间语言的方法
基于转换的方法有个实际问题,就是如果是多个语言进行转换,就得相应设计不同的互译系统,而为了基于这一个问题,基于中间语言的方法应运而生。
中间语言处于最顶端,本质上是独立于源语言和目标语言的,这也是基于中间语言的方法可以将分析过程和生成过程分开的原因,这也是跟转化法区别的主要地方。但是如果中间语言的表达能力不强,会导致源语言句子信息丢失,会影响目标语言的生成效果。
数据驱动的机器翻译方法
基于实例的机器翻译
基本思想是在双语句库中找到与待翻译句子相似的实例,之后对实例的译文进行修改,如对译文进行替换、增加、删除得到最终译文。我们有资源1 和 资源2 ,现在需要翻译“我对你感到满意”。根据相似度大小找到相似的实例,然后标记不匹配的部分,再查阅翻译词典进行替换。
统计机器翻译
统计机器翻译利用统计模型从单/双语语料中自动学习翻译知识,可以使用单语语料学习语言模型,使用双语平行语料学习翻译模型,并使用这些统计模型完成对翻译过程的建模,整个过程不需要人工编写规则,也不需要从实例中构建翻译模板。
我们从资源1 学习翻译模型(翻译),从资源2 学习语言模型(规律),将两种模型联合使用,最后通过翻译引擎来搜索尽可能多的结果,并计算不同的翻译结果的可能性,最后将概率最大的译文作为最终输出结果。
虽然不需要人工定义翻译规则,但是仍然需要人工定义翻译特征。
神经机器翻译
随着机器学习技术的发展,基于深度学习的神经机器翻译开始快速发展,此时,翻译不再是在离散化的单词和短语,而是在实数向量空间上。在神经机器翻译中,序列到序列的转化过程可以由编码器-解码器(EncoderDecoder)框架实现。其中,编码器把源语言序列进行编码,并提取源语言中的信息进行分布式表示,之后解码器再把这种信息转换为另一种语言的表达。
与统计机器翻译相比,神经机器翻译的优势体现在其不需要特征工程,所有信息由神经网络自动从原始输入中提取。而且,相比于统计机器翻译中所使用的离散化的表示。神经机器翻译中词和句子的分布式连续空间表示可以为建模提供更为丰富的信息,同时可以使用相对成熟的基于梯度的方法优化模型。此外,神经网络的存储需求较小,天然适合小设备上的应用。
不过其缺点也很明显,缺乏可解释性,同时对数据极其依赖。
最后对比一下各个机器翻译方法:
统计语言建模基础
概率论基础
随机事件和随机变量
通过大量的重复实验,能发现某种规律的事件叫做随机事件。我们用随机变量来对随机事件可能发生的状态进行描述。随机变量分为离散变量和连续变量。
概率及其估计
概率是度量随机事件在某种可能状态可能性的数值,我们无法具体得到,不过可以对其进行估计,用频率代替概率。我们将频率作为概率的估计值。
概率分布函数和概率密度函数
由于连续变量的概率不好具体刻画到某个点,我们用**概率分布函数F(x)和概率密度函数f(x)**来描述连续变量取值的分布情况。F(x)表示取值小于等于某个值的概率,是概率的累加(或积分)形式,用概率密度函数f(x)反映变量在某个区间内的概率变化快慢。
联合概率、条件概率和边缘概率
联合概率指的是多个事件同时发生,每个随机变量满足各自的条件的概率,
条件概率是指A、B为两个事件,在事件A已经发生的前提下,事件B发生的概率,使用P(B|A)表示,我们可以深入理解一下条件概率,条件概率的计算公式是P(A|B) = P(AB)/P(B),在事件B发生的情况下发生A,也就是我们把P(B)的概率作为分母,分母将范围从1缩小到P(B)。更具体一点,假设我们有一个随机试验,初始样本空间为
Ω
\Omega
Ω,每个事件对应
Ω
\Omega
Ω 的一个子集,当已知事件 B 发生时,我们的关注范围不再是整个
Ω
\Omega
Ω,而是被 “限制” 到 B 这个子集内。此时,原来的 “不可能事件”(不在 B 中的结果)概率变为 0,而 B 内部的事件概率需要按比例 “归一化”(即概率总和重新变为 1)
边缘概率是和联合概率对应的,它指的是P(x=a)或P(x=b),即仅求与单个随机变量有关的概率,通过对离散变量的联合概率求和或连续变量的联合概率求积分。可以简单为,在多维随机变量的联合分布中,忽略其他变量的具体取值,我们仅关注某一单个变量的概率分布,将多维进行降维。
全概率公式、贝叶斯法则和链式法则
全概率公式是概率论中重要的公式,可以将一件复杂事件发生的概率分解为不同情况的小事件发生的概率的和。A表示最终发生的事件,B表示一个划分的集合。此时事件A的全概率公式可以被描述为:
举个具体的例子,小张从家到公司有三条路分别为a,b,c,选择每条路的概率分别为0.5,0.3,0.2。
我们令事件Sa、Sb、Sc、S表示为:
- Sa:小张选择a路去上班
- Sb:小张选择b路去上班
- Sc:小张选择c路去上班
- S:小张去上班
如果三条路不拥堵的概率分别为P(S′ a)=0.2,P(S′ b)=0.4,P(S′ c)=0.7,那么事件 L:小张上班没有遇到拥堵情况的概率就是:
贝叶斯法则是概率论中的一个经典公式,通常用于根据已知的结果来推断使之发生的各因素的可能性。通常我们将事件A表示最终发生的结果,事件B是一个集合${B_1,B_2,…,B_n},则我们可用以下公式表示:
链式法则是条件概率计算的一种拓展和推广,条件概率公式:P(A|B) = P(AB)/P(B),如果我们将其推广到三个事件P(A,B,C):
将其推广到n个事件,可以得到链式法则的公式:
信息熵
熵是热力学的一个概念,用以表示系统无序性的一种度量标准,同时也是对事件的不确定性的度量,一个事件X的自信息表示:
自信息描述单个事件发生时携带的信息量,与该事件的概率成反比(概率越小,信息越多)。若量化整个概率分布中的不确定性或信息量,可以用信息熵,记为H(x)。
**信息熵表示的是随机变量 X 所有可能事件的自信息的期望值,描述了整个概率分布的平均信息量或不确定性。同时有个结论:分布越尖锐熵越低,分布越均匀熵越高。**举个例子:一个分布的信息熵也就是从该分布中得到的一个事件的期望信息量。比如,a、b、c、d 四支球队,四支队伍夺冠的概率分别是P1、P2、P3、P4,假设四只队伍的实力未知或者实力相当,那么人们就很难对比赛结果做出预测。但是,如果这四只球队中某一支球队的实力可以碾压其他球队,那么人们对比赛结果的预测就会很明确。所以对于前面这种情况,预测球队夺冠的问题的信息量较高,信息熵也相对较高;对于后面这种情况,因为结果是容易猜到的,信息量和信息熵也就相对较低。
KL距离
如果同一个随机变量X上有两个概率分布P(x)和Q(x),那么可以使用Kullback-Leibler距离或者KL距离来衡量这两个分布的不同,也称作KL散度。这种度量就是相对熵。它衡量的是同一个事件空间里两个概率分布的差异。相对熵的意义在于:在一个事件空间里,若用概率分布Q(x)来编码P(x),相比于用概率分布P(x)来编码P(x)时信息量增加了多少。
交叉熵
交叉熵是一个与KL距离密切相关的概率,它的公式是:
交叉熵实际上是KL散度的右边部分,由于P(x)固定,最小化交叉熵等价于最小化KL散度,由于交叉熵计算上更直观,在机器翻译中被广泛应用。
参数估计
参数估计是从大量实例中学习模型参数的方法。我们常常通过矩矩阵,极大似然估计,贝叶斯估计以及最小二乘法对参数进行估计,在机器学习中,我们常常使用极大似然估计,通过调整模型参数,使得观测数据出现的概率最大化。
语言建模
n-gram语言模型
语言模型的目标是描述文字序列出现的规律,其对问题建模的过程被称为语言建模。如果我们使用统计建模的方式,语言模型可以定义为计算
P
(
W
1
,
W
2
,
.
.
.
,
W
m
)
P(W_1,W_2,...,W_m)
P(W1,W2,...,Wm)。但是如果m的值特别大的时候,我们直接求的话会发现复杂度极其大,甚至无法存储和计算。
换一个角度想,我们求得
P
(
W
1
,
W
2
,
.
.
.
,
W
m
)
P(W_1,W_2,...,W_m)
P(W1,W2,...,Wm)体现了一种基于“历史”的单词生成模型,也就是把前面生成的所有单词作为历史,并参考历史生成当前的单词,现在我们简化历史单词,每次只考虑前面n-1个历史单词来生成当前单词,这就是n-gram语言模型。
n-gram 的优点在于,它所使用的历史信息是有限的,即n−1个单词。这种性质也反映了经典的马尔可夫链的思想,因此n-gram也可以看作变长序列上的马尔可夫模型。我们看一个2-gram语言模型的具体计算,我们可以通过链式法则进行计算:
n-gram的建模思路即:把整个序列生成的问题转化为逐个生成单词的问题。实际上,这种建模方式会被广泛地用于机器翻译建模,在统计机器翻译和神经机器翻译中都会有具体的体现。
对于如何计算
P
(
W
m
∣
W
1
,
W
2
,
.
.
.
,
W
m
−
1
)
P(W_m | W_1,W_2,...,W_{m-1})
P(Wm∣W1,W2,...,Wm−1),我们可以采取基于频次的方法或者人工神经网络方法。
1 基于频次的方法:我们之间利用词序列在训练数据中出现的频次计算出
P
(
W
m
∣
W
1
,
W
2
,
.
.
.
,
W
m
−
1
)
P(W_m | W_1,W_2,...,W_{m-1})
P(Wm∣W1,W2,...,Wm−1)。
2 人工神经网络法:构建一个人工神经网络来估计
P
(
W
m
∣
W
1
,
W
2
,
.
.
.
,
W
m
−
1
)
P(W_m | W_1,W_2,...,W_{m-1})
P(Wm∣W1,W2,...,Wm−1),可以构建一个前馈神经网络来对n-gram进行建模。
参数估计和平滑算法
对于n-gram 语言模型,每个
P
(
W
m
∣
W
1
,
W
2
,
.
.
.
,
W
m
−
1
)
P(W_m | W_1,W_2,...,W_{m-1})
P(Wm∣W1,W2,...,Wm−1)都可以被看作是模型的参数。而 n-gram语言模型的一个核心任务是估计这些参数的值,即参数估计。通过数据计算的过程,我们称为模型训练。之前我们介绍的计算公式有很大的问题,如果语料中没有出现情况,或者未登录词的情况,会计算出概率为0的情况。为了解决这个问题,我们可以对模型进行平滑,
接下来介绍三种平滑算法,加法平滑法,古德-图灵估计法和Kneser-Ney平滑。平滑的主要思想可以理解为"济富济贫",在保证所有情况的概率和为1的前提下,对极低概率的部分可以从高概率的部分分配到一部分的低概率,从而达到平滑的目的。
加法平滑法
加法平滑(AdditiveSmoothing)是一种简单的平滑技术。简单理解,就是给所有 n-gram 的计数加一个数,避免零概率。当数为1的时候,我们称之为拉普拉斯平滑。
古德-图灵估计法
古德-图灵估计(GoodTuringEstimate)是AlanTuring和他的助手IrvingJohnGood开发的,作为他们在二战期间破解德国密码机Enigma所使用方法的一部分,在1953年Irving John Good 将其发表。其基本思路是:把非零的n元语法单元的概率降低,匀给一些低概率n元语法单元,以减小最大似然估计与真实概率之间的偏离。它也是一种劫富济贫的方法。
假定在语料库中出现r次的ngram有nr个,特别的,出现0次的n-gram(即未登录词及词串)有
n
0
n_0
n0个。语料库中全部单词的总个数为N,显然:
对于每个出现r次的n-gram统计量,用r+1次的n-gram统计量重新计算它出现的次数。
可以看一下古德图灵方法进行修正的结果:
Kneser-Ney平滑
KneserNey 平滑方法是由 Reinhard Kneser 和 Hermann Ney 于 1995 年提出的用于计算n元语法概率分布的方法,并被广泛认为是最有效的平滑方法之一。
针对 n-gram 模型的层级结构(unigram、bigram、trigram 等),通过折扣高阶 n-gram 的概率,并将折扣的概率质量分配给低阶 n-gram(尤其是未出现的 n-gram),同时引入扩散概率(diffusion probability)—— 考虑上下文在语料中出现的 “新结尾” 数量,提升模型对未见序列的泛化能力。
语言模型的评价
困惑度
在使用语言模型时,往往需要知道模型的质量。困惑度(Perplexity,PPL)是一种衡量语言模型的好坏的指标。对于一个真实的词序列w1…wm,困惑度被定义为:
本质上,PPL反映了语言模型对序列可能性预测能力的一种评估。如果w1…wm是真实的自然语言,“完美”的模型会得到P(w1…wm)=1,它对应了最低的困惑度PPL=1,这说明模型可以完美地对词序列出现的可能性进行预测。
预测和搜索
给定模型结构,统计语言模型的使用可以分为两个阶段:
- 训练(Training):从训练数据上估计出语言模型的参数。
- 预测(Prediction):用训练好的语言模型对新输入的句子进行概率评估,或者生成新的句子。
预测一般包括两种任务:
1 预测输入句子的可能性。
可以利用语言模型对其进行打分,即计算句子的生成概率,之后把语言模型的
得分作为判断句子合理性的依据。
2 预测可能生成的单词或者单词序列。
下划线的部分是缺失的内容,现在要将缺失的部分生成出来。理论上,所有可能的单词串都可以构成缺失部分的内容。这时可以使用语言模型得到所有可能词串构成句子的概率,之后找到概率最高的词串填入下划线处。序列生成任务的本质并非让语言模型凭空“生成”序列,而是使用语言模型在所有候选的单词序列中“找出”最佳序列。这个过程对应着经典的搜索问题。
搜索问题的建模
在序列生成任务中,基于语言模型的搜索问题可以被描述为:
P(w) 表示找到使语言模型得分P(w)达到最大的单词序列w。X是搜索问题的解空间,它是所有可能的单词序列w的集合。可以看做找该搜索问题中的“最优解”,即概率最大的单词序列。为了方便计算机实现,通常定义单词序列从一个特殊的符号后开始生成。同样地,一个单词序列的结束也用一个特殊的符号来表示。看一下序列生成过程:
枚举策略一般采用宽度优先和深度优先算法去遍历所有解,当然可以使用剪枝等等技术对其优化。
同时建立解空间树,在树的遍历中,可以很自然地引入语言模型打分:在解空间树中引入节点的权重。由于句子很长时概率会非常小,容易造成浮点误差, 所以这里使用概率的对数形式logP(wi|w1w2…wi−1) 代替 P(wi|w1w2…wi−1)。
score(·) 也被称作模型得分(ModelScore)。
当然人工智能领域有很多经典的搜索策略,常用的有无信息搜索、启发式搜索、局部搜索、贪婪搜索、束搜索等等。
总结
本期总结了机器翻译的基本方法和概率论基础知识和统计语言建模基础知识,下期将介绍词法分析和语法分析基础和翻译质量评估。
参考文献
机器翻译:基础与模型 肖桐 朱靖波
写在文末
有疑问的友友,欢迎在评论区交流,笔者看到会及时回复。
请大家一定一定要关注!!!
请大家一定一定要关注!!!
请大家一定一定要关注!!!
友友们,你们的支持是我持续更新的动力~