Statiscal Machine Translation机器翻译_CodingPark编程公园

文章介绍

本文主要讲述了Statiscal Machine Translation的基本步骤

内容讲述

1 三个Model-自顶向下看问题

Statiscal Machine Translation机器翻译_CodingPark编程公园
Statiscal Machine Translation机器翻译_CodingPark编程公园

2 双语数据预处理

学习目标:了解和学习开发汉英双语数据预处理模块。

双语数据预处理是统计机器翻译系统构建的第一步,为词对齐处理提供分词后的
双语数据。预处理的工作本质上就是双语数据的分词处理,与传统分词不同的一
点在于需要对一些特定类型词汇进行泛化处理,如数字词汇“123.45”泛化为
“$number”来代替原文。

  • 中文分词预处理

采用传统基于词典的正向最大匹配法来完成中文分词
Statiscal Machine Translation机器翻译_CodingPark编程公园
由于数字、日期、时间、网址等不可枚举,无法通过词典简单查找来分词。
可以采用正则表达式或者自动机进行自动识别,并给予特殊名字进行泛化。
例如:
数字类型 $number 如:123
日期类型 $date 如:1993 年 12 月 3 日
时间类型 $time 如:3:10
网址等类型 $literal 如:http://www.niutrans.com
实际上大家可以总结更多类型,并自行定义泛化名字进行替换原文。泛化的
目的是为了有效解决数据稀疏问题。

需要注意一点的是,建议不要对组织机构名进行捆绑为一个词汇。例如将“东
北大学信息学院”最好分成两个词“东北大学”“信息学院”。这样做的好处是为
了有助于后面规则抽取模块抽取出更多翻译规则。

  • 英文分词处理

相对于中文分词处理来说,英文分词主要处理三个问题:
1) 将所有大写字母改为小写字母;
2) 将英文句尾结束符与句尾最后一个单词用空格分开;
3) 同样将数字、日期、时间、网址等不可枚举的类型进行识别,然后分
别采用特殊名字进行泛化处理。
例如双语句对:
中文:4 月 14 日我买了 10 本书。
英文:I bought 10 books on April 14.
预处理结果:
中文:$date 我 买 了 $number 本 书 。
英文:i bought $number books on $date .

其它说明:
1) 中文的全角字符可以考虑改写为半角字符来处理;
2) 同一类型的泛化名字在中英文中最好一样,如中文/英文数字=>$ number;
3) 也可以采用 CRF 或者语言模型来实现高性能中文分词;
4) 注意区分英文的句尾符号“.”和“Mr. Smith”的“.”;
5) 双语句对的泛化结果需要检查一致性,例如中文句子中包含$ number,正
常情况下,英文句子中也应该包含$ number 等;
6) 目前有很多开源的分词工具可以被使用,如 NiuTrans 提供的双语数据预
处理工具从 http://www.nlplab.com/NiuPlan/NiuTrans.YourData.html 下载。
本讲资源(UTF8 编码):10 万行汉英双语句对和中文电子词典。

3 词对齐

学习目标:学会使用词对齐工具 GIZA++并自行开发词对齐对称化程序。
经过双语数据预处理后,得到分词后的双语数据。而词对齐的任务就是要得到中英文词语的对应关系。

  • GIZA++的使用

