月度归档:2011年07月

中文词汇语义相关度测试集Words-240

Deep Learning Specialization on Coursera

Words-240测试集包含240对中文词汇和人工对这些词对之间的语义相关度的评测值(和英文的WordSimilarity-353测试集类似),此测试集可以用于测试或者训练中文语义相关度算法。我们以组为单位安排人员进行测试,共分为12组,每组包含20对词。每一组词汇都有20人分别对其相关性进行量化评测, 共有240余人参与了测试。词汇之间相关性的度量值介于0到10之间(0表示这两个词之间毫不相关,10表示这两个词是同义词),我们将这20个人对某词对的评测结果的平均值作为最终结果。每个人的评价结果请参见“测试集统计结果.xls”。如果您有什么问题或者评论,请您发邮件和我们联系,邮件地址是:xiangwangcn@gmail.com

此测试集是我们为了测试中文词汇之间的语义相关度算法而构造的,请引用我们的论文:

汪祥, 贾焰, 周斌, 丁兆云, 梁政. 基于中文维基百科链接结构与分类体系的语义相关度计算. 小型微型计算机系统, 2011, 32(11):2237-2242.

欢迎大家免费使用!下载地址是:http://download.csdn.net/source/3462335

Words-240测试集得到了国防科技大学613教研室的大力支持,感谢贾焰老师、周斌老师等的指导和帮助。在构造测试集中,著名英文词汇语义相似度的测试集WordSimilarity-353的创立者Lev Finkelstein在如何选择测试集Words-240中词对的问题上进行了热心的指导,在此表示诚挚的感谢。在构造测试集的过程中,湖南师范大学的彭丹同学、湖南大学的陈军同学和国防科技大学的李虎给予了大力协助,在此表示衷心的感谢。国防科技大学、湖南师范大学和湖南大学的240余名同学无偿参与了测试,他们的无私奉献精神直接促使了本测试集的诞生,参加测试的同学有:万芬芬,李大财,吴章彬,尹晋文,邱口,黄江勇,蔡强,王刚,张伟,周晓锋,刘时,徐浩,胡燕,左文豪,吴勇,刘念松,尹波,姚鑫,张右良,周晟,王佳静,何佳,袁功彪,李晋国,谢小红,叶光辉,林建,钟勇才,杨海兵,陈聪,陈超,童国雄,周新云,邹垒,肖天赐,尹邦浩,刘伟,何花,李欢妮,焦丙丰,刘乾,张翠,艾达,伍浩,孙浩然,钟方敬,赵浒,刘哲,龚秀娟,李琦,杨瑞丽,何珂,甘玲,许念,胡蛟,孔梦娟,罗浩,刘芳,廖璨,李冬嫦,白露,皮之云,袁园,潘剑珍,杨厅,徐征,匡牧宇,王薇薇,祁曦婕,宇岳,游凤英,王昕,曹璇,吕性,张志世,杨贵芸,杨雪梅,李腾飞,廖娟,陈娅琦,彭燕,崔文秀,路俊雅,刘雅玲,曾状林,范仁娇,陈玲佳,詹会,孙梦迪,毛本,徐汇,刘婷,黎明阳,刘雨薇,王晓秀,祁美丹,程怡欣,吴之瑶,马超玲,蒋丽娟,刘娜,张芬,阮晓婷,马璞玉,刘贤霖,李西,李小芳,余立,曾惠奇,晓歪,张艳翔,曾田田,张卫,付渔,伍新春,胡朱,苏兴恺,马党,张祥洪,段丽,李文韶,黄红君,陈超,伍月,侯丽华,陆金梅,谢璐璐,谭娜娜,胡海姣,裴晓强、刘建峰,王海波等(由于隐私保护等原因,很多同学的姓名等未在此处列出),在此对他们表示感谢。

初学者报道(2):实现 1-gram分词算法

Deep Learning Specialization on Coursera

写了个1-gram的分词算法实现:

借鉴了之前在这个blog上看到的n-gram算法中的split函数的写法,其他部分自己写的。

 

Dictionary.py:

