统计机器翻译(SMT)步骤总结
本文是在Niutrans论坛中的系列教程中总结出来的。
1、语料预处理
预处理的结果是生成双语分词之后的文件,该步需要注意的是对规则短语,比如数字、日期、网址等,进行泛化处理。可以用正则方法或者其它方法。注意日期中的点和外文人名中的点和网址中的点和句末标点要区分开来,数字和日期也要区分开来。
其中变化比较大的,比较难处理的,应该是中文的日期,因为它的格式比较多变。从文本中抽取出来中文日期时间(或者更进一步的转化成标准的时间格式),有一个办法,就是用trie树进行抽取,相较于写一大堆翻乱的正则表达式而言,它具有逻辑清晰,扩展简单,代码复杂度低的优点。具体算法过程会在后续的文章中详细解说。就SMT的具体功能而言,在这一步其实只要把稍微规则的时间格式,比如2014-11-7,13:15这类的格式泛化出来就可以了;像诸如【三月8号下午6点半】【后天晚上7点】这类的,没必要也泛化出来,其中包含的数字泛化出来即可,对结果的准确性影响不大。
在泛化之后的双语中(特指不同种语言,比如中英文),最好检查一下泛化的一致性,比如在中文中有多少个数字,英文中也要有对应的数目,时间日期网址等的个数也要相等。
而在文白双语中,因为古文的语法语义跟现在有出入,可以不做处理。这一步可以弱化甚至不做。即只需要简单的分词即可,古文的分词方法也需要斟酌,在实践中我们采取的是一元分词,即一字一词。
2、词对齐
词对齐阶段使用GIZA++进行单向对齐(实现了IBM model 1~5,具体算法我也在学习中),然后结合两个单向对齐结果,利用对称算法生成最终的对齐结果。
对称算法大概是这样的,先根据两个结果生成一个矩阵。$M_{ij}$保存对齐结果:1)i与j双向对齐;2)i对齐j;3)j对齐i;4)i与j没有对齐。
1,把所有的1)节点加入结果集;
2,检查结果集的每个节点的前后左右邻居,有孤立无主的(即只与它相邻的2或者3情况),吸附过去;
3,剩下的孤立的2)或者3)也加入结果集。
完毕。图就不画了。
3、短语抽取
第二步词对齐结果生成一个bit矩阵,1代表对齐,2代表不对齐,其基本单位是第一步分词后的单个词。
该步可算是广义的词对齐,其单位是第二步的对此词对,基于生成的bit矩阵。目标是抽取出双语中的短语对。
短语对需要满足一致性要求。所谓一致性,可简单概括为封闭性和非空性。封闭性指的是短语中包含的词汇的对齐方必在另一个短语中,不外漏;非空性指短语对中至少含有一对单词是对齐了的。
在满足一致性要求下,给出短语对大长度,即可找出所有满足一致性要求的短语对。算法如下:
若要找出长度为len的短语对,对bit矩阵以len为窗口大小水平滑动,逐个check窗口中的短语对是否满足一致性要求,check的标准是窗口框定的集合中没有外部邻居即可。若遇到某列全0,以上列非零列所在行为行。
4、计算短语概率
上一步抽取出来满足一致性的短语对,这一步对短语对的概率进行估计,用极大似然估计,公式大概如下(第一次用mathjax书写公式,看看效果):
\[ p\left(f|e\right)=\frac{count\left(e,f\right)}{count\left(e\right)}\]
这是短语翻译概率,出来两个概率。另外还有双向词汇化翻译概率,再出来两个概率。共4个概率。
5、最大熵调序
这一步根据上一步的结果对短语进行调序,用到了语言模型。
统计机器翻译(SMT)步骤总结的更多相关文章
- 自然语言处理(四)统计机器翻译SMT
1.统计机器翻译三要素 1.翻译模型 2.语言模型 3.排序模型 2.翻译流程 1.双语数据预处理 2.词对齐 3.构造短语翻译表 4.对短语翻译表进行概率估计 5.解码,beam search 6. ...
- 基于短语的统计机器翻(PBMT) 开源工具 :Moses
如何运行Moses 1. Moses的历史 Moses是Pharaoh的升级版本,增加了许多功能.它是一个基于短语的统计机器翻译系统,整个系统用C++语言写成,从训练到解码完全开放源代码,可以运行在L ...
- NLP教程(6) - 神经机器翻译、seq2seq与注意力机制
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...
- 神经机器翻译(NMT)相关资料整理
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 简介 自2013年提出了神经机器翻译系统之后,神经机器翻译系统 ...
- 验证Oracle收集统计信息参数granularity数据分析的力度
最近在学习Oracle的统计信息这一块,收集统计信息的方法如下: DBMS_STATS.GATHER_TABLE_STATS ( ownname VARCHAR2, ---所有者名字 tabname ...
- jacoco统计server端功能测试覆盖率
jacoco可以统计,功能测试时,server代码调用的覆盖情况.这里对服务器端的java代码进行统计. 操作步骤如下: 第一步:更改server的启动脚本,使用jacocoagent.jar ...
- 神经机器翻译 - NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE
论文:NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE 综述 背景及问题 背景: 翻译: 翻译模型学习条件分布 ...
- 李航《统计学习方法》CH01
CH01 统计学方法概论 前言 章节目录 统计学习 监督学习 基本概念 问题的形式化 统计学习三要素 模型 策略 算法 模型评估与模型选择 训练误差与测试误差 过拟合与模型选择 正则化与交叉验证 正则 ...
- 测试Oracle统计信息的导出导入
背景:有时我们会希望可以对Oracle的统计信息整体进行导出导入.比如在数据库迁移前后,希望统计信息保持不变;又比如想对统计信息重新进行收集,但是担心重新收集的结果反而引发性能问题,想先保存当前的统计 ...
随机推荐
- Count The Carries
hdu:http://acm.hdu.edu.cn/showproblem.php?pid=4588 题意:给你 a,b两个数,然后让a到b之间的数做2进制的加法,问你与多少次进位.例如:1,3,1+ ...
- codeforces B. Prison Transfer
题意:输入n,t,c,再输入n个数,然后问有多少个连续区间内的最大值小于等于t; #include <cstdio> #include <cstring> #include & ...
- 汇编cmp比较指令详解
刚刚看到了cmp指令,一开始有点晕.后来上网找了些资料,终于看明白了,为了方便初学者,我就简单写下我的思路吧.高手绕过,谢谢! cmp(compare)指令进行比较两个操作数的大小 例:cmp opr ...
- "Redis客户端连接数一直降不下来"的有关问题解决
[线上问题] "Redis客户端连接数一直降不下来"的问题解决 前段时间,上线了新的 Redis缓存(Cache)服务,准备替换掉 Memcached. 为什么要将 Memcach ...
- 修改css
.content{ height: 100%; } .con{ border: 1px solid #eeeeee; display: inline-block; width:86.8%; ##修改这 ...
- 【Linux】鸟哥的Linux私房菜基础学习篇整理(九)
1. quotacheck [-avugfM] [/mount_point]:扫描文件系统并创建Quota配置文件.参数:-a:扫描所有在/etc/mtab内,含有quota支持的文件系统,加上此参数 ...
- Qt入门(11)——Qt插件
Qt提供了一个简单地插件接口,可以轻松地生成作为独立组件的定制数据库驱动.图象格式.文本编解码器(text codec).风格(style)和部件.警告:Qt 3.0.5对插件的一些方面做了改变,具体 ...
- 2015第37周五javascript函数arguments对象巧用一
Javascript函数的一个巧妙利用:假定action中有一个JSONObject类型的对象data,其值有可能为空,则前台JSP页面的JS代码中想直接通过EL表达式,即${data}的形式访问对象 ...
- 【宽搜】ECNA 2015 D Rings (Codeforces GYM 100825)
题目链接: http://codeforces.com/gym/100825 题目大意: 给你一张N*N(N<=100)的图表示一个树桩,'T'为年轮,'.'为空,求每个'T'属于哪一圈年轮,空 ...
- datagridview,textbox,combobox的数据绑定,数据赋值,picturebox的用法
一:datagridview数据绑定 二:textbox的数据绑定(datetimepicker) 总结: 最好还是写成双向绑定那种,不要再写出发事件了,只要在给textbox赋值就能重新绑定了,不然 ...