机器翻译系统的搭建
机器翻译系统的搭建
(NLP@NJU 潘林林)
1 实验目的
本实验主要是利用现有的自然语言处理的工具,在短时间内搭建一个统计机器翻译系统,因此本文主要介绍对现有工具的具体使用,而相关原理不作详细介绍。
2 准备工作
本实验是在windows操作系统下搭建的,全部操作都是在windows下执行的,下面是一些必要准备资源:
2.1 Windows操作系统
在windows操作系统下必须安装Visual Studio 2008,Cygwin
(http://www.cygwin.com),以及 perl(5.10.0 版本或更高,http://www.activestate.com/activeperl)。建议默认在“C:\”路径下安装cygwin。
2.2 双语对齐语料
本实验搭建的是将中文翻译成英文的机器翻译系统,因此采用的是中英对齐语料。本文使用的是下载自http://www.nlp.org.cn上双语对齐语料1500句对。
2.3 目标语言语料库
目标语言语料库是用来训练语言模型,在这里为了方便,我们直接采用双语对齐语料中的1500句英文句子。
2.4 开发语料
开发语料主要是对翻译时用到的特征进行权重调优,使得翻译效果更好,本实验采用的是东北大学自然语言处理组提供的数据集当中的开发语料400句对。
2.5 中文分词工具和英文的Tokenize工具
中文分词工具就是讲中文一个句子切分成一个一个短语,本实验采用的是segtag汉语切分标注工具。英文的Tokenize相当于中文的分词工具,只是处理对象是英文句子,本实验采用的是奚博的tokenizer。
2.6 GIZA++
GIZA++是词对齐工具,但是我们所了解的GIZA++词对齐工具是在Linux下运行的,本实验采用的是南京大学自然语言处理组黄书剑将GIZA++集成到windows下的批处理工具。
2.7 NiuTrans
本实验在解码过程中采用的是东北大学自然语言处理组的NiuTrans翻译系统中的解码工具,其中还利用此工具对目标语言模型进行了训练。
3 语料处理
3.1 语料划分
首先我们需要将1500句中英文句对划分到两个文本文档中,一个为chinese,存放中文句子(注意:原语料中有个中文句子占了2行,需要手动处理),一个为english,存放英文句子。只需要一段简单的java程序处理即可得到。
3.2 中文分词
由于本实验采用的是segtag汉语切分标注工具,它要求输入的文件必须是ANSI编码格式的,首先将chinese文件另存为编码格式是ANSI的。执行命令如下图1:
图1 中文分词命令
3.3 英文Tokenize
英文的Tokenize和中文分词不太一样,因为英文句子本身就是由一个一个单词组成,单词之间都由空格隔开。只是将缩写的例如:I’m分成I am,具体命令如下图2所示:
图2 英文Tokenize
其中:i后面的是输入的原英文文件,o后面是经过Tokenize的输出文件。
4 GIZA++进行词对齐
首先我们先了解下什么是词对齐,如下页表1是从GIZA++对齐文件中取出的一个稍加改进的例子。其中x是目标语言句子、y是源语言句子、a是对齐结果,比如“3-2”的意思就是说中文句子的第二个单词“在”对齐到英文的第四个单词“in”(英文句子从0开始标注)。
表1 词语对其示例
词语对齐工具GIZA++通过EM算法对给定的双语语料库进行双向对齐,通过交集(intersection)和并(union)的操作最终得到较好的词语对齐结果。通过以下两个条件,统计机器翻译系统利用短语对齐的结果进行短语的抽取。
- 分别从源语言句子x中和目标语言句子y中抽取连续的单词序列x' 和y',并且单词序列的长度不能超过k个单词。
- 连续的单词序列y' 和x' 的对齐信息a' 要由源语言和目标语言的对齐信息a构建而来,其中a' 至少要在a中包含一个连接。
下图3是词对齐的输入文件c.txt是中文句,e.txt是英文句。
图 3 词对齐输入语料
利用封装好的GIZA++进行词对齐处理得到词对齐Alignment.txt文件。
5 NiuTrans解码
Windows用户首先要对NiuTrans进行编译,利用Visual Studio 2008对NiuTrans.sln进行编译(注意系统是32位的编译时选择32位,64位的选择64位)。
5.1 数据准备
首先将数据存放在NiuTrans/sample/文件中,在此目录下还需要新建TM-training-set文件夹,下面存放chinese.txt、english.txt和Alignment.txt文件,用于训练翻译模型。
新建LM-training-set文件夹,下面存放e.lm.txt文件,用于训练N元语言模型。
新建Dev-set文件夹,下面存放Niu.dev.txt文件,用于对特征进行权重调优。
新建Test-set文件夹,下面存放Niu.test.txt文件,用于解码时测试。
5.2 训练翻译模型
由于NiuTrans中的训练翻译模型是用perl语言写的,所以构建系统之前要安装perl,并且还需要安装Cygwin。
在目录NiuTrans/下新建work文件夹,再在work文件夹下新建model.phrase文件夹。在windows系统的控制台下输入以下命令,训练翻译模型。
其中:“-tmdir”为生成各种表和模型文件的目标目录,“-s”,“-t”和“-a”分别指源语句子、目标语句子和二者的对齐结果(每行一句)。
在“NiuTrans/work/model.phrase/”目录中生成3个文件:
5.3 训练N元语言模型
在目录NiuTrans/wor/下新建lm文件夹。在windows系统的控制台下输入以下命令,训练N元语言模型。
其中:“-ngram”为N元语言模型中的元数。如,“-ngram 3”指3元语言模型。“-vocab”为所生成的目标语端语言模型词汇表。“-lmbin”为所生成的目标语端语言模型的二进制文件。
生成两个文件,放在目录“NiuTrans/work/lm/”中:
5.4 生成配置文件
运行下面命令生成用于解码的配置文件。
其中:“-tmdir”为包含短语翻译表和调序模型文件的目录。“-lmdir”为包含N元语言模型和目标语端词汇表的目录。“-ngram”为N元语言模型中的元数。“-o”为输出结果,即配置文件。生成配置文件并放在目录“NiuTrans/work/”下 。
5.5 特征权重调优
利用下面的命令对特征进行调优,将最优的特征用于对测试句的解码过程。
其中:“-dev”为权重调优的开发集。“-c”为以前的步骤中生成的配置文件。“-nref”为每个源语句子提供的参考译文的数量。“-r”为执行MERT程序的轮数 (初始设置为1轮 = 15 MERT 循环)。“-l”为MERT生成的log文件。 最优的特征权重被记录在配置文件“NiuTrans/work/NiuTrans.phrase.user.config”中。
5.6 解码测试
使用下面命令对翻译系统解码测试。
其中:“-test”为测试数据集(每行一句)。“-c”为配置文件。“-output”为翻译结果文件,在“NiuTrans/scripts/”目录下生成翻译结果文件1best.out。
Example:
我 不 知道 你 。
他 一 句 话 也 没有 说 。
Result:
not know me you .
a word him , said not .
6 结束语
本文做的是基于短语的机器翻译系统,主要描述了如何利用现有的工具搭建一个汉英机器翻译系统,对自然语言处理相关工具是使用有了一定的了解,对于机器翻译的具体流程有了清晰感。
附:在NiuTrans/scripts/的Run批处理文件,测试文件是Niutrans/sample/Test-set/Niu.test.txt,点击Run运行,在NiuTrans/scripts/下得到一个1best.out的翻译结果文件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步