GIZA++是 GIZA(SMT 工具包 EGYPT 的一个组成部分)的扩展,扩展部分
主要由 Franz Josef Och 开发。GIZA++主要算法是 IBM model、HMM 等。
1、GIZA++运行环境:Linux,并预装软件 gcc、g++。 2、GIZA++下载地址:
http://code.google.com/p/giza-pp/downloads/detail?name=giza-pp-v1.0.7.tar.gz
3、编译:
a)首先进入到 GIZA++根目录
b)解压包,指令:tar zxvf giza-pp-v1.0.7.tar.gz
c)进入到解压后的目录,指令:cd giza-pp
d)编译,指令:make
4、GIZA++运行:
a)新建目录 Alignment,并将编译后的 GIZA+±v2 目录下的“GIZA++”、
“snt2cooc.out”、“plan2snt.out”文件和 mkcls-v2 目录下的“mkcls”文件,拷贝到
Alignment 目录下,同时将预处理后的文件 c.txt 和 e.txt 作为 GIZA++工具的
输入文件放到其中。
b)在终端依次运行以下命令,获得下一步需要的文件:c2e.A3.final 和
e2c.A3.final。
$> ./plain2snt.out e.txt c.txt
$> ./snt2cooc.out c.vcb e.vcb c_e.snt> cooc.ce
$> ./snt2cooc.out e.vcb c.vcb e_c.snt > cooc.ec
$> ./mkcls -m2 -c80 -n10 -pe.txt -Ve.vcb.classes opt
$> ./mkcls -m2 -c80 -n10 -pc.txt -Vc.vcb.classes opt
$> ./GIZA++ -S c.vcb –T e.vcb –C c_e.snt -CoocurrenceFile cooc.ce -O c2e
$> ./GIZA++ -S e.vcb –T c.vcb –C e_c.snt -CoocurrenceFile cooc.ec -O e2c

  • 词对齐对称化

由于 GIZA++程序中,原语=>目标语和目标语=>原语的对齐过程是彼此独立
的,因此会产生两个对齐文件,词对齐对称化的任务就是通过一定的算法合并这
两个对齐文件

1 输入:GIZA++运行目录中的 c2e.A3.final 文件和 e2c.A3.final 文件,格式如下:
c2e.A3.final 文件的一个句对:
Statiscal Machine Translation机器翻译_CodingPark编程公园

e2c.A3.final 文件的一个句对:
Statiscal Machine Translation机器翻译_CodingPark编程公园

其中,第三行大括号里面的数字,代表该大括号前面的词语对应的目标语的词的
位置。

如:“天气 ({ 2 })”中的“2”表示对应的英语中的“weather”。 “weather ({ 2 })”中的“2”表示对应的汉语中的“天气”。
因此,“天气”和“weather”构成了一个双向对齐“天气”????“weather”。 “today ({ 1 })”中的“1”表示对应的汉语中的“今天”。
而“今天”后的({})为空,并未与“today”对应。
因此,“today”和“今天”就构成了一个单向对齐“today”=>“今天”。

另外,“NULL ({ 1 3 6 })”表示英文中“the”“is”“today”对空,即形成空
对齐“the”=>“NULL”,“is”=>“NULL”,“today”=>“NULL”。

2 输出:将两个输入文件通过算法合并为对齐文件,文件中每一行格式如下:
Statiscal Machine Translation机器翻译_CodingPark编程公园
其中,0-5 表示经过算法合并后,中文中第 0 个词“今天”与英文中第 5 个词“today”
对齐。

  • 词对齐对称化算法

Statiscal Machine Translation机器翻译_CodingPark编程公园
该算法与 Philipp Koehn 的 GROW-DIAG-FINAL 算法类似。

  • 算法说明

Statiscal Machine Translation机器翻译_CodingPark编程公园

  1. 首先,找到对齐的词语对,将所有双向对齐加入 Alignment。如图(矩阵中
    实心方格表示双向对齐,虚线空心方格表示单向对齐):
    Statiscal Machine Translation机器翻译_CodingPark编程公园

  2. 遍历 Alignment,对其邻居进行检测,如果邻居中存在单向对齐的点,并且
    该点的两个词中存在一个没有与任何词双向对齐,则将该点加入 Alignment。
    循环这个操作直到没有新节点加入。如上图中,当遍历到“weather-天气”时,
    发现该点左边存在单向对齐点“the-天气”,且“the”尚未与任何词双向对
    齐,则将该点加入 Alignment。

