用了半个月的时间,终于把中科院的丝路(silkroad)翻译系统成功编译和使用

85 views
Skip to first unread message

lonelysheep

unread,
Dec 18, 2007, 6:13:31 PM12/18/07
to 语言技术中心论坛
用了半个月的时间,终于把中科院的丝路(silkroad)翻译系统成功编译和使用(使用上还不太正常)
丝路本身有一个自说明文档,但是有些地方还是不太详细,我就看着这个文档,兜了很长时间圈子,把我遇到的问题和解决方法都写下来。
首先来谈谈机器翻译系统的构建,都需要什么:
一 语料库
丝路是基于统计的机器翻译系统,肯定少不了大量的统计数据,所以需要一个语料库,进行统计。我使用的是下载自http://
www.nlp.org.cn/上的中英对齐语料库,规模为 1500 句对。 但是中文,英文是在一个文件中的,在使用语料过程中,要求中文都在一个
文件中,英文在一个文件中,所以首先要写程序,把这1500句中英文拆开,方法也很简单,英文的asc码是大于零的,而中文无论是用那种编码格式
(gb2312,big5等),第一个字节都是小于零的,所以根据这个简单原则,就可以区分中英文,然后分别把中文存在chinese,英文在
english
二 语言模型
语言模型被广泛应用于自然语言处理的各个领域,来衡量某种语言中一个句子符合语法的程度。例如,有如下两个英语句子:
there is a cup on the table
therer are a cup on the table
在人类看来, 显然第一个句子更符合英语语法, 单数形式的谓语动词应该是 "is" , 而不是 "are" 。但是,如何
让计算机知道这一知识呢?这项工作由语言模型来完成。语言模型实际上是一种概率分布,它给出了一种语言中所有可能的句子出现的概率。在它看来,一种语言
中,任何可能的单词排列都是可能被接受的句子,只是被接受的概率不同。在统计机器翻译中,根据从语料库中获取的知识(例如单词的翻译概率等) ,一句话
可能有很多译文。有些符合语法和人们的表达习惯 ,有些则可能不符合语法。语言模型赋予这些句子不同的概率,用以选择最优的译文。
三 翻译模型
翻译模型是两种文字翻译的时候,一种文字被翻译成另一种文字的概率统计表,翻译模型是把一种人的话翻译成另一种人的话,语言模
型是为了人的话看起来更像人说的话。
四 解码器
解码器通过使用语言模型和翻译模型,达到最终的翻译目的
下面是如何构建这三个模块。

一 对语料库进行预处理
我使用的是下载自http://www.nlp.org.cn/上的中英对齐语料库,规模为 1500 句对。 但是中文,
英文是在一个文件中的,在使用语料过程中,要求中文都在一个文件中,英文在一个文件中,所以首先要写程序,把这1500句中英文拆开,方法也很简单,英
文的asc码是大于零的,而中文无论是用那种编码格式(gb2312,big5等),第一个字节都是小于零的,所以根据这个简单原则,就可以区分中英
文,然后分别把中文存在chinese文件中,英文在english文件中
二 构建语言模型
构建语言模型有三种工具,我采用的srilm
在linux下编译遇到麻烦,总是报错,我参照http://weiqk.spaces.live.com/blog/
cns!2115755AE5F9E79!221.entry的文章,修改了Makefile,也没有能解决问题,无意之中发现ubuntu的源里面就
有srilm,安装srilm和srilm-dev
sudo apt-get install srilm
sudo apt-get install srilm-dev
命令如下:
$ngram-count -interpolate -kndiscount1 -kndiscount2 -
kndiscount3 -text english -lm english.lm
上面的命令行中english为目标语言的文件名,english.lm为要生成的语言模型的文件名。通过以上训练将得到一个三元的语言模型文件。这样
语言模型就构建完成了
三 构建翻译模型
下载 mkcls.2003-09-30.tar.gz,解压后复制到 ICTSMTS目录下,进入 mkcls-v2目
录。
输入命令"make",这样就会编译生成 mkcls。在 mkcls-v2目录下建立一个子目录 temp,将 mkcls、chinese 和
english 拷贝到temp 目录中. 输入命令"./mkcls -c80 -n10 -pchinese -
Vchinese.vcb.classes opt", 生成两个文件:chinese.vcb.classes 和
chinese.vcb.classes.cats。输入命令"./mkcls -c80 -n10 -penglish -
Venglish.vcb.classes opt", 生成两个文件:english.vcb.class 和
english.vcb.classes.cats。
之后GIZA++对语料库进行双向学习(GIZA安装中会存在编译器不匹配的问题,可以从http://cl.naist.jp/
~eric-n/ubuntu-nlp/dists/dapper/all/下载GIZA V2版,make直接编译就可以),编译生成GIZA++和
plain2snt.out是我们需要的
输入命令"./plain2snt.out chinese english",生成四个文件:
chinese.vcb,english.vcb,chinese_english.snt 和 english_chinese.snt。 在
GIZA++-v2 目录建立一个子目录 test,将 GIZA++,chinese.vcb,english.vcb,
chinese_english.snt,chinese.vcb.classes,chinese.vcb.classes.cats,english.vcb.class
和english.vcb.classes.cats复制到 test目录里。 输入命令"./GIZA++ -S english.vcb -T
chinese.vcb -C english_chinese.snt"。生成的文件*.A3.final是需要的对齐文件,改名为e2f,这个文件
是从英文到中文的对齐结果,然后输入命令"./GIZA++ -S chinese.vcb -T english.vcb -C
chinese_english.snt"。这个是从中文到英文对齐,修改生成的文件*.A3.final 重命名为f2e。
以上就生成了双向对其文件。
@使用词语对齐"楼兰":
虽然这个软件可以编译通过,但是运行时存在问题,在文件align_word中,找到
strresult=strto(NULL,")"); 这一句,将参数NULL替换成任意的字符串,例如
strresult=strto("align",")"); 编译生成align_word.exe
将刚才生成的e2f和f2e两个文件和align_word.exe拷贝到同一个文件夹下,运行
align_word.exe e2f f2e
生成文件****_Alignment.xml.如果前面把NULL替换成"align",就会生成align_Alignment.xml
@短语抽取 "胡杨"
可以完全根据丝路的自说明文档来进行,但是注意在生成词典时,会在文件dictionary.cpp编译出错,修改
string english(CEpair,pos1+1);为string english(CEpair,0,pos1+1);编译成功。
按照丝路自说明文档,最后生成文件Phrase_Probability.txt就是需要的翻译模型。


三 构建解码器
我使用的是CAMEL,我是在windows下编译的,会报错,提示缺少某个库文件,具体怎么解决的时间太长了,已经模糊了,
但是不难解决,我就花了一个小时的时间,将语言模型文件english.lm和翻译模型Phrase_Probability.txt拷贝到CAMEL
执行文件夹下,然后参照手册修改配置文件。然后执行
CAMEL -conf configurefile -test-fi testfile -result-file
resultfile
翻译后的结果存储在resultfile中

基本上构建翻译系统就完成了,还有就是评价翻译好坏的评价系统,还没有构建

Reply all
Reply to author
Forward
0 new messages