摘 要:Linux环境中,大部分基于短语的统计机器翻译系统可以很方便的利用GIZA++训练得出的词语对齐结果。然而,对于许多习惯在Windows系统中从事科学研究的科研工作者却享受不到这种便利。虽然我们可以使用Cygwin或者虚拟机在Windows系统下模拟Linux系统,但是有时这样来回的切换很不方便。本文主要是想和大家分享一下我们如何在Windows系统中使用GIZA++进行词语对齐的一些经验。

 正文:

词语对齐是自然语言处理领域的一个基本的问题,许多基于双语语料库的应用(比如统计机器翻译(SMT)、基于实例的机器翻译(EBMT)、词义消歧(WSD)、词典编撰)都需要词汇级别的对齐。一般来讲,对齐可以有篇章(section)、段落(paragraph)、句子(sentence)、短语(phrase)、词语(word)等不同的级别的对齐,其目的就是从双语互译的文本中找出互译的片段。其中篇章、段落、句子的对齐技术主要用于语料库的整理,而短语和词语对齐,就是要找出相互翻译的文本中对应的词与词、词与短语、短语和短语之间的相互翻译对。现今的基于短语的统计机器翻译系统中,很大一部分程度依赖于词语对齐(word alignment)[Och et al.,2000;Yarowsky et al.,2000]。现在使用最多的词语对齐方法就是使用双语语料库来抽取词语对齐[Smadja et al.,1996;Melamed,2000],其中典型的代表也是本文中将使用的对齐软件就是GIZA++[Och,2000;Och et al.,2003]。

GIZA++的前身是GIZA(GIZA是由是统计机器翻译工具Egypt的一部分,Egypt是在1999年约翰霍普金斯大学统计机器翻译夏季讨论班上,由一些研究人员共同合作开发的统计机器翻译工具包。[1]),GIZA++实现了IBM公司提出的5个模型[Brown et al.,1993]和隐马尔科夫模型(HMM)[Och et al.,2003],其主要思想是利用EM算法对双语语料库进行迭代训练,由句子对齐得到词语对齐。由于GIZA++不依赖于具体的语言对,现在的统计机器翻译系统中几乎都使用了GIZA++进行词语对齐。表1是从GIZA++对齐文件中取出的一个稍加改进的例子。其中x是目标语言句子、y是源语言句子、a是对齐结果,比如“3-2”的意思就是说中文句子的第二个单词“在”对齐到英文的第四个单词“in”(英文句子从0开始标注)。

表 1. 词语对齐示例

x

I0 am1 studying2 in3 the4 university5 of6 Macau7 .8

y

NULL ({ 4 }) 我 ({ 0 }) 在({ 3 }) 澳门大学 ({ 5 6 7 }) 读书 ({ 1 2 })  。({ 8 })

a

4-0 0-1 3-2 5-3 6-3 7-3 1-4 2-4 8-5

在基于短语的统计机器翻译系统中,比如Moses[Koehn et al.,2007]词语对齐就显得非常重要,究其原因就是统计机器翻译的质量很大程度取决于一个叫做短语翻译(phrase table)的文件,而这个短语翻译表就来自于GIZA++的词语对齐结果。词语对齐工具GIZA++通过EM算法对给定的双语语料库进行双向对齐,通过交集(intersection)和并(union)的操作最终得到较好的词语对齐结果。通过以下两个条件,统计机器翻译系统利用短语对齐的结果进行短语的抽取[Galbrun,2009]:

(1)分别从源语言句子f中和目标语言句子e中抽取连续的单词序列f'e',并且单词序列的长度不能超过k个单词。

(2)连续的单词序列f'e' 的对齐信息a' 要由源语言和目标语言的对齐信息a构建而来,其中a' 至少要在a中包含一个连接。

表2给出了一个利用GIZA++中英对齐结果进行短语抽取的例子。

其中对齐为:<I-我><am-能够><able-能够><to-能够><do-做><it-它><well-好><.-。>

表 2. 利用GIZA++对其结果进行短语抽取示例

词语对齐

短语表

(我 ||| I);

(我 能够 ||| I am able to );

(我 能够 做 ||| I am able to do);

(我 能够 做 好 它 ||| I am able to do it well);

(我 能够 做 好 它 。||| I am able to do it well .);

(能够 ||| am able to );

(能够 做 ||| am able to do);

(能够 做 好 它 ||| am able to do it well);

(能够 做 好 它 。||| am able to do it well .);

(做 ||| do);

