First we try, then we trust

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  183 随笔 :: 111 文章 :: 2960 评论 :: 298 Trackbacks

SharpICTCLAS(测试版)发布了!

 

本版本尚未经过大规模分词测试,存在问题在所难免,如果有什么问题可以将出现问题的句子贴出来,我会尽快改进并发布新的版本。

 

  • ICTCLAS简介:

计算所汉语词法分析系统ICTCLAS(Institute of Computing Technology, Chinese Lexical Analysis System),功能有:中文分词;词性标注;未登录词识别。分词正确率高达97.58%(973专家评测结果),未登录词识别召回率均高于90%,其中中国人名的识别召回率接近98%;处理速度为31.5Kbytes/s。

著作权: Copyright(c)2002-2005中科院计算所 职务著作权人:张华平

遵循协议:自然语言处理开放资源许可证1.0

Email: zhanghp@software.ict.ac.cn

Homepage: http://www.i3s.ac.cn

 

  • SharpICTCLAS:

.net平台下的ICTCLAS,是由河北理工大学经管学院吕震宇根据Free版ICTCLAS改编而成,并对原有代码做了部分重写与调整。

Email: zhenyulu@163.com

Blog: http://www.cnblogs.com/zhenyulu

 

posted on 2007-03-15 12:52 吕震宇 阅读(14609) 评论(39)  编辑 收藏

评论

#1楼  2007-03-15 12:55 JesseZhao      
今天被人称为水王,不能对不起这个称号,过来灌一下
  回复  引用  查看    

#2楼  2007-03-15 13:04 kwklover      
那么快就发布了。
把dotlucene和SharpICTCLAS做个测试先

  回复  引用  查看    

#3楼  2007-03-15 13:09 deerchao      
还是你强。。
我上次做了一半做不下去了,太麻烦了。。
  回复  引用  查看    

#4楼  2007-03-15 13:13 kingcat [未注册用户]
厉害啊,这么快就出来了
  回复  引用    

#5楼 [楼主] 2007-03-15 13:13 吕震宇      
@kwklover
测试有什么结果记得贴出来呀!我想随后学习一下dotLucence呢:-)
  回复  引用  查看    

强阿.
  回复  引用    

#7楼  2007-03-15 14:55 aspnetx      
@JesseZhao
那天看到评论列表以及评论排行榜里才发现,"水王"其实是我
不过就目前的速度来看,未来的几个月内你就能取代这个位置了
呵呵
  回复  引用  查看    

#8楼  2007-03-15 15:47 kwklover      
我简单测试了下。测试结果如下(用空格表示分割,省略标住):
1,全角字符识别
文本:SUN已经开放了JAVA的源代码
结果:把SUN分成了三个字符
结论:不具备全角字符识别能力

2,新词识别
文本:微软(Microsoft)是一家年收入上100亿的世界性软件公司
结果:把微软分成了两个词
结论:新词识别能力有待提高

3,分词准确性
文本1:奥力斯是菲律宾的一家赌场
结果1:奥力 斯是菲 律宾 的 一 家 赌场
结论1:严重错误,分词准确性有待提高

文本2:各界政要共聚一堂商讨国是
结果2:各界 政要 共聚 一 堂 商讨 国 是
结论2:分词不准确,共聚一堂应该是一个成语,国是应该是一个词。分词准确性有待提高。

另外有个问题想请教下吕前辈:
概率最大化分词算法是基于统计学(我是这么认为的,不妥请指正),那么最短路径分词算法的理论依据是什么?因为从测试3,那是很严重的错误分词。我搜索了下两为博士的论文。都要钱,没能看成:(

  回复  引用  查看    

#9楼  2007-03-15 16:35 neoragex2002      
@kwklover
最短路径分词算法的理论依据:隐式马尔可夫模型HMM。模式识别里面最为常用、实用化程度最为成熟的手段之一。我记得Kaifu LI读博时做的语音识别也是靠这个一举成功的。
  回复  引用  查看    

#10楼 [楼主] 2007-03-15 18:23 吕震宇      
@kwklover

谢谢提出这些测试结果:

1、全角SUN无法识别的问题我可以通过修改原子分词代码解决。

2、“各界政要共聚一堂商讨国是”写错了,应当是“国事”,这样最后一个词就可以正确识别了。

3、其它问题我认为是词库的问题,因为ICTCLAS分词仍然需要基于词库。Free版的ICTCLAS词库仅仅是1个月的语料训练结果(可以参考ICTCLAS网站上的资料),所以很多词缺乏,包括“微软”、“共居共聚一堂”等。

4、关于“奥力斯是菲律宾的一家赌场”的问题我想与NShortPath有关,代码中如果将nKind值设置为1,如下:
WordSegmentSample sample = new WordSegmentSample(DictPath, 1);
则分词结果完全正确。至于nKind究竟取什么合适,我心里面也没有谱。

5、关于统计分词,其实NShortPath理论依据,其实路径的长短是根据词频统计计算而来的。

至于论文,在google中输入“基于N-最短路径方法的中文词语粗分模型”,检索到的第一个doc文件结果便是论文。
  回复  引用  查看    

#11楼  2007-03-15 19:48 zitiger [未注册用户]
搜狗上有一些语料库

中文词语搭配库
http://www.sogou.com/labs/dl/r.html

互联网词库
http://www.sogou.com/labs/dl/w.html
  回复  引用    

#12楼  2007-03-16 02:05 陈招展      
:-) 崇拜老师
  回复  引用  查看    