class Dictionary:    'Dictionary Loading and Management'    def __init__(self,dicname):        self.dictMap={}        self.N = 0;        dictfile = open(dicname,'r')        for eachLine in dictfile:            dictstr = eachLine.decode("cp936")            strlist = dictstr.split("t",2)            self.dictMap[strlist[0]] = strlist[1].split("n",1)[0]            self.N+=int(self.dictMap[strlist[0]])        dictfile.close()        print self.N    def getCount(self,wordname):        if(self.dictMap.has_key(wordname)):            return int(self.dictMap[wordname])        else:            return 0.5;#如果词典中没有,这个词的出现次数被定为 0.5    def getPvalue(self,wordname):        return float(self.getCount(wordname))/self.N    def isAWord(self,word):        return self.dictMap.has_key(word)        if __name__=='__main__':    dict1=Dictionary("dict.txt")
class Ngram:    def __init__(self,dictionary):        self.mDict=dictionary        self.wordList=()        self.valueMap = {}        self.segMap={}    def splitsentence(self,sentence):        wordlist = []                for eachNum in range(len(sentence)):            wordlist.append((sentence[:eachNum+1],sentence[eachNum+1:]))        return wordlist    def maxP(self, sentence):        if(len(sentence)<=1):            return self.mDict.getPvalue(sentence)        SenSplitList = self.splitsentence(sentence);        maxPvalue = 0;        wordPair = [];        wordP = 0;        for eachPair in SenSplitList:            if(len(eachPair[0])>0 and len(eachPair[1])>0):                p1=0;                p2=0                if(self.valueMap.has_key(eachPair[0])):                    p1=self.valueMap[eachPair[0]]                else:                    p1=self.maxP(eachPair[0])                if(self.valueMap.has_key(eachPair[1])):                    p2=self.valueMap[eachPair[1]]                else:                    p2=self.maxP(eachPair[1])                                    wordP=p1*p2            if(maxPvalue<wordP):                maxPvalue = wordP                wordPair = eachPair                v=self.mDict.getPvalue(sentence)        if((v)>maxPvalue and self.mDict.isAWord(sentence)):            self.valueMap[sentence]=v            self.segMap[sentence]=sentence            return v        else:            self.valueMap[sentence]=maxPvalue            self.segMap[sentence]=wordPair            return maxPvalue    def getSeg(self):        return self.segMapif(__name__ =="__main__"):    ngram1 = Ngram("dict1")    print ngram1.splitsentence("ABC")
from Dictionary import Dictionaryfrom ngram import Ngramdef printSeg(segMap,sentence):    if(segMap.has_key(sentence)):        pair = segMap[sentence]        if(isinstance(pair,tuple)):            printSeg(segMap,pair[0])            printSeg(segMap,pair[1])        else:            if(sentence==pair):                print sentence            else:                printSeg(segMap,pair)    else:        print sentence    dict1 = Dictionary("dict.txt")while(True):    ngram1 =Ngram(dict1)    sentence = raw_input("please input a Chinese Sentence:").decode("cp936");    print ngram1.maxP(sentence)    segmap=ngram1.getSeg()    #for eachkey in segmap:                    #   if(isinstance(segmap[eachkey],tuple)):      #      print (eachkey+":"+segmap[eachkey][0]+','+segmap[eachkey][1])       # else:        #    print (eachkey+":"+segmap[eachkey])    printSeg(segmap,sentence)


					

中文翻译技术沙龙第八次活动

Deep Learning Specialization on Coursera

一、沙龙主题:语料库的建设和应用
二、沙龙时间:2011年7月31日(周日)下午2-5点
三、沙龙地点:清华科技园
四、沙龙嘉宾:北京大学常宝宝老师

报名截止日期:7月29日(周五)

报名请回复邮箱cmt.salon@gmail.com

中文翻译技术沙龙的豆瓣小组是http://www.douban.com/group/304684/。

中文翻译技术沙龙的QQ群:80266425

初学者报到: 实现了一个最大匹配的分词算法

Deep Learning Specialization on Coursera

看了一段时间了的自然语言,不过还是很初级。

今天下载了一个分词的字典,自己用python写了一个分词的函数。

放上来,给大家踩,不吝赐教!

