GIZA++运行详细报告

本文详述了在Ubuntu 9.10系统下,使用GIZA++进行统计机器翻译对齐的完整过程。涉及的工具有CMU-Cambridge语言模型工具、isi-rewrite-decoder解码器、GIZA++及其辅助工具mkcls,以及相关的语料库处理和分词工具。首先,作者介绍了如何准备和处理语料库,包括添加语言模型识别标志。接着,详细阐述了软件的安装与编译,包括修改源代码、生成共线表等步骤。最后,展示了解码器的配置和运行,以及运行结果的分析。
摘要由CSDN通过智能技术生成

   这篇文章主要详细记录了GIZA++的运行报告,所使用的语言模型为CMU-Cam_Toolkit-v2,解码器使用的是isi-rewrite-decoder-r1.0.0a,使用的操作系统是Ubuntu9.10 ,gcc 的版本是G++4.4.1.都是比较新的运行环境,有需要的学习者可以参考。有不明白的可以留言。其中文中参考的论文为刘洋老师的《利用现有软件构建统计机器翻译系统》。

   

                           -----------------------------------------------

                           GIZA++运行情况记录和结果对比

                                       

 田亮           澳门大学

                                   

                                           2009-12-15——2009-12-22

                                 ----------------------------------------------

       

本次总结主要是对运行过程中的步骤及其出现的情况进行记录,并对运行中出现的可执行文件的功能进行说明与讲解。目的就是总结出一份详细的运行报告,以便其他试图运行该软件的研究者能够顺利调试。文章的结构是在正文的部分给出运行成功的过程,而在文中的附录部分给出各种异常的情况和各种可执行文件的解释,最后给出相关的论文。

       文章的总体结构图如下(这里省略):

 

    1.    工具的准备

  1. 安装linux系统,这里我使用的是Ubuntu 9.10gcc版本是4.4.1
  2. 双语语料库。这里使用1000句中英文对照翻译的句子。
  3. CMU-Cambridge Statistical Language Modeling Toolkit v2。语言模型工具,用于生成语言模型,以便解码器调用。
  4. GIZA++。这里使用最新版本“giza-pp-v1.0.3.tar”,里面包含其辅助工具“mkcls”,用于生成word class
  5. 汉语和英语的分词工具。汉语使用ICTCAL, 英语使用EGYPT自带的一个工具:tokenizeE.perl.tmpl

2.    处理语料库

1.下载中英文语料库

从网上下载的1500句(http://www.nlp.org.cn/ 中文自然语言开放平台)是有问题的,主要是有部分中文语句占据了两行,导致对齐效果不好,所以事先更正了一下。这里为了和语言模型使用的句子相区别,使用了前1000句,作为对齐语料库,而把英文的1500句作为语言模型。

 其中源语言1500——1500.txt的输入形式为:

 For this reason it is often convenient to overlay the geochemical map with a geological map transparency.

由于这个缘故,最好用透明的地质图蒙在地球化学图上。

Trains and tunnels are overlaid with the multicoloured names and slogans of youths.

青年人在车辆上和隧道中涂满了各种颜色的姓名和口号。

….

2.分离语料库

接下来,我们要做的就是对其进行分离,也就是说,把这个文档分别分成中文和英文,并把它们命名为:chineseenglish。在linux中可以使用如下的命令把它分离:

    tianliang@ubuntu:~$ grep '[aeiou]' 1500.txt > english

  分离后,会有四句含有中文,然后将english中含有中文句手工删除。

  tianliang@ubuntu:~$ grep -v  '[aeiou]' 1500.txt > chinese

然后将chinese中含有全角标点的英文句手工删除。

选择分离后的语言文件:englishchinese中的前1000句作为接下来的输入文件。并把分离后的1500句重命名为english1500

分离后的语言englishchinese的格式 如下:

english

For this reason it is often convenient to overlay the geochemical map with a geological map transparency.

Trains and tunnels are overlaid with the multicolored names and slogans of youths.

chinese

由于这个缘故,最好用透明的地质图蒙在地球化学图上。

青年人在车辆上和隧道中涂满了各种颜色的姓名和口号。

3.添加语言模型的识别标志

由于这次使用的解码器isi-rewrite-decoder 采用XML文件格式作为输入文件,而它把<s> </s>作为语句的区别的标志,为了能够让解码器识别语句,这里需要事先对语言模型的语句做些处理,即要对“english1500”添加<s> </s> 标记。使用如下的步骤即可:

      1 运行命令:

tianliang@ubuntu:~$ cp english1500 english.tag

生成了english1500的一个复本english.tag 当然可以使用图形化的操作直接复制一份即可。做这步的目的是保留源文件,以免出现异常情况后,源文件损坏。

      2vi打开english.tag,使用如下两个命令:

:%s#^#<s>  #

:%s#$#  </s>#

注意<s>之后以及</s>之前各有一个空格。这样就给每个句子的头和尾加上了标记。保存( wq!)并退出vi

最终生成的加标记的文件的形式为:

<s> For this reason it is often convenient to overlay the geochemical map with a geological map transparency. </s>

 

<s> Trains and tunnels are overlaid with the multicolored names and slogans of youths. </s>

….

3.    安装软件

1.      下载软件

   分别下载所需的软件

语言模型工具:CMU-Cambridge Statistical Language Modeling Toolkit v2

  下载地址:http://svr-www.eng.cam.ac.uk/~prc14/toolkit.html

解码器:isi-rewrite-decoder-r1.0.0a.tar.gz

  下载地址:http://www.isi.edu/natural-language/software/decoder/

翻译模型工具:Giza-pp-v1.0.3.tar (里面包含GIZA++-v2mkcls-v2

  下载地址:http://code.google.com/p/giza-pp/

分词工具包:EGYPT (这里仅使用它自带的英语分词功能)

  下载地址:http://www.clsp.jhu.edu/ws99/projects/mt/toolkit/

 这里介绍一个统计机器翻译的专门网站http://www.statmt.org/ ,从这里你可以了解到相关的统计机器的论文和会议情况,还可以下载所需要的各种有关的语料库和工具。

2.      编译安装软件

  首先,建立一个文件夹用来放置本次调试的软件包:/home/tianliang/research

  然后,把解压后的软件包复制到该目录下即可。这里解压可以使用图形化的操作方式,直接右键解压,或者使用命令行,如解压EGYPT包:# tar –xzvf EGYPT.tar.gz

  最后,从终端进入该目录,然后输入命令“make” 编译即可。

  详细过程如下:

1)把三个解压后的文件包放置在research目录下,使用如下的命令,以及查询目录下的软件包情况:

tianliang@ubuntu:~$ mkdir research

tianliang@ubuntu:~$ cd research

tianliang@ubuntu:~/research$ ls

CMU-Cam_Toolkit_v2  giza-pp  isi-rewrite-decoder-r1.0.0a

2)安装CMU-Cam_Tookit_v2

 安装这个软件前,要事先更改一下代码,方法就是进入该包的src目录下,找到Makefile,将里面的“#BYTESWAP_FLAG=-DSLM_SWAP_BYTES”中的“#”去掉。

