如何使用GIZA++进行双语语料的词对齐

za++ 是一个统计机器翻译工具,不过现在常用做平行语料的词对齐,本文简要介绍了如何使用Giza++进行词对齐。

Giza++安装与编译

下载

官方网站年久失修,从上面找到的链接很多都打不开,并且google-code上面的程序亲测make会有问题,因此推荐从github上面克隆。

1
git clone https://github.com/moses-smt/giza-pp

安装

文件有两个文件夹,分别是Giza++v2mkcls-v2,后者是一个工具,暂且无需理会。

在根目录下执行下面的命令,等待编译成功就好了。

1
make

GIZA++的简单使用

预处理

首先进入Giza++v2的目录中。

1
cd GIZA++v2

这里我们假设有两个文件,分别是chiense.txtenglish.txt。这两个文件中每一行都是一个句子,句子的中英文是对应的,即所谓的平行语料。接下来通过简单的操作我们就可以开始训练,然后得到词对齐的标注了。

1
./palin2snt.out chinese.txt english.txt

这一步会生成4个文件,分别是

  • chinese_english.snt
  • chinese.vcb
  • english_chinese.snt
  • english.vcb
    顾名思义,*.vcb文件就是对应的词表,每一行是一个词,记录了这个词的编号和词频;*.snt文件就是上述两个源文件的对应句子转成vocabulary的index。

然后我们还要生成共现文件。

1
./snt2cooc.out chinese.vcb english.vcb chinese_english.snt > cooc.cooc

对齐

最后就可以进行对齐了,程序采用HMM的算法,还是比较慢的。

1
./GIZA++ -s chinese.vcb -t english.vcb -c chinese_english.snt -cooc cooc.cooc -o test

稍微解释一下:-s表示source,-t表示target,-c source-target的句子对, -cooc 上面生成的共现表 -o 输出文件的文件夹。

结果

程序会产生很多过程文件,其中*.A3.final就是对齐的结果,但是并不那么好看。
中间文件:

116-07-11.143334.xyw00.gizacfg         
116-07-11.143417.xyw00.gizacfg         
116-07-11.143429.xyw00.gizacfg         
116-07-11.143817.xyw00.gizacfg         
116-07-11.144017.xyw00.gizacfg         
116-07-11.144156.xyw00.gizacfg         
116-07-11.144708.xyw00.a3.final        
116-07-11.144708.xyw00.A3.final        
116-07-11.144708.xyw00.d3.final        
116-07-11.144708.xyw00.d4.final        
116-07-11.144708.xyw00.D4.final        
116-07-11.144708.xyw00.Decoder.config  
116-07-11.144708.xyw00.gizacfg         
116-07-11.144708.xyw00.n3.final        
116-07-11.144708.xyw00.p0_3.final      
116-07-11.144708.xyw00.perp            
116-07-11.144708.xyw00.t3.final        
116-07-11.144708.xyw00.trn.src.vcb     
116-07-11.144708.xyw00.trn.trg.vcb     
116-07-11.144708.xyw00.tst.src.vcb     
116-07-11.144708.xyw00.tst.trg.vcb  

对齐结果

# Sentence pair (1) source length 36 target length 54 alignment score : 6.57597e-100
in 1998 , the yili autonomous prefecture cpc committee and the yili prefecture cpc committee made unified arrangements and sent on a trial basis several propaganda teams deep into the schools , villagers ' courtyards , and fields to carry out face - to - face propaganda among the people of all nationalities .
NULL ({ 4 10 11 19 21 22 37 49 51 }) 1998年 ({ 1 2 }) , ({ 3 }) 经过 ({ }) 统一 ({ 17 }) 部署 ({ 18 }) , ({ }) 伊犁州 ({ 5 6 7 8 9 12 13 14 16 }) , ({ }) 地 ({ }) 两 ({ }) 级 ({ }) 党委 ({ 15 }) 开始 ({ }) 尝试 ({ }) 以 ({ }) 宣讲 ({ 26 }) 团 ({ }) 的 ({ 30 }) 形式 ({ }) , ({ }) 深入 ({ }) 学校 ({ 31 }) , ({ 32 }) 村民 ({ 33 34 }) 院落 ({ 20 23 24 25 27 28 29 35 }) , ({ 36 }) 田间 ({ }) 地头 ({ 38 }) , ({ }) 向 ({ 39 44 }) 各族 ({ 52 53 }) 群众 ({ 48 50 }) 进行 ({ 40 41 }) 面对面 ({ 42 43 45 46 }) 宣讲 ({ 47 }) . ({ 54 })

Reference

[1] Is there a tutorial about giza++?
[2] GIZA++的详细运行报告