利用开源工具搭一套汉英翻译系统(二):词对齐
训练语料是句子级别对齐的,词对齐工具用来从句子对齐中学习到词对齐,对齐这个概念可以理解成为两个词的翻译对应关系。理论知识不再介绍,感兴趣的看《统计机器翻译》
对齐工具有多个,这里选择使用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:由于没设置测试集,为空文件
利用开源工具搭一套汉英翻译系统(二):词对齐相关推荐
- 利用开源工具搭一套汉英翻译系统(四):解码器Moses
解码器采用Moses,有其他选择. 官网:http://www.statmt.org/moses/ ,上面的manual.pdf非常有用. 下载地址:https://github.com/moses- ...
- 利用开源工具搭一套汉英翻译系统(一):预处理工具
语料获取不在赘述,可以去LDC上申请,也可以找找别人放出的免费资源.语料编码默认都是UTF8. 在这里,我们使用FBIS语料,规模在24万句对左右.英语和汉语是两个文件,行对应,行数相同,train. ...
- 利用开源工具搭一套汉英翻译系统(三):语言模型工具SRILM
语言模型工具选择使用SRILM.存在其他选择KenLM, IRSTLM. 下载地址:http://www.speech.sri.com/projects/srilm/download.html ,需要 ...
- android系统应用开发_利用ADB工具免root停用Android系统应用
最近迷上了安卓的开发,写篇冻结app的教程吧. 主要是实现,免root冻结系统中的某些应用,你懂得哈哈 利用ADB工具免root停用Android系统应用 - Hanadahanada.info 上 ...
- 利用开源工具实现轻量级上网行为审计 来源ispublic com
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 来源is ...
- 【愚公系列】2022年12月 .NET CORE工具案例-多语言离线翻译系统
文章目录 前言 1.在线翻译 2.离线翻译 一.多语言离线翻译系统 1.开发环境 2.准备离线翻译包 3.准备python代码 4.调试翻译结果 5.Python翻译服务对接到.NET Core 前言 ...
- 工具推荐 | 利用开源工具查看MobaXterm远程终端工具存储的Session账号密码信息
欢迎关注「WeiyiGeek」公众号 点击
- 利用开源工具实现轻量级上网行为审计(来源ispublic.com)
https://blog.csdn.net/cnbird2008/article/details/5875781
- 控安轩辕实验室:利用开源项目实现定位和时间欺骗(二)
GPS-SDR-SIM 项目是麻省理工学院许可下发布的开源 GPS 基带信号生成器项目.本期继续介绍该项目如何实现,想看上期请点链接https://mp.weixin.qq.com/s?__biz=M ...
- 如何提升 Linux 服务器安全的开源工具和技巧?
本文基于我作为初学者迄今所学的知识,详细介绍了六个简单的步骤,以提高个人使用的 Linux 环境的安全性.在我的整个旅程中,我利用开源工具来加速我的学习过程,并熟悉了与提升 Linux 服务器安全有关 ...
最新文章
- 深度学习100问:什么是深监督(Deep Supervision)?
- 怎么通过打工,在一线城市购买10套房?Snapchat程序员亲身分享经历!
- python并行for循环_Python并行执行for循环
- 开启httponly之后登陆失败_二次元约会模拟《少女都市》正式版登陆Steam 橘势大好...
- ipython 模块搜索路径
- 那些年踩过的坑之:first-child伪类选择器
- Python-turtle库绘制蚊香、走动的时钟和数码管日期
- 人脸方向学习(十七):Face Detection-论文整理-解读
- Unity3D播放背景音乐
- bzoj千题计划278:bzoj4590: [Shoi2015]自动刷题机
- Qt_模仿siri语音动画 全平台语音动画
- Win10系统安装教程
- java lbp_LBP特征提取原理及代码实现
- 5G NR随机接入过程
- markdown合并单元格
- Vue项目中完成谷歌统计和百度统计功能
- timothy23242526-类+类的声明,继承和访问控制+重写和多态
- 大规模异构图召回在美团到店推荐广告的应用
- 画中画视频怎么制作?学会这招,让你成为短视频高手!
- Hello hello ~
热门文章
- 小程序 侧边栏(导航)滑动
- 三星a5009Android6.0,三星A5009 6.0 root教程及获取6.0的root权限
- 三星6.0系统机器(亲测有效)激活XPOSED框架的流程
- macd底背离的python_java尝试编写macd,试验顶背离底背离
- linux 基础环境安装教程,Linux安装及初始环境设置基础教程
- An unhandled exception occurred: listen EADDRNOTAVAIL: address not available
- php能不能用super,supersu怎么用
- android7.1刷supersu,安卓怎么刷SuperSU 安卓系统刷入超级授权SuperSU Pro方法
- 购买计算机网络设备的会计分录,企业购买设备的会计分录怎么写?
- qtdesigner添加菜单栏工具栏及监听事件