tianliang@ubuntu:~/research$ cd CMU-Cam_Toolkit_v2

tianliang@ubuntu:~/research/CMU-Cam_Toolkit_v2$ cd src

tianliang@ubuntu:~/research/CMU-Cam_Toolkit_v2/src$ make install

gcc -O -DSLM_SWAP_BYTES -c -o bo_ng_prob.o bo_ng_prob.c

gcc -O -DSLM_SWAP_BYTES -c -o calc_mem_req.o calc_mem_req.c

gcc -O -DSLM_SWAP_BYTES -c -o compute_back_off.o compute_back_off.c

gcc -O -DSLM_SWAP_BYTES -c -o compute_discount.o compute_discount.c

gcc -O -DSLM_SWAP_BYTES -c -o compute_unigram.o compute_unigram.c

gcc -O -DSLM_SWAP_BYTES -c -o get_ngram.o get_ngram.c

gcc -O -DSLM_SWAP_BYTES -c -o increment_context.o increment_context.c

gcc -O -DSLM_SWAP_BYTES -c -o lookup_index_of.o lookup_index_of.c

gcc -O -DSLM_SWAP_BYTES -c -o short_indices.o short_indices.c

gcc -O -DSLM_SWAP_BYTES -c -o two_byte_alphas.o two_byte_alphas.c

gcc -O -DSLM_SWAP_BYTES -c -o write_lms.o write_lms.c

gcc -O -DSLM_SWAP_BYTES -c -o num_of_types.o num_of_types.c

gcc -O -DSLM_SWAP_BYTES -c -o guess_mem.o guess_mem.c

gcc -O -DSLM_SWAP_BYTES -c -o counts.o counts.c

gcc -O -DSLM_SWAP_BYTES -c -o arpa_bo_ng_prob.o arpa_bo_ng_prob.c

gcc -O -DSLM_SWAP_BYTES -c -o calc_prob_of.o calc_prob_of.c

gcc -O -DSLM_SWAP_BYTES -c -o decode_bo_case.o decode_bo_case.c

gcc -O -DSLM_SWAP_BYTES -c -o gen_fb_list.o gen_fb_list.c

gcc -O -DSLM_SWAP_BYTES -c -o load_lm.o load_lm.c

load_lm.c: In function ‘load_arpa_lm’:

load_lm.c:350: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result

gcc -O -DSLM_SWAP_BYTES -c -o parse_comline.o parse_comline.c