#13楼  2007-03-16 02:18 陈招展      
吕老师,这个系统支持繁体字吗?
我用一小段繁体字结果是每个字为一个词语。
  回复  引用  查看    

#14楼  2007-03-16 08:36 kwklover      
@吕老师
1,"各界政要共聚一堂商讨国是"的"国是"确实是一个词,正式场合用“国是”,一般场合用“国事”,当然那是词库的问题。和算法没关系。所以就不继续讨论了。

2,"奥力斯是菲律宾的一家赌场",我测试的时候把nKind改为3,如你所说。正确性和这个有关系。

3,"微软(Microsoft)是一家年收入上100亿的世界性软件公司",这是我专门找了词库没有这个词来做测试的。用于测试未登陆词的识别能力。因为ICTCLAS的介绍中有未登陆词识别这个功能的。所以就提了出来。从“微软”这个词来说。
一般做新词识别都是基于统计的。比如微和软都不是生僻词,而且单字出现的概率非常低,所以组合成新词的概率非常大。
不知道ICTCLAS的“未登陆词识别算法”是怎么样的。看了N次你的文章和代码。都没能把SharpICTCLAS理解明白。基础比较差,比较迟钝,:(#$*
  回复  引用  查看    

#15楼 [楼主] 2007-03-16 09:07 吕震宇      
@陈招展
系统不支持繁体,里面用的编码方式是bg2312。

@kwklover
Free版的ICTCLAS中我没有看到未登录词识别算法,SharpICTCLAS是基于这个版本的ICTCLAS改编的,所以对于“微软”这样的词无法正确识别。我想ICTCLAS 3.0应当支持这个功能。

另外zitiger提供的搜狗语料到是可以整合到SharpICTCLAS的词库中的,也许这样会提高识别率。但搜狗识别的某些未登录词其实也不算词:-)

另外我还想征集一下博客园的关键词,这些词在一般词库中比较少见,比如设计模式、依赖注入、控制反转等...
  回复  引用  查看    

#16楼  2007-03-16 11:29 sinboy [未注册用户]
@吕震宇
我原来在阅读ICTCLAS源代码的时候,记得原设计中是有未登陆词识别处理的
  回复  引用    

#17楼  2007-03-16 12:53 cw [未注册用户]
很不错. 支持一下!
  回复  引用    

#18楼 [楼主] 2007-03-16 13:04 吕震宇      
@sinboy
ICTCLAS中有UnknowWord类,里面有Recognition方法,但我现在还没有完全读懂,正在消化中...
  回复  引用  查看    

#19楼  2007-03-17 15:24 cw [未注册用户]
吕老师!

能不能提供一个实际应用的场景, 例如: 把分词应用到Lucene中, 因为相信很多人同我一样, 始终搞不明白, 名称/动词/这些词性如何在Lucene中应用呢? 我相信这是很重要的一个概念, 不是仅仅分一下词哪么简单的.

谢谢!!!
  回复  引用    

#20楼 [楼主] 2007-03-17 22:27 吕震宇      
@cw

我对Lucene不太了解,不知道它需要什么样子格式的分词结果,博客园中肯定有其他高手明白,你请教一下他们吧。另外词性是为了进行句法分析用的,相信在Lucene中不会用到,仅仅分词的结果就够使了。
  回复  引用  查看    

#21楼  2007-03-19 10:05 双鱼座      
ICTCLAS
这个命名不敢恭维...取这个名的人就没有想过怎么念么?
  回复  引用  查看    

#22楼  2007-03-19 17:27 cw [未注册用户]
谢谢吕震宇的答复啊!

Lucene当中是不是用不上词性这些功能呢? 不知哪位高手知道啊?
我个人认为, 如能用上词性, 可以作出不同权重处理, 是否可以提高查询的准确性呢?

郁闷的问题.....


  回复  引用    

#23楼  2007-03-22 14:44 winjer [未注册用户]
速度奇慢,一篇文章大概10秒左右。不知道是不是我使用不当。
我的用词库分的,不到10ms。????????
请解答,谢谢。
  回复  引用    

#24楼 [楼主] 2007-03-22 22:39 吕震宇      
@winjer
我也发现效率问题了,需要一段时间研究一下...
  回复  引用  查看    

#25楼  2007-03-29 10:49 jory [未注册用户]
请问如果对原有词库进行扩充的话,对于分词的正确性是很有帮助的
那么如何扩充现有词库呢?
  回复  引用    

#26楼 [楼主] 2007-03-29 15:32 吕震宇      
@winjer
“一篇文章大概10秒左右”恐怕不现实吧,在我的机器上虽然速度也慢,但一篇文章也用不了1秒的时间,核心算法用时不过200~300ms左右,你是不是将初始化词库等时间也算在内了?

