训练语料是句子级别对齐的,词对齐工具用来从句子对齐中学习到词对齐,对齐这个概念可以理解成为两个词的翻译对应关系。理论知识不再介绍,感兴趣的看《统计机器翻译》

对齐工具有多个,这里选择使用GIZA++,

下载与编译

下载地址:github

下载完,解压后的路径结构:

其实,这里包含了两个工具,一个是GIZA++,一个是mkcls。make一下,编译。我的编译环境是:gcc version 4.4.4 20100726 (Red Hat 4.4.4-13) (GCC)。

编译完后,看到产生了多个可执行文件:mkcls,GIZA++,snt2cooc.out,plain2snt.out, snt2plain.out,同时看到有一个运行脚本trainGIZA++.sh。为方便使用,可以把这些可执行文件集中到一个bin文件夹中。

运行:


运行trainGIZA++.sh,看到Usage: trainGIZA++.sh vcb1 vcb2 snt,运行该脚本需要三个输入,前两个是两个语言的词汇表,第三个是两种语言的统计信息。下面就来构建所需的三个参数。

plain2snt.out工具是用来得到词汇表vcb的,调用方法:./plain2snt.out  train.ch.seg_stanford.half  train.en.token.half,运行后出现4个新文件。

其中两个vcb文件保存的是词汇表信息,包括:词id,词,词频。

两个snt是对词进行编号后表示的句子,每个句对对应snt文件中的三行,第一行是该句对出现的次数,下面两行是编码后的句子,两个snt不同之处在于一个句对的上下顺序颠倒,这取决于对齐方向。

脚本中的语句

./snt2plain.out $1 $2 $3 PLAIN,根据词汇表把编码文件映射回字符串语料的形式。$1是源端词汇表,$2是目标端词汇表,$3是源端到目标端的snt文件,PLAIN是输出文件名。命令执行完后,出现两个文件。如果语料没有什么问题的话,应该得到的是与训练语料一样的。如果训练语料中有空行,会被处理掉,造成行数减少,但不影响对应关系。如果对自己的训练语料比较自信,可以省去上面的该步。

如果想使用IBM Model 4 或是HMM Model,那就需要使用mkcls对词做聚类,相关文章见 Franz Josef Och, An Efficient Method for Determining Bilingual Word Classes

mkcls

常用参数:

-n 训练迭代次数,默认1次,较大的数值会得到较好的结果

-m 最低词频限制

-c 指定类别的数量

-p 待聚类的训练语料

-V 输出文件名,一般后缀是.vcb.classes

opt 优化运行

还有许多其他的参数,可以看其cpp文件。

聚类完后,得到两个文件,一个是.vcb.classes(词和类别的映射),另一个是.vcb.classes.cats(类别和词的映射),保存的都是聚类信息。

GIZA++是词语对齐算法,参数:

-S 源端词汇表

-T 目标端词汇表

-C 源端到目标端的snt文件

-CoocurrenceFile  共现文件 .cooc

-o 输出文件名的前缀

-d 指定字典文件名(字典文件的格式是两列,第一列是目标词id(Targetwordid),第二列是sourcewordid,词典按目标词编号排序,词典用来在model1中做计数和对齐的初始化)

-l(小写L) 指定日志文件名

-log 0代表写日志,1代表不写日志

-m1 ...-m6 :IBM model n 的迭代次数,m1默认5次,m2默认0次,m3默认5次,m4默认5次,m5默认0次,m6默认0次,mh默认5次。

-mh HMM model 的迭代次数

-p0 IBM-3/4 中的p0参数值

-m5p0 IBM model 5 中p_0参数值

其他的参数,见cpp文件

trainGIZA++.sh所需要的三个参数都有了,就可以跑了。修改脚本中每个可执行程序的路径,调用该sh,由于时间比较长,使用nohup提交比较合适:

nohup ./trainGIZA++.sh  train.ch.seg_stanford.half.vcb  train.en.token.half.vcb  train.ch.seg_stanford.half_train.en.token.half.snt &。发现GIZA++.log会报错,ERROR: NO COOCURRENCE FILE GIVEN!  这个时候就要用另一工具snt2cooc.out来做共现统计了。

snt2cooc.out 共现统计,Usage: ./snt2cooc.out vcb1 vcb2 snt12 >ch_en.cooc ,执行完毕会得到共现文件,文件内容是所有的共现词对,第一列是源端词id,第二列是目标端词id。

这个时候重新跑GIZA++程序,nohup ./GIZA++ -S  train.ch.seg_stanford.half.vcb -T train.en.token.half.vcb -C train.ch.seg_stanford.half_train.en.token.half.snt -p0 0.98 -o GIZA++ -CoocurrenceFile  ch_en.cooc > GIZA++.log 2>&1 &

程序执行完毕后,出现了多个文件:

GIZA++.A3.final :IBM model3 的对齐结果,第一行是句对信息,第二行是目标语言句子,第三行是源语言中每个词与目标语言词的对应关系(1对多)

GIZA++.a3.final:记录的是源端词位置和目标端词位置的概率关系,第一列是源端词位置i,第二列是目标端词位置j,第三列是源端句子长度l,第四列是目标端句子长度m,第五列是概率P(i|j,l,m)。位变(distortion)模型。

GIZA++.n3.final:繁衍率(fertility)文件,第一列是词编号,第n列是该单词被翻译成n-2个目标单词的概率p(n|id)。

GIZA++.t3.final:翻译概率表。第一列是源语言词编号,第二列是目标语言词编号,第三列是翻译概率P(t|s)。