(做 好 它 |||  do it well);

(做 好 它 。 |||  do it well .);

(好 ||| well);

(好 它 ||| it well);

(好 它 。||| it well .);

(它 ||| it);

(它 。 ||| it .);

(。||| .)

现在步入正题:在实际的科研过程中,很多科研工作者经常使用Windows系统进行科学研究,而GIZA++现在运行于Linux, Irix and SUN等这些操作系统中,对Windows系统还不支持,这就给广大的科研工作者,尤其是熟悉Windows环境的学者带来了不方便。虽然中国有个网名叫做Blue Gene的人成功的把GIZA++移植到了Windows系统[2],可是仍然要像在Linux环境下一样在DOS界面中输入好多命令,并且要修改很多代码,很是费时。当然我们也可以借助于虚拟机在Windows中安装Linux系统,也可以借用Linux模拟工具Cygwin来操作GIZA++,可是仍然离不开命令行参数的输入。本文中我们的目的就是利用GIZA++生成的可执行程序来直接进行词语对齐,这样我们既可以完整的保留GIZA++的完整性,也可以节省了开发时间提高了科研效率。

系统开发过程中,我们利用Cygwin生成GIZA++的可执行文件,然后借用批处理技术,再加上微软的Visual Studio 2008,最终开发出了一个方便操作的词语对齐系统。

具体的方法就是:

首先使用Cygwin在windows中,编译GIZA++ ,生成可执行文件,主要需要:mkcls.exe,plain2snt.out, snt2cooc.out, GIZA++.exe

然后,把这些编译好的可执行文件,放入一个批处理文件中,表3给了一个例子:其中,chinese和english是我所采用的双语语料库文件名。

表 3. giza.bat批处理文件内容示例

giza.bat批处理文件命令行参数

mkcls.exe -c80 -n10 -pchinese -Vchinese.vcb.classes opt

mkcls.exe -c80 -n10 -p english -V english vcb.classes opt

plain2snt.out chinese english

GIZA++.exe -S chinese.vcb -T english.vcb -C chinese_english.snt

再其次就是使用VS 2008进行界面设计了。这里面的关键是如何去调用这些可执行文件。下面给出实用的函数等。

表4. 使用shellExecute()函数调用可执行文件

控制shellExecute()函数是否运行结束的方法

SHELLEXECUTEINFO sei; //定义变量

memset(&sei, 0, sizeof(SHELLEXECUTEINFO)); //在内存中填充数值

sei.cbSize = sizeof(SHELLEXECUTEINFO);

sei.fMask = SEE_MASK_NOCLOSEPROCESS;

sei.lpVerb = _T("open"); //打开可执行程序

sei.lpFile =_T( "GIZA++.exe"); //调用的程序名

sei.nShow = SW_HIDE; //调用的过程中不显示GIZA++的运行界面

ShellExecuteEx(&sei); //执行调用可执行文件

WaitForSingleObject(sei.hProcess, INFINITE); //等待程序运行后才执行其它程序

CloseHandle(sei.hProcess);   //关闭进程

通过这种方法,就可以把GIZA++弄到Windows中来使用了,就看你自己设计的界面美观程度了,直接一个按钮就可以使用GIZA++所有在Linux中的命令和效果。其中图一是我设计的最初效果,这里是完全使用GIZA++,这种方法的优点是使用简单,设计起来较容易。缺点就是速度比Linux下的GIZA++稍微慢点。当然了我现在设计的词语对齐就不在使用GIZA++了,图二是最新的效果,这种离开了GIZA++限制的对齐速度和效果要好多了。随着开发的完善,实验室准备免费提供给用户使用,希望对windows下需要的用户给予帮助。

图一,GIZA++ Windows 移植方法的界面,最初的设计。

图二,最新的不再采用GIZA++的对齐界面,这是多语句的对齐


1 http://www-i6.informatik.rwth-aachen.de/Colleagues/och/software/GIZA++.html

2 http://www.pudn.com/downloads135/sourcecode/windows/detail575412.html