@jory
真巧,我正在做的一件事情就是扩充词库,现在和同事从博客园遴选了1300多个与计算机相关的关键词,正准备加入词库,只是词频不好定,所以正准备实验一番看看效果。我可能在下周将扩充词库的代码放上来。

如果你着急的话,可以查看WordDictionary类,里面有相关代码,只是尚未经过测试,不知道是不是有问题。

  回复  引用  查看    

#27楼  2007-03-29 20:32 jory [未注册用户]
谢谢吕老师的回答,由于我最近也在做这方面的一点研究,看了你的一系列文章后,感觉收益非浅!我现在遇到的问题也是怎样扩充词库,希望以后还能向你请教!
  回复  引用    

#28楼  2007-03-31 20:38 jory [未注册用户]
目前版本好象只能对一段话进行测试,如果字符串中包含“\r\n”的话就会出现
数组越界的异常
比如
result = sample.Segment(@"他说的确实在理
");

就会出错,这样就不能对整篇文章进行分词了
  回复  引用    

#29楼 [楼主] 2007-04-01 21:45 吕震宇      
@jory

目前这应当算是小问题,因为完全可以在一篇文章预处理时去掉这些回车符号。

我还发现了一些更麻烦的问题,主要因为词性标注部分的代码存在问题(应当是从ICTCLAS)就存在的问题,我没经修改就直接拿过来了,主要表现在如果某个汉字没有词性,则在词性标注时会出现异常。例如:“这些是永远也没有现成的答桉的”其中“答案”写错了,当对这个有错别字的句子分词时将出现错误。

另外,ICTCLAS在对地名识别时也存在问题,在Span类的PlaceRecognize方法中,nStart与nEnd在某些时候会计算错误,测试版的SharpICTCLAS也存在这个问题。例如“明定陵是明十三陵中第十座陵墓”在分词时会因为这个问题导致触发异常。

我现在对测试版的代码做了些调整,暂时解决了这些问题,但日后仍然有必要对Span类的代码进行大幅度重构。
  回复  引用  查看    

#30楼  2007-04-03 15:05 zitiger      
@吕震宇
很佩服你啊。
还是你厉害阿,哈哈

顺便问问什么时候出来一个比较好的版本?
  回复  引用  查看    

#31楼  2007-04-04 23:56 duhaigang [未注册用户]
佩服
  回复  引用    

#32楼  2007-04-07 09:04 随风流月      
@吕震宇
佩服,只有佩服。
Lucene 只需要分出的词即可,不用考虑词频问题。
等到正式版出来,我会做一个挂接在 Lucene 上的工具。
  回复  引用  查看    

#33楼  2007-04-14 16:29 jory [未注册用户]
什么时候出来一个比较好的版本?
  回复  引用    

#34楼  2007-04-14 22:00 工控网 [未注册用户]
太好了,正在找这个东西
  回复  引用    

#35楼  2007-04-15 21:29 王琳 [未注册用户]
吕震宇,喜欢,从这个老师,我才发觉中国的大学老师的学术上的优秀
  回复  引用    

#36楼 [楼主] 2007-04-16 21:12 吕震宇      
@jory

我会尽快再出一个比较稳定的版本。

目前经过调整后的SharpICTCLAS运行效果还算不错。在对博客园1万五千篇文章进行分词测试过程中,效果还不错,总共出现15处分词异常错误,其中有9处是因为存在大量日文字符,另外6处是一句话中单词过多,超出了软件限制(200词)。效率也比较令人满意(尽管总体还是比较慢),15000篇文章总用时2.5小时,但这不只是分词的时间,还包括了繁体转简体、利用正则表达式去掉HTML符号,统计词频(这需要进行重复词的判别,我使用了AVL树)、将分词结果写入SQL Server 2005数据库。如果不考虑这些因素的话,感觉应当和C++程序效率差不多,当然这是没有经过严格测试的结论。

另外,我对词库做了扩充测试,效果一般,因为在扩充基本词库时,很难同时扩充二元词库,所以为了使得扩充词汇发挥作用,就不得不提高平滑值,原有系统默认值为0.1,需要提高到0.8以上才可以。

@工控网

最好等下一版本出来后再应用,这个版本仍然存在问题。

@王琳

您过奖了。
  回复  引用  查看    

#37楼  2007-05-09 10:57 蜗牛 [未注册用户]
历害.多多学习,谢谢你的代码.C++我看不懂.只是可不可以加上自动学习呢.?也不知系统有没有.
  回复  引用    

#38楼  2007-06-02 15:22 yuanlang [未注册用户]
就lucene中的分词问题提一些我个人的经验,如果对查准率的不是有很特别的要求的话,对文章建索引时,最好是不要用自动分词,用lucene本身的按单汉字完全就可以满足需求,用分词的话一是降低效率(分词是很需要资源),二是影响了查全率。 当然可以将分词用在对query 也就是查询关键词的解析上,可以提高不少性能
  回复  引用    

#39楼  2007-09-14 10:50 wolvever [未注册用户]
如何让“居民委员会”作为一个整体被分割出来而不是作为“居民”和“委员会”两个词语分割
  回复  引用    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接: