IBM model 1

RT,蛋疼的MT实验~

伪代码请参见《统计机器翻译》中文版61页。

ps:输入只是参考了书上的例子——三个对齐句对~保证和书上输出的概率相同

该代码还没有经过大规模平行语料的检验。。后续有待优化~

输入:data.e

the house
the book
a book

data.f

das Haus
das Buch
ein Buch

python代码ibmModel1.py:

#coding=utf-8
import os

#Read File to pairs
fp_en = open('data.e','r')
fp_cn = open('data.f','r')
iters = 1
pairDic = {}

#生成原始序对字典
countPair = 0
for line_cn,line_en in zip(fp_cn,fp_en):
    f = line_cn.split()
    e = line_en.split()
    for word1 in f:
        for word2 in e:
            pairDic[countPair] = (word1,word2)
            countPair += 1
    iters += 1
fp_en.close()
fp_cn.close()

#先将序对字典一次性去重
lst = list(set(pairDic.values()))
#print "lst=",lst
NewpairDic = {}
i = 0
foreign,english = [],[]
for _tuple in lst:
    #生成新的序对字典
    NewpairDic[i] = _tuple
    i += 1
#print "pairs=",NewpairDic

# run ibm-model-1(EM)
t = {}
for key in NewpairDic.values():
    t[key]=0.25  #initialize t(e|f) uniformly
print "t0=",t

K = 0
while K<=2: #while not converged
    fp_en = open('data.e','r')
    fp_cn = open('data.f','r')
    count,total = {},{}
    for key in NewpairDic.values():
        count[key] = 0
    for _tuple in NewpairDic.values():
        total[_tuple[0]] = 0
    s_total = {}
    for ee,ff in zip(fp_en,fp_cn):
        #compute normalization
        for e in ee.split():
            s_total[e] = 0
            for f in ff.split():
                s_total[e] += t[(f,e)]
        #collect counts
        for e in ee.split():
            for f in ff.split():
                count[(f,e)] += t[(f,e)]/s_total[e]
                total[f] += t[(f,e)]/s_total[e]
    #estimate probabilities
    for f,e in NewpairDic.values():
        t[(f,e)] = count[(f,e)]/total[f]
    #end of while
    K += 1
    fp_en.close()
    fp_cn.close()
    print "t%d=" %K
    for it in t.items():
        print it

时间: 2024-11-04 21:41:07

IBM model 1的相关文章

命令拷屏之存储信息

磁盘与分区及文件系统 [[email protected] ~]# hdparm -i /dev/sda 查看硬盘参数[[email protected] ~]# fdisk -l 查看所有分区[[email protected] ~]# df -h|column -t 查看各分区使用情况[[email protected] ~]# mount|column -t 查看挂载的分区状态[[email protected] ~]# du -sh /var/log 查看指定目录大小[[email pr

对于机械键盘的一些见解(转载)

本文转载: 机械键盘的纵览与轴十年前,我是个C++/Java程序员,几乎每天都要花10个小时以上坐在电脑前,不断地敲击键盘.那时,我用的是公司统一派发的廉价Dell薄膜键盘,在成年累月的工作之后,手指在每次击键时都会疼痛,以致于输入代码对我来说都成为了负担.直到有一天,在同事的推荐下,我购入了第一块机械键盘,Cherry的G80-3000青轴.感觉从那一天起,就进入了一个新的世界.我知道了一块好的键盘,可以最大程度地为手指带来享受,把编程码字变成一件真正快乐的事情,而且,好键盘对于输入效率来说提

vistor的安装与使用

Vistor简介 Vistor虚拟带库系统是cofio公司的一款虚拟带库软件解决方案,用来实现高性能的磁盘备份,同真实带库一样的磁带管理机制提高了管理效率.Vistor支持iscsi和FC,可以模拟多种型号的磁带库,允许创建多个不同的带库,支持TSM.NBU.LegatoNetworker.Bakbone等多款备份软件.下载链接: http://pan.baidu.com/s/1o65NtYq 密码: 89fj 环境准备 系统版本:Centos 5.2 x32位 软件版本:vistor 2.1.

使用 AppFuse 的七个理由

http://www.ibm.com/developerworks/cn/java/j-appfuse/ AppFuse 是一个开放源码的项目和应用程序,它使用了在 Java 平台上构建的开放源码工具来帮助我们快速而高效地开发 Web 应用程序.我最初开发它是为了减少在为客户构建新 Web 应用程序时所花费的那些不必要的时间.从核心上来说,AppFuse 是一个项目骨架,类似于通过向导创建新 Web 项目时 IDE 所创建的东西.当我们使用 AppFuse 创建一个项目时,它会提示我们将使用开放

聚簇索引对数据插入的影响

聚簇索引对数据插入的影响 背景 开发人员反馈系统执行某存储过程特别慢,经排查是由于存储过程执行过程中需要向新建的任务表插入大量数据,该任务表的主键是聚簇索引造成的.聚簇索引为什么会导致插入慢呢?聚簇索引会对数据插入造成多大影响呢? 原理 在非聚簇索引中,物理数据的存储顺序与索引不同,索引的最低级别包含指向数据页上的行的指针. 在聚簇索引中,物理数据的存储顺序与索引相同,索引的最低级别包含实际的数据页.聚簇索引导致数据记录必须按照键大小顺序存储,插入和删除须进行移动数据记录,导致额外的磁盘IO.

Linux procfs详解

1.0 proc文件系统总览在类Unix系统中体现了一种良好的抽象哲学,就是几乎所有的数据实体都被抽象成一个统一的接口--文件来看待,这样我们就可以用一些简单的基本工具完成大量复杂的操作.在Linux中存在着一类特殊的伪文件系统,用于使用与文件接口统一的操作来完成各种功能,例如ptyfs.devfs.sysfs和procfs.而procfs就是其中应用最广泛的一种伪文件系统.procfs是Linux内核信息的抽象文件接口,大量内核中的信息以及可调参数都被作为常规文件映射到一个目录树中,这样我们就

【转】刚发现一个linux在线文档库。很好很强大。

原文网址:http://blog.csdn.net/longxibendi/article/details/6048231 1.网址: http://www.mjmwired.net 2.比如查看这个 proc.txt ,就在这里能找到. http://www.mjmwired.net/kernel/Documentation/filesystems/proc.txt 内核参数解释全在这里了.不过,也可以下载内核完源代码,从/usr/src/linux/Documentation/proc.tx

统计机器翻译(SMT)步骤总结

本文是在Niutrans论坛中的系列教程中总结出来的. 1.语料预处理 预处理的结果是生成双语分词之后的文件,该步需要注意的是对规则短语,比如数字.日期.网址等,进行泛化处理.可以用正则方法或者其它方法.注意日期中的点和外文人名中的点和网址中的点和句末标点要区分开来,数字和日期也要区分开来. 其中变化比较大的,比较难处理的,应该是中文的日期,因为它的格式比较多变.从文本中抽取出来中文日期时间(或者更进一步的转化成标准的时间格式),有一个办法,就是用trie树进行抽取,相较于写一大堆翻乱的正则表达

linux工具类之硬盘检测

软raidmount /dev/md0 /opt                [[email protected] root]# cp /usr/share/doc/raidtools-1.00.3/raid*.conf.* /etc[[email protected] root]# ls -l /etc/ |grep raid[[email protected] root]# vi /etc/raid0.conf.sample  mkraid /dev/md0mkfs.ext3 /dev/m