运行于Windows中的GIZA++( GIZA++ working inWindows Platform)相关推荐

  1. 怎样用sc命令运行服务器,windows中的sc控制服务命令

    SC的语法 SC [Servername] command Servicename [Optionname= Optionvalues] Servername 远程服务器名称,可选,使用双斜线如\\1 ...

  2. 在Windows中运行Linux bash命令的几种方法

    如果你正在课程中正在学习 shell 脚本,那么需要使用 Linux 命令来练习命令和脚本. 你的学校实验室可能安装了 Linux,但是你自己没有安装了 Linux 的笔记本电脑,而是像其他人一样的 ...

  3. 服务器系统启用flash,windows无法启动flash helper service怎么办?_网站服务器运行维护,windows,flash helper service...

    win10如何禁止开机服务?_网站服务器运行维护 win10禁止开机服务的方法:首先在菜单中选择"运行"菜单项,并输入命令msconfig后点击确定按钮:然后依次点击[服务-隐藏所 ...

  4. Windows 中使用 Linux 命令

    如果要在 Windows 中运行 Linux 命令,那么 Cygwin 是一个推荐的工具.Cygwin 创建于 1995 年,旨在提供一个原生运行于 Windows 中的 POSIX 兼容环境.Cyg ...

  5. linux java的启动内存溢出,java - Java的R代码可在Linux上运行,但不能在Windows中运行 - 堆栈内存溢出...

    我在做什么? 我正在用Java编写一个数据分析程序,该程序依赖R的arulesViz库来挖掘关联规则. 我想要什么? 我的目的是将规则存储在Java中的String变量中,以便以后进行处理. 它是如何 ...

  6. windows中运行qt5构建的程序提示 无法启动此程序,因为计算机中丢失qt5Cored.dll 解决方法

    如果在windows中运行qt5构建的程序提示:无法启动此程序,因为计算机中丢失qt5Cored.dll 解决方法如下 1.用release构建项目 2.把缺少的dll文件,从C:\Qt\Qt5.0. ...

  7. Windows中cl命令编译运行C++

    Windows中cl命令编译运行C++ 在dos命令窗口,利用cl命令编译运行C++: 设置步骤: 1.正确安装Visual Studio 2019 我的安装路径是: "C:\Program ...

  8. windows中快捷键和windows运行中命令

    windows中   win+D:直接返回桌面   win+R:打开运行   win+E:打开资源管理器   ctrl+C:复制   ctrl+X:剪切   ctrl+V:复制   ctrl+D或者d ...

  9. 关于Windows中在cmd运行命令时卡住的问题

    由于一些不可抗力的原因,在公司工作的时候必须要用公司的windows系统的电脑,苦逼的我开始了一点一点在windows中安装工具.环境. 今天在windows的cmd中运行前端nodejs项目时出现了 ...

最新文章

  1. bs架构与cs架构的区别_Oracle vs Mysql--架构、sql查询执行流程及SQL解析顺序区别说明...
  2. !!!. 数据库的编程(ADO) --- 三种sql语句执行的不同
  3. 一起学windows phone7开发(二十二.使用系统资源)
  4. 竞赛发布|100万奖金寻DT时代“最强大脑”!
  5. 怎么扩展磁盘_电脑怎么增加C盘空间 小白教你不花钱增加C盘空间
  6. WPS的标题样式如何保存成默认
  7. foxmail收取服务器邮件次数,Foxmail:如何设置收取历史邮件?
  8. Vultr VPS如何修改root密码
  9. Exoplayer2 播放单个音频
  10. mfc改计算机名称,VC获取并修改计算机屏幕分辨率(MFC)
  11. HTML+CSS个人笔记
  12. 利用周末时间通过整合自己的编程知识写了一个微信朋友圈集赞程序
  13. JS 中文编码格式转换
  14. 【调度】一个著名的任务调度系统是怎么设计的?
  15. nginx开启https功能
  16. Linux 运行jar包的几种方式
  17. 女王大学计算机科学,女王大学计算机科学专业本科课件.pdf
  18. 项目管理 - PM、 SRS、SOW简介及范例
  19. 用DriverBackUp备份了文件 装好系统后怎么把备份的驱动文件还原
  20. ​Aqua Data Studio 22.2 Crack

热门文章

  1. Python数据预处理和PCA、ICA、LDA降维的方法(实验代码)
  2. 这是一篇绝无任何套路的产品规划方法论
  3. SAP S/4 物料分类账设置为生产
  4. 如何解决fgets读取popen内容阻塞的问题
  5. chatGPT中国入口-ChatGPT评论文章-ChatGPT怎么用
  6. OnlineJudge平台(负载均衡)
  7. 无人机航拍的技巧你知道吗?VR全景航拍应用在哪里?
  8. 【教程】获取实时反诈最新动态/案例
  9. css3如何写下拉菜单,css如何实现下拉菜单 超详细
  10. 确定因果随机森林的树木数量 the number of trees