GIZA++.d3.final:反向的位变模型,与a3类似,i和j交换。

GIZA++.D4.final:IBM model4中的位变模型,

GIZA++.d4.final:IBM model4 翻译表

GIZA++.trn.src.vcb:源端词汇表

GIZA++.trn.trg.vcb:目标端词汇表

GIZA++.Decoder.config:用作解码的配置文件,我们用GIZA++作词对齐功能,但它是一套翻译系统。

GIZA++.gizacfg:保存了所有的配置参数

GIZA++.perp:保存了训练过程中,多个模型每轮迭代的困惑度perlexity

GIZA++.p0_3.final:保存了p0参数值,不插入空值的概率

GIZA++.tst.src.vcb:由于没设置测试集,为空文件

GIZA++.tst.trg.vcb:由于没设置测试集,为空文件

利用开源工具搭一套汉英翻译系统(二):词对齐相关推荐

  1. 利用开源工具搭一套汉英翻译系统(四):解码器Moses

    解码器采用Moses,有其他选择. 官网:http://www.statmt.org/moses/ ,上面的manual.pdf非常有用. 下载地址:https://github.com/moses- ...

  2. 利用开源工具搭一套汉英翻译系统(一):预处理工具

    语料获取不在赘述,可以去LDC上申请,也可以找找别人放出的免费资源.语料编码默认都是UTF8. 在这里,我们使用FBIS语料,规模在24万句对左右.英语和汉语是两个文件,行对应,行数相同,train. ...

  3. 利用开源工具搭一套汉英翻译系统(三):语言模型工具SRILM

    语言模型工具选择使用SRILM.存在其他选择KenLM, IRSTLM. 下载地址:http://www.speech.sri.com/projects/srilm/download.html ,需要 ...

  4. android系统应用开发_利用ADB工具免root停用Android系统应用

    最近迷上了安卓的开发,写篇冻结app的教程吧. 主要是实现,免root冻结系统中的某些应用,你懂得哈哈 利用ADB工具免root停用Android系统应用 - Hanada​hanada.info 上 ...

  5. 利用开源工具实现轻量级上网行为审计 来源ispublic com

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 来源is ...

  6. 【愚公系列】2022年12月 .NET CORE工具案例-多语言离线翻译系统

    文章目录 前言 1.在线翻译 2.离线翻译 一.多语言离线翻译系统 1.开发环境 2.准备离线翻译包 3.准备python代码 4.调试翻译结果 5.Python翻译服务对接到.NET Core 前言 ...

  7. 工具推荐 | 利用开源工具查看MobaXterm远程终端工具存储的Session账号密码信息

    欢迎关注「WeiyiGeek」公众号 点击

  8. 利用开源工具实现轻量级上网行为审计(来源ispublic.com)

    https://blog.csdn.net/cnbird2008/article/details/5875781

  9. 控安轩辕实验室:利用开源项目实现定位和时间欺骗(二)

    GPS-SDR-SIM 项目是麻省理工学院许可下发布的开源 GPS 基带信号生成器项目.本期继续介绍该项目如何实现,想看上期请点链接https://mp.weixin.qq.com/s?__biz=M ...

  10. 如何提升 Linux 服务器安全的开源工具和技巧?

    本文基于我作为初学者迄今所学的知识,详细介绍了六个简单的步骤,以提高个人使用的 Linux 环境的安全性.在我的整个旅程中,我利用开源工具来加速我的学习过程,并熟悉了与提升 Linux 服务器安全有关 ...

最新文章

  1. 深度学习100问:什么是深监督(Deep Supervision)?
  2. 怎么通过打工,在一线城市购买10套房?Snapchat程序员亲身分享经历!
  3. python并行for循环_Python并行执行for循环
  4. 开启httponly之后登陆失败_二次元约会模拟《少女都市》正式版登陆Steam 橘势大好...
  5. ipython 模块搜索路径
  6. 那些年踩过的坑之:first-child伪类选择器
  7. Python-turtle库绘制蚊香、走动的时钟和数码管日期
  8. 人脸方向学习(十七):Face Detection-论文整理-解读
  9. Unity3D播放背景音乐
  10. bzoj千题计划278:bzoj4590: [Shoi2015]自动刷题机
  11. Qt_模仿siri语音动画 全平台语音动画
  12. Win10系统安装教程
  13. java lbp_LBP特征提取原理及代码实现
  14. 5G NR随机接入过程
  15. markdown合并单元格
  16. Vue项目中完成谷歌统计和百度统计功能
  17. timothy23242526-类+类的声明,继承和访问控制+重写和多态
  18. 大规模异构图召回在美团到店推荐广告的应用
  19. 画中画视频怎么制作?学会这招,让你成为短视频高手!
  20. Hello hello ~

热门文章

  1. 小程序 侧边栏(导航)滑动
  2. 三星a5009Android6.0,三星A5009 6.0 root教程及获取6.0的root权限
  3. 三星6.0系统机器(亲测有效)激活XPOSED框架的流程
  4. macd底背离的python_java尝试编写macd,试验顶背离底背离
  5. linux 基础环境安装教程,Linux安装及初始环境设置基础教程
  6. An unhandled exception occurred: listen EADDRNOTAVAIL: address not available
  7. php能不能用super,supersu怎么用
  8. android7.1刷supersu,安卓怎么刷SuperSU 安卓系统刷入超级授权SuperSU Pro方法
  9. 购买计算机网络设备的会计分录,企业购买设备的会计分录怎么写?
  10. qtdesigner添加菜单栏工具栏及监听事件