统计机器翻译(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的统计信息整体进行导出导入.比如在数据库迁移前后,希望统计信息保持不变;又比如想对统计信息重新进行收集,但是担心重新收集的结果反而引发性能问题,想先保存当前的统计 ...
随机推荐
- stm32 smartcard调试--不用st8024
关于stm32 smartcard功能调试,官方提供的例程是配合8024芯片进行控制的.程序可从地址:http://www.pudn.com/downloads420/sourcecode/embed ...
- 疯狂java讲义笔记 2.3.7
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...
- 把CSV文件导入到SQL Server表中
保存数据库数据直接查询select * from tableName 在数据表格的左上角右击——将结果另存为选择路劲保存好的就是.csv格式的数据 有时候我们可能会把CSV中的数据导入到某个数据库的表 ...
- Eight(bfs+全排列的哈希函数)
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22207 Accepted: 9846 Special Judge ...
- 「Poetize5」Vani和Cl2捉迷藏
描述 Description 这片树林里有N座房子,M条有向道路,组成了一张有向无环图.树林里的树非常茂密,足以遮挡视线,但是沿着道路望去,却是视野开阔.如果从房子A沿着路走下去能够到达B,那么在A和 ...
- FFT(快速傅里叶变换):UVAoj 12298 - Super Poker II
题目:就是现在有一堆扑克里面的牌有无数张, 每种合数的牌有4中不同花色各一张(0, 1都不是合数), 没有质数或者大小是0或者1的牌现在这堆牌中缺失了其中的 c 张牌, 告诉你a, b, c接下来c张 ...
- 【动态规划】Vijos P1037 搭建双塔
题目链接: https://vijos.org/p/1037 题目大意: 给n块砖的长度(n<=100),问从中任选m块砖能否建成2个相同高度的塔. 能的话求最高高度,不能输出 Impossib ...
- 从字符串总分离文件路径、命名、扩展名,Substring(),LastIndexOf()的使用;替换某一类字符串,Replace()的用法
一:从字符串总分离文件路径.命名.扩展名,上图 二:代码 using System; using System.Collections.Generic; using System.ComponentM ...
- Simplify Path——LeetCode
Given an absolute path for a file (Unix-style), simplify it. For example,path = "/home/", ...
- POJ3617 Best Cow Line
其实是学习参考了算法书的代码,但仍然是我自己写的,有小差别.贪心类型. #include <iostream> using namespace std; int main() { int ...