烂谈 分词、数据结构和算法

今天看到一个帖子介绍自己的分词系统,见:
http://topic.csdn.net/u/20090209/18/3351b4f2-3ac3-4d89-99f9-77a870d3b8ea.html?seed=724503554&r=62029500#r_62029500
    帖子作者大概有些沾沾自喜于分词速度,由于俺的专业是自然语言处理,因此想说几句。

    在我所了解的关于分词的研究和系统中,分词速度最快的莫过于百度的分词系统,大概每秒10MB左右,不过他们的分词系统的处理精度可能并非太高,否则一般不可能达到如此速度。他们的系统实现应该是基于规则。
   另外,北京语言大学的分词系统速度也很快,分词速度大概每秒5-6MB,能够同时对GBK、UNICODE文本进行切分,也能对简体文本和繁体文本切分。该系统已经在国内某些搜索公司使用。该系统的分词精度大概为96%。
上面两个系统是典型的规则系统,因此速度比较快。

   另外还有一些统计分词系统,比如中科院开源的ICTCLAS系统。这个系统基于HHMM模型,在同一个模型中实现分词和命名实体识别,模型比较漂亮,分词准确率大概在96%左右,分词速度大概为1MB/秒。该速度不能支持大规模数据处理,而且系统的鲁棒性不强,容易崩溃,且只支持GB编码。

   我的BLOG中实现的分词系统是基于微软黄昌宁老师的几篇文章,主要基于字本位和CRF模型,准确率没有统计,大家看看分词结果就可以了。不过分词速度可能不够快,不能支持大规模数据处理。(这是统计分词系统的主要弊病。)

   国内专门做分词研究的公司是海量,据说分词精度在99%,速度在1MB/秒。可惜速度不够快。

   个人研究人员研究分词当然很好,但最好借鉴一些专业的论文,这样会走得更好。


关于数据结构和算法

    时常听到CSDN上有些同学比较困惑,觉得数据结构和算法没有什么用,之所以产生这种困惑,原因在于缺乏实践和正确的实践。
    分词速度之所以出现明显差距,主要原因在于数据结构和算法的优劣,例如词表的存储和查询(这种结构组织绝不是数据结构书上直接套用的结果,往往是多种数据结构相互合作和依赖,通用的算法和数据结构只能用来打打基础,难以实战。优秀的工程师往往要结合具体的任务设计具体的结构和算法,任务不同则算法有差异。)


    例如,在最大匹配分词中,往往会存储词典,如何存储词典加快查询速度就非常重要了。中文信息学报 2006上刊登了一篇文章,介绍利用两个数组来模拟trie树实现词典查询,其速度可以达到12MB/秒。(不过这个结果比较可疑,因为俺测试的结果与之相差很大。)
    例如,在统计机器翻译中会有大量数据,例如10G双语短语库,如何存储才能节省空间,采用什么数据结构才能加快查询速度?查询每个短语的时间限定在0.1秒的话,则翻译30个单词的句子至少需要3秒的延迟,用户能忍受吗?在状态搜索的过程中,每个状态都会生成大量子状态,如何才能避免搜索空间爆炸?
    没有数据结构和算法的知识,上面这些任务基本不可行。


    我以前也喜欢拖个控件然后写个MFC程序,后来发现这条路会让自己变得平庸和毫无竞争力,因此放弃了MFC,然后放弃了SDK,然后放弃了vc,然后放弃了windows,现在尽情地拥抱gcc+vim+gdb+linux,因为它们会让我挣更多的money(原谅我的庸俗和肤浅)。
    好好学以下知识,这会让你具有很强的竞争力。c语言、编译原理、数据结构、算法、操作系统、高数、概率、线性代数、最优化理论等等(书不要看太多版本,只看经典,就计算机而言,只看国外的教材,国内的基本上属于抄袭,而且抄得很乏味,且没有更新版本。)。每一门课都值得花费一生的时间,所以必须对这些课程的最新进展不陌生。关键是读通,而不仅是读过。有时间的话,可以写写开源软件,或者看看开源软件,然后修改它们,如scim输入法中的pinyin输入法就很一般,值得修改。(以后填写简历的时候也有东西可以显摆)不要轻视理论的作用,不懂理论的人绝不会推动任何领域的进步。例如,写unix系统的那两个人早就对操作系统了如指掌了,写qq的小马哥早就对网络原理烂熟于心了,......
    一定要成为无可替代的工程师和研究员,这样才能让你永远保险,永不被解聘。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值