gcc -O -DSLM_SWAP_BYTES -c -o perplexity.o perplexity.c

gcc -O -DSLM_SWAP_BYTES -c -o stats.o stats.c

gcc -O -DSLM_SWAP_BYTES -c -o validate.o validate.c

gcc -O -DSLM_SWAP_BYTES -c -o pc_libs/pc_comline.o pc_libs/pc_comline.c

gcc -O -DSLM_SWAP_BYTES -c -o pc_libs/pc_message.o pc_libs/pc_message.c

gcc -O -DSLM_SWAP_BYTES -c -o rr_libs/parse_line.o rr_libs/parse_line.c

gcc -O -DSLM_SWAP_BYTES -c -o rr_libs/quit.o rr_libs/quit.c

rr_libs/quit.c: In function ‘quit’:

rr_libs/quit.c:30: warning: incompatible implicit declaration of built-in function ‘exit’

gcc -O -DSLM_SWAP_BYTES -c -o rr_libs/rd_wlist_arry.o rr_libs/rd_wlist_arry.c

gcc -O -DSLM_SWAP_BYTES -c -o rr_libs/read_voc.o rr_libs/read_voc.c

gcc -O -DSLM_SWAP_BYTES -c -o rr_libs/read_wlist_si.o rr_libs/read_wlist_si.c

gcc -O -DSLM_SWAP_BYTES -c -o rr_libs/rr_calloc.o rr_libs/rr_calloc.c

gcc -O -DSLM_SWAP_BYTES -c -o rr_libs/rr_feof.o rr_libs/rr_feof.c

gcc -O -DSLM_SWAP_BYTES -c -o rr_libs/rr_fexists.o rr_libs/rr_fexists.c

gcc -O -DSLM_SWAP_BYTES -c -o rr_libs/rr_filesize.o rr_libs/rr_filesize.c

gcc -O -DSLM_SWAP_BYTES -c -o rr_libs/rr_fopen.o rr_libs/rr_fopen.c

gcc -O -DSLM_SWAP_BYTES -c -o rr_libs/rr_fread.o rr_libs/rr_fread.c

gcc -O -DSLM_SWAP_BYTES -c -o rr_libs/rr_fseek.o rr_libs/rr_fseek.c

gcc -O -DSLM_SWAP_BYTES -c -o rr_libs/rr_fwrite.o rr_libs/rr_fwrite.c

gcc -O -DSLM_SWAP_BYTES -c -o rr_libs/rr_iopen.o rr_libs/rr_iopen.c

gcc -O -DSLM_SWAP_BYTES -c -o rr_libs/rr_malloc.o rr_libs/rr_malloc.c

gcc -O -DSLM_SWAP_BYTES -c -o rr_libs/rr_oopen.o rr_libs/rr_oopen.c

gcc -O -DSLM_SWAP_BYTES -c -o rr_libs/salloc.o rr_libs/salloc.c

gcc -O -DSLM_SWAP_BYTES -c -o rr_libs/sih.o rr_libs/sih.c

rr_libs/sih.c: In function ‘sih_val_read_from_file’:

rr_libs/sih.c:255: warning: comparison between pointer and integer

rm -f SLM2.a

ar r SLM2.a bo_ng_prob.o calc_mem_req.o compute_back_off.o compute_discount.o compute_unigram.o get_ngram.o increment_context.o lookup_index_of.o short_indices.o two_byte_alphas.o write_lms.o num_of_types.o guess_mem.o counts.o arpa_bo_ng_prob.o bo_ng_prob.o calc_prob_of.o decode_bo_case.o gen_fb_list.o load_lm.o lookup_index_of.o parse_comline.o perplexity.o short_indices.o stats.o two_byte_alphas.o validate.o num_of_types.o counts.o load_lm.o write_lms.o short_indices.o two_byte_alphas.o num_of_types.o stats.o counts.o get_ngram.o pc_libs/pc_comline.o pc_libs/pc_message.o rr_libs/parse_line.o rr_libs/quit.o rr_libs/rd_wlist_arry.o rr_libs/read_voc.o rr_libs/read_wlist_si.o rr_libs/rr_calloc.o rr_libs/rr_feof.o rr_libs/rr_fexists.o rr_libs/rr_filesize.o rr_libs/rr_fopen.o rr_libs/rr_fread.o rr_libs/rr_fseek.o rr_libs/rr_fwrite.o rr_libs/rr_iopen.o rr_libs/rr_malloc.o rr_libs/rr_oopen.o rr_libs/salloc.o rr_libs/rr_malloc.o rr_libs/rr_oopen.o rr_libs/salloc.o rr_libs/sih.o

ar: creating SLM2.a

if [ `uname` = SunOS -o `uname` = Linux ] ; then ranlib SLM2.a ; fi