用的是最大匹配算法。

# -*- coding: cp936 -*-

import string

def loaddict():
filename=raw_input('Enter file name:')
f = open(filename,'r')

DICT={}
for eachLine in f:
dictStr = eachLine.decode('cp936')
strList=dictStr.split("t",2)
DICT[strList[0]]=strList[1].split("n",1)[0]
global DIC_MAXL
if(DIC_MAXL<len(strList[0])):
DIC_MAXL = len(strList[0])
f.close()
print("max length:")
print(DIC_MAXL)
return DICT;

def segmentation(dic):
sentence = unicode(raw_input('请输入中文句子:'),'cp936')
print sentence
length=len(sentence)
print('length:')
print length
global DIC_MAXL
if(length<DIC_MAXL):
wlen=length
else:
wlen=DIC_MAXL
testS=sentence
wordList=[]
while(len(testS)>0):
word=testS[0:wlen]
meet=False;
while((not meet )and (len(word)>0) ):
if(dic.has_key(word)):
wordList.append(word)
testS=testS[len(word):len(testS)]
meet=True;
else:
if(len(word)==1):
wordList.append(word)
testS=testS[len(word):len(testS)]
meet=True;
else:
word=word[0:len(word)-1]
return wordList

DIC_MAXL=0
dictionary=loaddict()
print DIC_MAXL
while(True):
wordl=segmentation(dictionary)
for eachChar in wordl:
print eachChar

真的很初级,大家轻踩!

也别不好意思踩,踩了我就能进步了!

多谢

NiuTrans: 一套开源的统计机器翻译平台

Deep Learning Specialization on Coursera

  晚上在CWMT(China Workshop on Machine Translation)的邮件组里看到东北大学自然语言处理实验室朱靖波老师的邮件,题为“NiuTrans: 一套开源的统计机器翻译平台”,仔细读了一下,觉得这句话很有分量:“内部测试结果显示性能和速度稳定优于Moses”,如果读者感兴趣,可以去NiuTrans的主页去申请下载,做个测试,NiuTrans的主页见:http://www.nlplab.com/NiuPlan/NiuTrans.html。前不久“哈工大语言技术平台(LTP)源代码正式对外共享”,而今东北大学也开源了NiuTrans这套统计机器翻译平台,这些对于致力于中文信息处理的NLPer来说都是好消息。以下内容全文转载自朱靖波老师的邮件:

各位老师,大家好!

我们实验室经过多个月的努力,NiuPlan的第一个NiuTrans系列系统-基于短语的统计机器翻译系统终于打包成功,Alpha版源代码正式对外免费发布,目前访问入口显示在我们实验室网站(http://www.nlplab.com)亚美游左上角。网页上提供了详细的使用说明和高级参数设置方法,并且还提供了部分样本数据用于学习如何使用NiuTrans. 内部测试结果显示性能和速度稳定优于Moses.系统代码的下载方式非常简单,在注册页输入姓名和电子邮件,即可得到动态下载的链接。建议提供正确的电子邮件,这样以后可以随时得到NiuPlan的最新发布和更新信息。

计划一年之内,我们实验室将不断推出NiuPlan不同系列的开源系统,包括Hierarchical phrase-based model,Syntax-based model (string-to-tree/tree-to-string/tree-to-tree)和基于统计的句法分析系统开源平台等。

NiuPlan最终将推出四个系列的开源平台系统:NiuTrans, NiuParser, NiuMining, and NiuKnowledge(暂定名字)系列系统.欢迎同行们免费下载使用,并能够将宝贵建议及时反馈给我们,我们承诺将尽力尽快完善NiuPlan各系列开源系统,在此感谢各位的使用和对现有Bug的容忍。所有系统可以从我们实验室网站上获取.祝好!

Best regards,

Dr. Jingbo Zhu (朱靖波)
Professor(PhD Supervisor), Director
Natural Language Processing Laboratory
Northeastern University
Shenyang, Liaoning, P.R.China
Phone: 0086-24-83672481 (O)(Fax)
Email: zhujingbo at mail.neu.edu.cn
Homepage: http://www.nlplab.com/members/zhujingbo.html

继续阅读