Statiscal Machine Translation机器翻译_CodingPark编程公园

  1. 最后遍历矩阵中所有节点,如果存在单向对齐的点,并且该点的两个词中存 在一个没有与任何词双向对齐,则将该点也加入 Alignment。如图,当遍历
    到“today-今天”时,发现该点是一个单向对齐点,并且“today”尚未与任何
    词双向对齐,则将该点加入 Alignment。

Statiscal Machine Translation机器翻译_CodingPark编程公园

  1. 最后获得最终的对齐信息输出到文件,如上图所示,得到的对称化的词对齐
    信息为:
    0-5 1-0 1-1 2-3 3-4 4-6

4 短语翻译表构造 --短语抽取

学习目标:深刻理解基于短语统计机器翻译系统中短语抽取的基本算法,可自行开发短语抽取模块。
短语抽取的任务是从含有词对齐信息的双语平行句对中学习解码器在翻译过程中使用的翻译短语。

  • 一致性短语

使用含有词对齐信息的双语平行句对进行短语抽取时,抽取出的短语对需要与词对齐保持一致。
下面给出一致性的定义。

  • 短语抽取流程

Statiscal Machine Translation机器翻译_CodingPark编程公园

图 2 展示应用短语抽取算法 1、2 抽取短语对的基本流程。其中“从目标语长度 n 开始循环”为
算法 1 的第 1 行;每组三个图如“(a),(b)和©”为算法 1 中第 2 行至第 12 行。图(2)中(a)图展示
抽取的一个与词对齐保持一致的短语对“北京,beijing”;(b)图展示一个非法的短语对“房价,housing”,
其中目标语端词汇“prices”为异常点。

  • 满足一致性的短语

Statiscal Machine Translation机器翻译_CodingPark编程公园

5 短语翻译表构造 –概率估计

学习目标:深刻理解基于短语统计机器翻译系统中短语翻译表概率估计的基本步骤,可自行开发概率
估计模块。

短语翻译表概率估计是统计机器翻译系统构建的第四步,经过第三步短语抽取后,获得基于短语
系统使用的翻译短语对,概率估计的作用是对翻译短语对的正确性进行合理的评估。

  • 示例短语对集合

Statiscal Machine Translation机器翻译_CodingPark编程公园

概率估计主要进行四个分数的计算,即双向1短语翻译概率双向词汇化权重

首先,在图 1 上方
给定的含有词对齐的句对中,通过上一讲中的短语对抽取算法抽取出 14 条与词对齐保持一致的短语
对,短语概率估计是在图 1 结果的基础上进行的2。

1 正向:“源语言->目标语言”方向;反向:“目标语言->源语言”方向
2 在进行概率估计时,短语对集合需要保留词对齐信息

  • 双向短语翻译概率

Statiscal Machine Translation机器翻译_CodingPark编程公园

  • 双向词汇化翻译概率

Statiscal Machine Translation机器翻译_CodingPark编程公园
Statiscal Machine Translation机器翻译_CodingPark编程公园

以图 1 中短语对“北京 房价 持续 上涨,beijing housing prices continued to rise”为例,公式(5)的
具体计算方式如下所示:
Statiscal Machine Translation机器翻译_CodingPark编程公园

5 解码-Decoder

Statiscal Machine Translation机器翻译_CodingPark编程公园
Statiscal Machine Translation机器翻译_CodingPark编程公园
Statiscal Machine Translation机器翻译_CodingPark编程公园
Statiscal Machine Translation机器翻译_CodingPark编程公园
剪枝如下图所示
可理解为合并
Statiscal Machine Translation机器翻译_CodingPark编程公园
Statiscal Machine Translation机器翻译_CodingPark编程公园

6 评估

Statiscal Machine Translation机器翻译_CodingPark编程公园

Statiscal Machine Translation机器翻译_CodingPark编程公园
Statiscal Machine Translation机器翻译_CodingPark编程公园

知识拓展

Statiscal Machine Translation机器翻译_CodingPark编程公园

Statiscal Machine Translation机器翻译_CodingPark编程公园