gcc -O -DSLM_SWAP_BYTES -o idngram2lm idngram2lm.c SLM2.a -lm

gcc -O -DSLM_SWAP_BYTES -o evallm evallm.c SLM2.a -lm

gcc -O -DSLM_SWAP_BYTES -o text2wngram text2wngram.c SLM2.a -lm

gcc -O -DSLM_SWAP_BYTES -o text2idngram text2idngram.c SLM2.a -lm

gcc -O -DSLM_SWAP_BYTES -o binlm2arpa binlm2arpa.c SLM2.a -lm

gcc -O -DSLM_SWAP_BYTES -o ngram2mgram ngram2mgram.c SLM2.a -lm

gcc -O -DSLM_SWAP_BYTES -o idngram2stats idngram2stats.c SLM2.a -lm

gcc -O -DSLM_SWAP_BYTES -o wfreq2vocab wfreq2vocab.c SLM2.a -lm

gcc -O -DSLM_SWAP_BYTES -o text2wfreq text2wfreq.c SLM2.a -lm

gcc -O -DSLM_SWAP_BYTES -o wngram2idngram wngram2idngram.c SLM2.a -lm

gcc -O -DSLM_SWAP_BYTES -o mergeidngram mergeidngram.c SLM2.a -lm

gcc -O -DSLM_SWAP_BYTES -o interpolate interpolate.c SLM2.a -lm

for i in idngram2lm evallm text2wngram text2idngram binlm2arpa ngram2mgram idngram2stats wfreq2vocab text2wfreq wngram2idngram mergeidngram interpolate; do /

./install-sh $i ../bin; /

done

./install-sh SLM2.a ../lib

 

然后进入giza-pp目录,安装mkclsGIZA++

 

3)安装mkcls-v2

tianliang@ubuntu:~/research/CMU-Cam_Toolkit_v2/src$ cd ..

tianliang@ubuntu:~/research/CMU-Cam_Toolkit_v2$ cd ..

tianliang@ubuntu:~/research$ cd giza-pp

tianliang@ubuntu:~/research/giza-pp$ cd mkcls-v2

tianliang@ubuntu:~/research/giza-pp/mkcls-v2$ make

 

g++ -Wall -W -DNDEBUG -O3 -Wno-deprecated -c GDAOptimization.cpp –o GDAOptimization.o
g++ -Wall -W -DNDEBUG -O3 -Wno-deprecated -c HCOptimization.cpp -o HCOptimization.o
g++ -Wall –W -DNDEBUG -O3 -Wno-deprecated -c Problem.cpp -o Problem.o
g++ -Wall -W -DNDEBUG -O3 -Wno-deprecated -c IterOptimization.cpp -IterOptimization.o
g++ -Wall -W -DNDEBUG -O3 -Wno-deprecated -c ProblemTest.cpp -o ProblemTest.o
g++ -Wall -W -DNDEBUG -O3 -Wno-deprecated -c RRTOptimization.cpp -o RRTOptimization.o
g++ -Wall -W -DNDEBUG -O3 -Wno-deprecated -c MYOptimization.cpp -o MYOptimization.o
g++ -Wall -W -DNDEBUG -O3 -Wno-deprecated -c SAOptimization.cpp -o SAOptimization.o
g++ -Wall -W -DNDEBUG -O3 -Wno-deprecated -c TAOptimization.cpp -o TAOptimization.o
g++ -Wall -W -DNDEBUG -O3 -Wno-deprecated -c Optimization.cpp -o Optimization.o
g++ -Wall -W -DNDEBUG -O3 -Wno-deprecated -c KategProblemTest.cpp –oKategProblemTest.o
g++ -Wall -W -DNDEBUG -O3 -Wno-deprecated -c KategProblemKBC.cpp -o KategProblemKBC.o
g++ -Wall -W -DNDEBUG -O3 -Wno-deprecated -c KategProblemWBC.cpp -o KategProblemWBC.o
g++ -Wall -W -DNDEBUG -O3 -Wno-deprecated -c KategProblem.cpp -o KategProblem.o
g++ -Wall -W -DNDEBUG -O3 -Wno-deprecated -c StatVar.cpp -o StatVar.o
g++ -Wall -W -DNDEBUG -O3 -Wno-deprecated -c general.cpp -o general.o
g++ -Wall -W -DNDEBUG -O3 -Wno-deprecated -c mkcls.cpp -o mkcls.o
g++ -Wall -W -DNDEBUG -O3 -Wno-deprecated -o mkcls GDAOptimization.o HCOptimization.o Problem.o IterOptimization.o ProblemTest.o RRTOptimization.o MYOptimization.o SAOptimization.o TAOptimization.o Optimization.o KategProblemTest.o KategProblemKBC.o KategProblemWBC.o KategProblem.o StatVar.o general.o mkcls.o 
 
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值