NLPJob 主站上线

NLPJob之前主要以博客的模式在运作,虽然这个圈子的招聘很热闹,每次的招聘信息大家也响应的很热烈,但是毕竟博客这种人工模式比较低效,加之自己之前忙于其他的事情,这个博客慢慢的也淡了。前段时间,打开nlpjob的联系邮箱(nlpjob01 at gmail.com) 看了一下,赫然发现躺了很多邮件,包括招聘方的,也包括求职者的,由于自己的疏于搭理,冷落了这批同学,自己深感自责。所以,这段时间我在考虑把 NLPJob 的主站上线,考虑找个开源的或者自己动手写一个心中比理想的小众招聘网站来服务这个圈子。恰好清明的时候遇到了Jobberbase,试用后的立马觉得就是它了,所以这两天和同事一起着手定制和汉化,现在终于可以和大家打招呼了,欢迎大家试用,也欢迎大家多提建议。

www.nlpjob.com

这是一个完全自助式的互联网公司招聘平台,不需要任何注册信息。只需要在招聘和求职的时候留下相关的邮箱即可,我们的平台讲通过邮件服务为招聘者和求职者建立相关的联系

使用的时候招聘的同学可以直接发布职位,请注意,为了防止Spam,第一次发布职位的时候需要我们后台进行验证,如果验证通过,以后发布讲一路绿灯,畅通无阻,主要参照物将是邮箱。求职的同学可以在这个平台上直接申请相关的职位,求职信息及简历讲通过我们的平台邮件发送到招聘者的信箱之中。

另外特别需要注意的是,请猎头同学在发布职位的时候务必开头注明是猎头职位,否则讲无法通过验证或者将做删除处理。

如果您需要讲招聘信息置顶或者推荐到首页,请通过邮箱或者微博私信和我们取得联系,商讨相关事宜:

邮箱: nlpjob01@gmail.com
微博:@NLPJob

发表在 随笔 | 标签为 , , , , , , | 留下评论

DigitalOcean使用小记

晚上看到微博上的@developerWorks同学推荐DigitalOcean, 赫然发现自己使用DigitalOcean大概也一年了(2013年2月28日开始),自从前段时间把52nlp搬牵过来之后,我在国外的vps就只有DigitalOcean了。所以在微博上简短回复了一下:

上半年就开始用DO了,52nlp前段时间也搬到DO了,用的是10美元每月的Plan, 彻底告别了linode。

自从08年底52nlp开张以来,依次用过便宜好用的虚拟主机host2ez, 朋友免费赞助的小空间,Godaddy上免费附赠的空间(但是带广告),国外的老鹰主机(Hawkhost),以及用信用卡注册免费使用一年的AWS(但是一直没用上),直到遇见口碑极高的Linode,花上20多美元/每月搞一个完全自主拥有root权限的VPS(Virtual Private Server)后,发现自己已经离不开VPS了,虽然没有了Cpanel之类的控制面板可用(貌似也可以自己安装),但是更享受这种完全自主的命令行控制和Root权限。之后接触并玩过的VPS还有目前使用的阿里云和DigitalOcean

Linode大概使用了有两年,期间几乎没有出过什么问题,感觉非常棒,不过印象去年也是微博上某个朋友推荐我用DigitalOcean,号称配置SSD VPS( SSD cloud server, SSD云主机),了解了一下它的配置,发现最低配5美元/每月的Plan(512MB内存,1核,20G SSD硬盘, 1TB流量)和我每月20多美元的Linode Plan的配置基本旗鼓相当(不过目前linode最低配已经升级为1G内存…,印象也是这一年期间逐步加量不加价的,有竞争就是好啊),不过国外便宜的VPS有很多,不能因为便宜就放弃Linode,所以在没有放弃Linode的前提下选了一个Digital Ocean中最便宜的5美元/月的Plan玩一下,在这个上面诞生了“我爱公开课”,“挖课”等网站,也跑了一个python flask网站,课程图谱的前身:CourseraReview,从2013年2月28号到目前为止,基本上还没有出现过什么问题,感觉还不错,也欢迎大家体验这几个网站。

2013年年底,终于决定告别用了2年多的Linode,不是因为Linode不好,而是性价比没有DigitalOcean好,刚好这篇对比DO和Linode的英文文章“Digital Ocean vs. Linode”也道出了我的心声,这哥们也使用了2年的Linode,但是最终决定告别Linode,投向DigitalOcean的怀抱。所以除了之前5美元的vps外,我又为52nlp选了一个DigitalOcean中最流行的10美元/月的Plan或者官方说法是”Droplets”,下面是我的后台截图,2个DigitalOcean Droplets:
继续阅读

发表在 随笔 | 标签为 , , , , , , , , , , , , , , , , , , , , , , , | 5 条评论

中文分词入门之字标注法全文文档

将“中文分词入门之字标注法”这个系列整理成了一个PDF文档放到微盘中了,感兴趣的同学可以下载:

微盘:中文分词入门之字标注法.pdf
百度网盘:中文分词入门之字标注法.pdf

如果愿意看网页,也可以从这个标签进入:字标注中文分词

另外在上一节关于CRF中文分词的介绍中,通过CRF++训练了一个CRF中文分词模型,实际训练的时间比较长,为了方便大家测试,也把这个CRF模型上传到微盘了,感兴趣的同学可以下载:crf_model

注:原创文章,转载请注明出处“我爱自然语言处理”:www.52nlp.cn

本文链接地址:http://www.52nlp.cn/中文分词入门之字标注法全文文档

发表在 中文信息处理, 中文分词, 自然语言处理 | 标签为 , , , , , , , , , , , , , , | 7 条评论

中文分词入门之字标注法4

上一节主要介绍的是利用最大熵工具包来做字标注中文分词,这一节我们直奔主题,借用条件随机场工具“CRF++: Yet Another CRF toolkit”来完成字标注中文分词的全过程。

关于条件随机场(CRF)的背景知识,推荐参考阅读一些经典的文献:《条件随机场文献阅读指南》,另外再额外推荐一个tutorial:《Classical Probabilistic Models and Conditional Random Fields》, 这份关于CRF的文档分别从概率模型(NB,HMM,ME, CRF)之间的关系以及概率图模型背景来介绍条件随机场,比较清晰:

While a Hidden Markov Model is a sequential extension to the Nave Bayes Model, Conditional Random Fields can be understood as a sequential extension to the Maximum Entropy Model.

如果这些还不够过瘾,推荐课程图谱上收录的Coursera创始人之一Daphne Koller的“概率图模型公开课”,相信拿下这门课之后,对于上述概率模型,会有一种“一览众山小”的感觉。
继续阅读

发表在 中文分词, 条件随机场 | 标签为 , , , , , , , , , , , , , , , , , , | 2 条评论

中文分词入门之字标注法3

最近要整理一下课程图谱里的中文课程,需要处理中文,首当其冲的便是中文分词的问题。目前有一些开源的或者商用的中文分词器可供选择,但是出于探索或者好奇心的目的,想亲手打造一套实用的中文分词器,满足实际的需求。这些年无论是学习的时候还是工作的时候,林林总总的接触了很多实用的中文分词器,甚至在这里也写过一些Toy级别的中文分词相关文章,但是没有亲手打造过自己的分词器,甚为遗憾。目前自己处于能自由安排工作的阶段,所以第一步就是想从中文信息处理的桥头堡“中文分词”入手,打造一个实用的中文分词器,当然,首先面向的对象是课程图谱所在的教育领域。

大概4年前,这里写了两篇关于字标注中文分词的文章:中文分词入门之字标注法,文中用2-tag(B,I)进行说明并套用开源的HMM词性标注工具Citar(A simple Trigram HMM part-of-speech tagger)做了演示,虽然分词效果不太理想,但是能抛砖引玉,也算是有点用处。这次捡起中文分词,首先想到的依然是字标注分词方法,在回顾了一遍黄昌宁老师和赵海博士在07年第3期《中文信息学报》上发表的《中文分词十年回顾》后,决定这次从4-tag入手,并且探索一下最大熵模型和条件随机场(CRF)在中文分词字标注方法上的威力。这方面的文献大家可参考张开旭博士维护的“中文分词文献列表”。这里主要基于已有文献的思路和现成的开源工具做一些验证,包括张乐博士的最大熵模型工具包(Maximum Entropy Modeling Toolkit for Python and C++)和条件随机场的经典工具包CRF++(CRF++: Yet Another CRF toolkit)。

这个系列也将补充两篇文章,一篇简单介绍背景知识并介绍如何利用现成的最大熵模型工具包来做中文分词,另外一篇介绍如何用CRF++做字标注分词,同时基于CRF++的python接口提供一份简单的 CRF Python 分词代码,仅供大家参考。至于最大熵和CRF++的背景知识,这里不会过多涉及,推荐大家跟踪一下课程图谱上相关的机器学习公开课

这次使用的中文分词资源依然是SIGHAN提供的backoff 2005语料,目前封闭测试最好的结果是4-tag+CFR标注分词,在北大语料库上可以在准确率,召回率以及F值上达到92%以上的效果,在微软语料库上可以到达96%以上的效果。不清楚这份中文分词资源的同学可参考很早之前写的这篇文章:中文分词入门之资源。以下我们将转入这篇文章的主题,基于最大熵模型的字标注中文分词。
继续阅读

发表在 中文分词, 最大熵模型 | 标签为 , , , , , , , , , , , | 2 条评论

【科普随笔:NLP主流的傲慢与偏见】

上篇博文【科普随笔:NLP的宗教战争?兼论深度学习】匆匆写就发出以后,没想到在新浪微博上一夜间有好几万点击,而平时我在新浪转发的博文最多也不到几千点击。想来一是题目比较花哨(宗教,深层学习,都是容易引起热议的 buzz words),难逃标题党嫌疑;二来内容也容易引起这个领域的争论、不屑或共鸣。

需要说明一句,那篇里面关于深度学习的notes,是信口发挥,各位不要认真,因为对于这样崭新的东西我是老外,是想当然地瞎议论,难免牵强。万一从某个角度让人看出了“道理”,那也纯粹是瞎猫撞死耗子,不足采信。

不过关于NLP过去20年两条路线的宗教式斗争,我和很多同时代人都是亲历者,这方面的每一句话都是有根据、负责任,经过深思熟虑的,有过惨痛的经历或胜利的喜悦。

虽然统计学界有很多对传统规则系统根深蒂固的偏见和经不起推敲但非常流行的蛮横结论(以后慢慢论,血泪账一笔一笔诉 :),但是机器学习的巨大成果和效益是有目共睹无所不在的:机器翻译,语音识别/合成,搜索排序,垃圾过滤,文档分类,自动文摘,知识习得,you name it

摘自【科普随笔:NLP的宗教战争?兼论深度学习】

看过几篇 NLP (Natural Language Processing) 领域代表人物的综述,往往充满了主流的傲慢与偏见,让人惊诧。这些一览众山小的大牛聪明绝顶,居然如此偏见蛮横,jump to conclusions,可见宗教式思维定势的危害之深,深入骨髓,对青年学子个更是贻害无穷。(主流掌门人中也有有识之士,以后再论。)因此想到立此存照一下,以后再一条一条细论。下列傲慢之偏见随处可见,流传甚广,为免纷扰,就不列出处了,明白人自然知道这绝不是杜撰和虚立的靶子。这些偏见似是而非,经不起推敲,却被很多人视为理所当然的真理。为每一条偏见找一个相应的 crappy 系统的案例并不难,但是从一些特定系统的缺陷推广到对整个规则系统的方法学上的批判,乃是偏见之为偏见 的要害所在。

【偏见一】规则系统的手工编制(hand-crafted)是其知识瓶颈,而机器学习是自动训练的(言下之意:因此没有知识瓶颈)。

【偏见二】规则系统的手工编制导致其移植性差,转换领域必须重启炉灶,而机器学习没有移植性问题,因为算法和系统保持不变,只要改变训练数据即可。

【偏见三】规则系统的手工编制注定其不能 scale up,无法胜任 real world application,只能做实验室里的玩具。

【偏见四】规则系统只能在极狭窄的领域成事,无法做跨领域的系统。

【偏见五】规则系统只能处理规范的语言(譬如说明书、天气预报、新闻等),无法应对 degraded text,如社会媒体、口语、方言、黑话、OCR 文档。

【偏见六】规则系统很脆弱,遇到没有预测的语言现象系统就会 break(什么叫 break,死机?),开发不了鲁棒(robust)产品。

【偏见七】由于真实世界的自然语言词汇量大,组合关系千变万化,语言学家无法编制规则系统涵盖这些词汇和语法知识来分析语言。

【偏见八】规则系统的结果没有置信度,鱼龙混杂。

【偏见九】规则系统的编制越来越庞杂,最终无法改进,只能报废。

【偏见十】规则系统是上个世纪的技术,早已淘汰(逻辑的结论似乎是:因此不可能做出优质系统)。

【偏见十一】从结果上看,机器学习总是胜过规则系统。

上述每一条都可以写一大篇或一个系列来详细论证其荒谬蛮横,描述学界主流中存在的傲慢与热昏。可是不用着急,血泪账今后一笔一笔诉 :)

可怕的不是偏见,偏见无处不在,是人就难免。真正可怕的是偏见的流行,而在NLP这个领域,偏见的流行到了让人瞠目结舌的程度。不假思索而认同接受这些偏见成了常态。

【相关篇什】

【科普随笔:NLP的宗教战争?兼论深度学习】

坚持四项基本原则,开发鲁棒性NLP系统

why hybrid? on machine learning vs. hand-coded rules in NLP

《立委随笔:语言自动分析的两个路子》

《朝华午拾:在美国写基金申请的酸甜苦辣》

《立委随笔:机器学习和自然语言处理》

【立委科普:从产业角度说说NLP这个行当】

王伟DL
不得不承认,看完这些偏见之后,我有点乱了。我同意“每一条都可以写一大篇”都可以引起大的讨论,对于是否偏,一时还难明。有些我已经不知何时“采纳”了,有些也不接受。—究竟是正是偏,也是引领方向的大问题。一方面应深入讨论,示明于众,纠偏于正时。另一方面,应采实践检验的标准以实证。

米拉宝鉴:确实应该展开讨论,不着急,慢慢来。所罗列的“偏见”有两类:一类是谬见,可以证明其荒谬,譬如说规则系统不能处理社会媒体,只能分析规范性语言。另一类就是“偏”见,盗亦有道,情有可原,虽然还是应该对其纠“正”。这类偏见主要源于不完全归纳,他们也许看到过或者尝试过规则系统某一个类型。 浅尝辄止,然后 jump to conclusion

发表在 自然语言处理 | 7 条评论

【NLP主流最大的偏见,规则系统的手工性】

【科普随笔:NLP主流的傲慢与偏见】中的第一条是 :

【偏见一】规则系统的手工编制(hand-crafted)是其知识瓶颈,而机器学习是自动训练的(言下之意:因此没有知识瓶颈)。

NLP(Natural Language Processing)主流对规则系统和语言学家大小偏见积久成堆,这一条可以算是万偏之源。随便翻开计算语言学顶级会议的论文,无论讨论什么语言现象,为了论证机器学习某算法的优越,在对比批评其他学习算法的同时,规则系统大多是随时抓上来陪斗的攻击对象,而攻击的理由往往只有这么一句话,规则系统的手工性决定了 blah blah(“其不能 scale up”,“其效率低下”,“其不鲁棒”,等等),或者干脆不给具体理由,直接说“文献【1】【2】【3】尝试了这个问题的不同方面,但这些系统都是手工编制的”,一句话判处死刑,甚至不用讨论它们的效果和质量。手工性几乎成了规则系统的“原罪”,编制这些系统的人因此成为学术共同体背负原罪的二等公民。

手工编制(hand-crafted)怎么了?在日常消费品领域,这是道地的褒义词,是特别的嘉奖,是批量机械化生产和千篇一律的反动,是独特和匠心的代表,是高价格理直气壮的理由。怎么到了NLP领域,突然就成了带有原罪的贬义词了呢。这是因为在NLP领域,代表主流的精算师们由于他们在NLP某些任务上的非凡成功,使得他们居功自傲,把成功无限推广和夸大,给这个community 施行了集体催眠术,让人相信机器学习是万能的。换句话说,批判手工编制的劣根性,其隐含的前提是机器学习是万能的,有效的,首选的。而实际情况是,面对自然语言的复杂性,机器学习只是划过了语言学的冰山一角,远远没有到主流们自觉和不自觉吹嘘的如入无人之地的万能境界。催眠的结果是不独不少语言学家以及NLP相关利益方(stake holders,如投资人和用户)被他们洗脑了,连他们自己也逐渐相信了自己编制的神话。

真实世界中,NLP 是应用学科,最终结果体现在应用软件(applications)上,属于语言软件工程。作为一个产业,软件工程领域吸引了无数软件工程师,虽然他们自嘲为“码工”,社会共同体给予他们的尊重和待遇是很高的(Bill Gates 自封了一个 Chief Engineer,说明了这位软件大王对工匠大师的高度重视)。古有鲁班,现有码师(coding master)。这些码工谁不靠手工编制代码作为立足之本呢?没听说一位明星工程师因为编制代码的手工性质而被贬损。同是软件工程,为什么计算语言学家手工编制NLP代码与其他工程师手工编制软件代码遭遇如此不同的对待。难道NLP应用比其他应用简单?恰恰相反,自然语言的很多应用比起大多数应用(譬如图形软件、字处理软件等等)更加复杂和艰难。解释这种不同遭遇的唯一理由就是,作为大环境的软件领域没有NLP主流的小环境里面那么多的傲慢和偏见。软件领域的大牛们还没有狂妄到以为可以靠自动编程取代手工编程。他们在手工编程的基础建设(编程架构和开发环境)上下功夫,而不是把希望寄托在自动编程的万能上。也许在未来的某一天,一些简单的应用可以用代码自动化来实现,但是复杂任务的全自动化从目前来看是遥遥无期的。不管从什么标准来看,非浅层的自然语言分析和理解都是复杂任务的一种。因此,机器学习作为自动编程的一个体现是几乎不可能取代手工代码的。规则系统的NLP应用价值会长期存在。

自动是一个动听的词汇。如果一切人工智能都是自动学习的,前景该有多么美妙。机器学习因为与自动连接在一起,显得那么高高在上,让人仰视。它承载着人类对未来世界的幻想。这一切理应激励自动学习专家不断创新,而绝不该成为其傲慢和偏见的理由。

在下面具体论述所谓规则系统的知识瓶颈软肋之前,值得一提的是,所谓自动是指系统的开发,不要混淆为系统的应用。在应用层面,无论是机器学习出来的系统,还是手工编制的系统,都是全自动地服务用户的,这是软件应用的性质决定的。这虽然是显而易见的事实,可确实有人被误导,一听说手工编制,就引申为基于规则系统的应用也是手工的,或者半自动的。

手工编制NLP系统是不是规则系统的知识瓶颈?毋庸讳言,确实如此。这个瓶颈体现在系统开发的周期上。但是,这个瓶颈是几乎所有大型软件工程项目所共有的,是理所当然的资源costs,不独为 NLP “专美”。从这个意义上看,以知识瓶颈诟病规则系统是可笑的,除非可以证明对所有NLP项目,用机器学习开发系统比编制规则系统,周期短而且质量高(个别的项目可能是这样,但一般而言绝非如此,下面还要详谈)。大体说来,对于NLP的浅层应用(譬如中文切词,专名识别,等等),没有三个月到半年的开发,没有至少一位计算语言学家手工编制和调试规则和至少半个工程师的平台层面的支持,是出不来系统的。对于NLP的深层应用(如句法分析,舆情抽取等),没有至少一年的开发,涉及至少一位计算语言学家的手工编制规则,至少半个质量检测员的协助和半个工程师的平台支持,外加软件工程项目普遍具有的应用层面的用户接口开发以及把开发出来的NLP引擎deploy到大数据上去的 operations 的投入,也是出不来 real life 的软件产品的。当然需要多少开发资源在很大程度上决定于开发人员(包括作为知识工程师的计算语言学家)的经验和质量。譬如让立委来开发中文系统(或英文、法文系统),就比找年轻语言学家快得多,以一当十绝不是自夸。其实,即便是10个新手,也未见得能做出立委的系统来,因为自然语言里面所牵涉到问题的复杂度不是拼时间就可以完成的。

计算语言学家编制规则系统与软件工程师编写程序没有本质不同。不过是所用的语言、形式框架和开发平台(language,formalism & development platform)不同而已,系统设计和开发的测重点不同而已。这就好比现代的工程师用所谓高级语言 Java 或者 C,与30年前的工程师使用汇编语言的对比一样,本质是一样的编程,只是层次不同罢了。在为NLP特制的“高级”语言和平台上,计算语言学家可以不用为 memory allocation 等非语言学的工程细节所羁绊,一般也不用为代码的优化和效率而烦扰,他们的注意力更多地放在面对自然语言的种种复杂现象,怎样设计语言处理的架构和流程,怎样突破规则系统的框架与其他语言处理包括机器学习进行协调,怎样平衡语言条件的宽窄,怎样与QA(质量检测)协调确保系统开发的健康,怎样保证语言学家团队编制规则的操作规范以确保系统的可持续性(data driven,unit testing,regression testing,code review,maintenability,baselines,等等等等),怎样根据语言开发需求对于现有形式框架的限制提出扩展要求,以及怎样保证复杂系统的鲁棒性等等。一个领头的计算语言学家就是一个系统的架构师,系统的成败绝不仅仅在于语言规则的编制及其堆积,更多的决定于系统架构的合理性。不要把村干部不当干部,也不要把知识工程师(计算语言学家)不当工程师。很多人由于根深蒂固的偏见,把计算语言学家一律当作资料员,殊不知能够在NLP规则系统中统领项目的计算语言学家,绝不是只要知道某个语言的syntax这些皮毛就可以胜任的。明星工程师是软件企业的灵魂,NLP 规则系统的大规模成功也一样召唤语言工程大师。

关于知识瓶颈的偏见,必须在对比中评估。规则系统需要语言学家手工开发的资源投入,机器学习也同样需要资源的投入,不过是资源方式不同而已。真实的情况是这样的:自然语言处理需要语言学知识,把这些知识形式化是每个NLP系统的题中应有之义,机器学习绝不会自动免疫,无需知识的形式化。具体说,机器学习的知识瓶颈在于data,大量的大量的data。排除研究性强实用性弱的无监督学习(unsupervised learning),机器学习中可资开发系统的方法是有监督的学习(supervised learning)。有监督的学习能开发知识系统成为应用的前提是必须有大量的手工标注的数据,作为学习的源泉。机器学习的算法是自动的(算法的创新、调试和实现当然还是手工的,可这种手工被认为是最高级劳动,=),而语言学家的手工规则甚至系统架构则被认为是资料员的低端工作,损人与自夸,无出其右),但是大量的数据标注则是手工的(本来就有现成标注的不算,那是例外)。因此,机器学习同样面临知识瓶颈,不过是知识瓶颈的表现从需要少量的知识工程师变成需要大量的低端劳动者(懂得语言及其任务的大学生或中学生即可胜任)。马克思说金钱是一般等价物,知识瓶颈的问题于是转化为高级劳动低级劳动的开销和转换问题:雇佣一个知识工程师的代价大,还是雇佣10个大学生的代价大?虽然这个问题根据不同项目不同地区等因素答案会有不同,但所谓机器学习没有知识瓶颈的神话可以休矣。

另外,知识瓶颈的对比问题不仅仅是针对一个应用而言,而应该放在多应用的可移植性上来考察。我们知道绝大多数NLP应用的技术支持都源于从自然语言做特定的信息抽取。由于机器学习把信息抽取看成一个直接对应输入和输出的黑匣子,所以一旦改变信息抽取目标和应用方向,以前的人工标注就废弃了,作为知识瓶颈的标注工作必须完全重来。可是规则系统不同,它可以设计成一个规则层级体系,独立于领域和应用方向的语言学规则组件(parsers)以及在语言学之上的针对领域和应用的信息抽取规则子系统。结果是,在转移应用目标时候,底层的语言学组件基本保持不变,而只需要重新编写不同的信息抽取规则而已。实践证明,对于规则系统,真正的知识瓶颈在语言学组件的构建上,而信息抽取本身花费不多。这是因为前者需要应对自然语言变化多端的表达方式,把它逻辑化,而后者是建立在逻辑形式(logical form)上的规则,一条等价于底层规则的几百上千条。因此,从多应用的角度看,机器学习的知识成本最终会远远大于规则系统。

本文引用地址:http://blog.sciencenet.cn/blog-362400-701815.html

[5]王伟 2013-6-24 20:23
期待李老师的下一讲-驳偏之二。至于“计算语言学的领域一直在排挤语言学”,的确,不是有“统计自然语言处理的某几个百分点提高,是通过解雇了几个语言学家而提高的”吗 ,呵呵。我认为,机器处理自然语言并不是仅一个统计就能简单搞定的。语言学家和计算机专家配合不好,是有很多方面原因。举个我听到的例子,语言学工作者对计算机专家说:“这个情况机器怎么就不能学习了,机器应该可学习到的呀!”,计算机专家回答说:’机器现在还没这么智能,这么抽象的东西暂时还学不了”–计算机学家认为语言学家不懂计算机。 计算机专家对语言学家说:“不能给个好用的归纳全的知识库吗,为什么总是打补丁,没完没了,还总出笑话”,语言学家回答说:语言学还真不这么简单,这个还就真拿不出!” –语言学家认为计算机学家不懂语言学。
尽管如此,我认为,随着研究的深入,相互了解的加深,二者只有自然融合才能渐入佳境,而不可强求。只有到了对语言处理层次的高要求时,比如文本理解阶段,才会使语言学的比重逐渐加大,而对语言处理层次需求是人类发展的必然,谁也无法阻挡,所以语言学家不必为此时情景暗伤。就像早期的关键词检索,根本还用不上句法知识。而现在都在奔语义理解和自动问答,句法知识想回避都难。

删除 回复 [4]李斌 2013-6-23 20:08
晕了,我是说您的观点正确
博主回复(2013-6-23 20:33):晕了,我没看出来,:)

删除 回复 [3]王伟 2013-6-23 15:44
我同意AIMan 的“规则系统和机器学习的本质区别在于‘规则的生成机制’”,其实“规则系统”和“机器学习”这种分类也不是很合理,因为它们本质上都某种规则下运行的,只是当初学科起名的时候,没考虑到现今这样情景,就像计算机千年问题一样,只不过AI领域的人心中都能够清楚是怎么一回事,我也不知怎样能在分类上显式表明区别,暂且如是用吧。

AIMan抛出的三个问题,我觉得很值得引发讨论。
1.“我们是否需要知道规则?知道规则对系统效率有提升吗?”
对于规则系统,必须是显式表示,因为人类专家看不见,自然就不能去对那些规则们进行“拿捏”了。而对于机器学习而言,显不显式表示无所谓,只要能用起来就行。显式的那些东西,若是给人类参考,供修改的话那还是有必要;若是只是为了直接使用,就没必要显式。一般来说,机器学习出来的那些规则,与人类专家总结的规则的格式内容,差别很大。人类专家的结果尽量是高概括的,高覆盖率的。机器学习的那些则一般都是比较细碎的,具体性的,覆盖度是通过泛化实现的,这泛化的前提是数据足够可用的情况下适度泛化,在问题隐含的规律特别复杂而数据又偏少的情况下,泛化太强也加大了错误率,也没什么意义。
规则系统中规则是必须人类知道,不知道也无法进行下去。而机器学习中的规则,人类知道与不知道那些规则无所谓,甚至人也知道不起,可能量大又琐碎。
因此,我认为知不知道规则与系统效率是无关的。系统效率只与规则质量有关,一般来说,规则系统由于高概括,单从运行效率来讲,效率是高的,但是建造规则系统效率是低的。这也只是一般来说,因其也与运行算法有关,比如像专家系统那样的,不采用RETE算法的话,运行效率也并不高。

2.“case by case的专家模式和一招鲜吃遍天的数学家模式,那种应用效果更好?”
这个应该是取决于要解决问题的类型。如果有的问题,规则总是那么少量,或很少变化。专家能够全部总结出来。同时,机器也能从给定的数据集中全部学习到所有的规则,那么两个效果应该是一样的。如果规则还是那么少量,专家能总结很好,但是机器学习所需要的现有数据集很难覆盖全面,那么规则系统胜出。如果规则复杂,不断变化,数据量极其庞大,人类总结很难做到高屋建瓴,常感“数据海量”之叹,而此问题的机器学习的数据轻易获取,高性能机器又可以很快抽取规则的话,且要比人类已有总结的那些规则覆盖量大的话,机器学习自然胜出。
但是,落到自然语言处理这样的问题上,规则系统坦诚来,说不能说总结得很好,不然就没有机器学习什么事了。而机器学习,在现有大规模高质量的标注集上是否能有效覆盖也难说,因此也就有了挡箭牌,一旦机器学习的结果不理想,都可以赖到标注数据集不充分上来。其实,二者都逃脱不了手工的问题(非监督学习的水平现还差太多,手工是必然的)。这也成了“语言专家总结语言规律 VS 标注人标注语料”问题中在工作量、工作难度、最终效果、后期维护、领域适应等多维变量中求最优的问题。当然,不可回避的是,机器学习算法和模型质量是否有效也是一个制约因素。
就目前看来,哪种模式更好,还难有确定结论,同时也分是在NLP的什么分支上。本质上彼此都有各自的软肋。若二者抱团发展也许更好,不过首先要解决好性格不合的问题。
另外,说一点,像李老师这样的既能建高楼(架构),又能给空房引来住户(语言知识),同时又有协调住户矛盾(知识冲突)的经验的“资深建筑师”确实不多,也确有独门绝技。
但这不具备大规模生产性,能否发展成容易传授性的,好继承下来的,更多些“自动”,是个值得探讨的问题。

3.机器学习也许不完美,但是足够实用,可以让我们一劳永逸,既然人类可以有这样一套智能系统,机器为什么不能有?
若能达到真正实用的地步,甚至比人类规则系统还好的话,人类自然不傻,怎能不去用。关键是,机器学习的这种不完美一定是在某些方面逊于人类规则系统,所以规则系统才有了存在的价值。
至少目前看来还没有到达谁取代谁,也没看出谁依靠谁来,局部战役有些战绩并不说明整个战事的最终结果。彼此都需要改进,都需要进步,相融合发展又有何不可。
规则系统,面对问题当语言资源超过专门的语言学家总结的规模的上限时,下一步怎么走? 机器学习,面对的问题,对于复杂推理性问题的求解,比如文本的篇章理解,应该怎么下手?而不能总停留在识别处理这个水平上。
博主回复(2013-6-23 20:50):谢谢,您说的三点都很深入到位,我有同感。

至于语言学人才断层问题,我以前提过,这是NLP大环境造成的。
教授要吃饭,要养学生,学生将来也要有立足的饭碗,就必须要发论文,拿经费,就非走主流路线不可,哪怕是跟着别人后面赶。其结果就是语言学和语言学人才荒芜了。世界上还很少有这样的怪现象:号称计算语言学的领域一直在排挤语言学。

删除 回复 [2]李斌 2013-6-23 13:04
太对了,没有宾州树库,句法分析怎么能上90%
博主回复(2013-6-23 19:38):这是从何谈起?我们没用宾州树库,也做出了英语和汉语的高精度而且鲁棒的 parsers,不比任何宾州树库训练出来的差。

在句法分析这一块,机器学习吃亏太多了,因为他们除了只此一家的宾州森林,连个其他选项都没有。

删除 回复 [1]AIMan 2013-6-22 22:39
规则系统和机器学习的本质区别在于“规则的生成机制”,而不是“是否hand-crafted”,其实两者都需要hand-crafted的,不少机器学习算法还存在经验参数,且应用范围有限制。

不同点是,前者的规则是人工方式确定,对于不同的case可能需要不同的实现算法或规则,修改一个规则不影响其它规则的运行;后者以算法自动生成(识别)“规则”(分类器),也就是说后者是工作在规则的规则上,比前者多了一层抽象,大大减少了工作量,改一下算法,所有的规则都变了。也就是说规则方式的”switch…case”是“显式”的,而机器学习的”switch…case…”是“隐式”的黑盒。那么,我们是否需要知道规则?知道规则对系统效率有提升吗?

同理,在应用层面。规则系统强调的case by case。那么用规则系统做NLP就需要语言学家,做大数据就需要相关领域的销售专家,这增加了系统实施的难度。而机器学习,对于NLP也好,大数据也好,图像识别也好,需要的都是数学家,理想状态下是一个模型打天下,当然这是理想,现在远远做不到。那么,case by case的专家模式和一招鲜吃遍天的数学家模式,那种应用效果更好?

根本上讲,两者的差异源于他们的基本假设不同,规则系统假设我们人类可以穷尽世界的规则,将世界用一个符号系统完整的重构。而机器学习假设我们无法穷尽规则,但是我们可以做一套智能系统,它可以识别规则,而且具有一定的泛化能力,它也许不完美,但是足够实用,可以让我们一劳永逸,既然人类可以有这样一套智能系统,机器为什么不能有?
博主回复(2013-6-23 19:52):总体说的不错。不过,生成机制也算是老生常谈了。机器学习把语义抽取过程当作黑匣子,规则系统试图走进去一步一步推理。可以溯源到经验主义和理性主义的世界观上去。

最后一段疑似隐含了偏见。规则系统从来没有假设人类可以穷尽世界。最多是可以穷尽或者逼近一个子领域。根本不需要一个符号系统完整地重构世界才可以构建有用的规则系统。最后说到“一劳永逸”的理想,已经进入AI科幻世界了,不足论也。

发表在 自然语言处理 | 留下评论

如何计算两个文档的相似度全文文档

将“如何计算两个文档的相似度”这个系列整理成了一个PDF文档放到微盘中了,感兴趣的同学可以下载:如何计算两个文档的相似度.pdf

如果你愿意看网页,也可以从这个标签进入:文档相似度

发表在 Topic Model, 自然语言处理 | 标签为 , , , | 留下评论

如何计算两个文档的相似度(三)

上一节我们用了一个简单的例子过了一遍gensim的用法,这一节我们将用课程图谱的实际数据来做一些验证和改进,同时会用到NLTK来对课程的英文数据做预处理。

三、课程图谱相关实验

1、数据准备
为了方便大家一起来做验证,这里准备了一份Coursera的课程数据,可以在这里下载:coursera_corpus,总共379个课程,每行包括3部分内容:课程名\t课程简介\t课程详情, 已经清除了其中的html tag, 下面所示的例子仅仅是其中的课程名:

Writing II: Rhetorical Composing
Genetics and Society: A Course for Educators
General Game Playing
Genes and the Human Condition (From Behavior to Biotechnology)
A Brief History of Humankind
New Models of Business in Society
Analyse Numérique pour Ingénieurs
Evolution: A Course for Educators
Coding the Matrix: Linear Algebra through Computer Science Applications
The Dynamic Earth: A Course for Educators

好了,首先让我们打开Python, 加载这份数据:

>>> courses = [line.strip() for line in file('coursera_corpus')]
>>> courses_name = [course.split('\t')[0] for course in courses]
>>> print courses_name[0:10]
['Writing II: Rhetorical Composing', 'Genetics and Society: A Course for Educators', 'General Game Playing', 'Genes and the Human Condition (From Behavior to Biotechnology)', 'A Brief History of Humankind', 'New Models of Business in Society', 'Analyse Num\xc3\xa9rique pour Ing\xc3\xa9nieurs', 'Evolution: A Course for Educators', 'Coding the Matrix: Linear Algebra through Computer Science Applications', 'The Dynamic Earth: A Course for Educators']

2、引入NLTK
NTLK是著名的Python自然语言处理工具包,但是主要针对的是英文处理,不过课程图谱目前处理的课程数据主要是英文,因此也足够了。NLTK配套有文档,有语料库,有书籍,甚至国内有同学无私的翻译了这本书: 用Python进行自然语言处理,有时候不得不感慨:做英文自然语言处理的同学真幸福。

首先仍然是安装NLTK,在NLTK的主页详细介绍了如何在Mac, Linux和Windows下安装NLTK:http://nltk.org/install.html ,最主要的还是要先装好依赖NumPy和PyYAML,其他没什么问题。安装NLTK完毕,可以import nltk测试一下,如果没有问题,还有一件非常重要的工作要做,下载NLTK官方提供的相关语料:

>>> import nltk
>>> nltk.download()

这个时候会弹出一个图形界面,会显示两份数据供你下载,分别是all-corpora和book,最好都选定下载了,这个过程需要一段时间,语料下载完毕后,NLTK在你的电脑上才真正达到可用的状态,可以测试一下布朗语料库

>>> from nltk.corpus import brown
>>> brown.readme()
‘BROWN CORPUS\n\nA Standard Corpus of Present-Day Edited American\nEnglish, for use with Digital Computers.\n\nby W. N. Francis and H. Kucera (1964)\nDepartment of Linguistics, Brown University\nProvidence, Rhode Island, USA\n\nRevised 1971, Revised and Amplified 1979\n\nhttp://www.hit.uib.no/icame/brown/bcm.html\n\nDistributed with the permission of the copyright holder,\nredistribution permitted.\n’
>>> brown.words()[0:10]
['The', 'Fulton', 'County', 'Grand', 'Jury', 'said', 'Friday', 'an', 'investigation', 'of']
>>> brown.tagged_words()[0:10]
[('The', 'AT'), ('Fulton', 'NP-TL'), ('County', 'NN-TL'), ('Grand', 'JJ-TL'), ('Jury', 'NN-TL'), ('said', 'VBD'), ('Friday', 'NR'), ('an', 'AT'), ('investigation', 'NN'), ('of', 'IN')]
>>> len(brown.words())
1161192

现在我们就来处理刚才的课程数据,如果按此前的方法仅仅对文档的单词小写化的话,我们将得到如下的结果:

>>> texts_lower = [[word for word in document.lower().split()] for document in courses]
>>> print texts_lower[0]
['writing', 'ii:', 'rhetorical', 'composing', 'rhetorical', 'composing', 'engages', 'you', 'in', 'a', 'series', 'of', 'interactive', 'reading,', 'research,', 'and', 'composing', 'activities', 'along', 'with', 'assignments', 'designed', 'to', 'help', 'you', 'become', 'more', 'effective', 'consumers', 'and', 'producers', 'of', 'alphabetic,', 'visual', 'and', 'multimodal', 'texts.', 'join', 'us', 'to', 'become', 'more', 'effective', 'writers...', 'and', 'better', 'citizens.', 'rhetorical', 'composing', 'is', 'a', 'course', 'where', 'writers', 'exchange', 'words,', 'ideas,', 'talents,', 'and', 'support.', 'you', 'will', 'be', 'introduced', 'to', 'a', ...

注意其中很多标点符号和单词是没有分离的,所以我们引入nltk的word_tokenize函数,并处理相应的数据:

>>> from nltk.tokenize import word_tokenize
>>> texts_tokenized = [[word.lower() for word in word_tokenize(document)] for document in courses]
>>> print texts_tokenized[0]
['writing', 'ii', ':', 'rhetorical', 'composing', 'rhetorical', 'composing', 'engages', 'you', 'in', 'a', 'series', 'of', 'interactive', 'reading', ',', 'research', ',', 'and', 'composing', 'activities', 'along', 'with', 'assignments', 'designed', 'to', 'help', 'you', 'become', 'more', 'effective', 'consumers', 'and', 'producers', 'of', 'alphabetic', ',', 'visual', 'and', 'multimodal', 'texts.', 'join', 'us', 'to', 'become', 'more', 'effective', 'writers', '...', 'and', 'better', 'citizens.', 'rhetorical', 'composing', 'is', 'a', 'course', 'where', 'writers', 'exchange', 'words', ',', 'ideas', ',', 'talents', ',', 'and', 'support.', 'you', 'will', 'be', 'introduced', 'to', 'a', ...

对课程的英文数据进行tokenize之后,我们需要去停用词,幸好NLTK提供了一份英文停用词数据:

>>> from nltk.corpus import stopwords
>>> english_stopwords = stopwords.words('english')
>>> print english_stopwords
['i', 'me', 'my', 'myself', 'we', 'our', 'ours', 'ourselves', 'you', 'your', 'yours', 'yourself', 'yourselves', 'he', 'him', 'his', 'himself', 'she', 'her', 'hers', 'herself', 'it', 'its', 'itself', 'they', 'them', 'their', 'theirs', 'themselves', 'what', 'which', 'who', 'whom', 'this', 'that', 'these', 'those', 'am', 'is', 'are', 'was', 'were', 'be', 'been', 'being', 'have', 'has', 'had', 'having', 'do', 'does', 'did', 'doing', 'a', 'an', 'the', 'and', 'but', 'if', 'or', 'because', 'as', 'until', 'while', 'of', 'at', 'by', 'for', 'with', 'about', 'against', 'between', 'into', 'through', 'during', 'before', 'after', 'above', 'below', 'to', 'from', 'up', 'down', 'in', 'out', 'on', 'off', 'over', 'under', 'again', 'further', 'then', 'once', 'here', 'there', 'when', 'where', 'why', 'how', 'all', 'any', 'both', 'each', 'few', 'more', 'most', 'other', 'some', 'such', 'no', 'nor', 'not', 'only', 'own', 'same', 'so', 'than', 'too', 'very', 's', 't', 'can', 'will', 'just', 'don', 'should', 'now']
>>> len(english_stopwords)
127

总计127个停用词,我们首先过滤课程语料中的停用词:
>>> texts_filtered_stopwords = [[word for word in document if not word in english_stopwords] for document in texts_tokenized]
>>> print texts_filtered_stopwords[0]
['writing', 'ii', ':', 'rhetorical', 'composing', 'rhetorical', 'composing', 'engages', 'series', 'interactive', 'reading', ',', 'research', ',', 'composing', 'activities', 'along', 'assignments', 'designed', 'help', 'become', 'effective', 'consumers', 'producers', 'alphabetic', ',', 'visual', 'multimodal', 'texts.', 'join', 'us', 'become', 'effective', 'writers', '...', 'better', 'citizens.', 'rhetorical', 'composing', 'course', 'writers', 'exchange', 'words', ',', 'ideas', ',', 'talents', ',', 'support.', 'introduced', 'variety', 'rhetorical', 'concepts\xe2\x80\x94that', ',', 'ideas', 'techniques', 'inform', 'persuade', 'audiences\xe2\x80\x94that', 'help', 'become', 'effective', 'consumer', 'producer', 'written', ',', 'visual', ',', 'multimodal', 'texts.', 'class', 'includes', 'short', 'videos', ',', 'demonstrations', ',', 'activities.', 'envision', 'rhetorical', 'composing', 'learning', 'community', 'includes', 'enrolled', 'course', 'instructors.', 'bring', 'expertise', 'writing', ',', 'rhetoric', 'course', 'design', ',', 'designed', 'assignments', 'course', 'infrastructure', 'help', 'share', 'experiences', 'writers', ',', 'students', ',', 'professionals', 'us.', 'collaborations', 'facilitated', 'wex', ',', 'writers', 'exchange', ',', 'place', 'exchange', 'work', 'feedback']

停用词被过滤了,不过发现标点符号还在,这个好办,我们首先定义一个标点符号list:
>>> english_punctuations = [',', '.', ':', ';', '?', '(', ')', '[', ']‘, ‘&’, ‘!’, ‘*’, ‘@’, ‘#’, ‘$’, ‘%’]

然后过滤这些标点符号:
>>> texts_filtered = [[word for word in document if not word in english_punctuations] for document in texts_filtered_stopwords]
>>> print texts_filtered[0]
['writing', 'ii', 'rhetorical', 'composing', 'rhetorical', 'composing', 'engages', 'series', 'interactive', 'reading', 'research', 'composing', 'activities', 'along', 'assignments', 'designed', 'help', 'become', 'effective', 'consumers', 'producers', 'alphabetic', 'visual', 'multimodal', 'texts.', 'join', 'us', 'become', 'effective', 'writers', '...', 'better', 'citizens.', 'rhetorical', 'composing', 'course', 'writers', 'exchange', 'words', 'ideas', 'talents', 'support.', 'introduced', 'variety', 'rhetorical', 'concepts\xe2\x80\x94that', 'ideas', 'techniques', 'inform', 'persuade', 'audiences\xe2\x80\x94that', 'help', 'become', 'effective', 'consumer', 'producer', 'written', 'visual', 'multimodal', 'texts.', 'class', 'includes', 'short', 'videos', 'demonstrations', 'activities.', 'envision', 'rhetorical', 'composing', 'learning', 'community', 'includes', 'enrolled', 'course', 'instructors.', 'bring', 'expertise', 'writing', 'rhetoric', 'course', 'design', 'designed', 'assignments', 'course', 'infrastructure', 'help', 'share', 'experiences', 'writers', 'students', 'professionals', 'us.', 'collaborations', 'facilitated', 'wex', 'writers', 'exchange', 'place', 'exchange', 'work', 'feedback']

更进一步,我们对这些英文单词词干化(Stemming),NLTK提供了好几个相关工具接口可供选择,具体参考这个页面: http://nltk.org/api/nltk.stem.html , 可选的工具包括Lancaster Stemmer, Porter Stemmer等知名的英文Stemmer。这里我们使用LancasterStemmer:

>>> from nltk.stem.lancaster import LancasterStemmer
>>> st = LancasterStemmer()
>>> st.stem(‘stemmed’)
‘stem’
>>> st.stem(‘stemming’)
‘stem’
>>> st.stem(‘stemmer’)
‘stem’
>>> st.stem(‘running’)
‘run’
>>> st.stem(‘maximum’)
‘maxim’
>>> st.stem(‘presumably’)
‘presum’

让我们调用这个接口来处理上面的课程数据:
>>> texts_stemmed = [[st.stem(word) for word in docment] for docment in texts_filtered]
>>> print texts_stemmed[0]
['writ', 'ii', 'rhet', 'compos', 'rhet', 'compos', 'eng', 'sery', 'interact', 'read', 'research', 'compos', 'act', 'along', 'assign', 'design', 'help', 'becom', 'effect', 'consum', 'produc', 'alphabet', 'vis', 'multimod', 'texts.', 'join', 'us', 'becom', 'effect', 'writ', '...', 'bet', 'citizens.', 'rhet', 'compos', 'cours', 'writ', 'exchang', 'word', 'idea', 'tal', 'support.', 'introduc', 'vary', 'rhet', 'concepts\xe2\x80\x94that', 'idea', 'techn', 'inform', 'persuad', 'audiences\xe2\x80\x94that', 'help', 'becom', 'effect', 'consum', 'produc', 'writ', 'vis', 'multimod', 'texts.', 'class', 'includ', 'short', 'video', 'demonst', 'activities.', 'envid', 'rhet', 'compos', 'learn', 'commun', 'includ', 'enrol', 'cours', 'instructors.', 'bring', 'expert', 'writ', 'rhet', 'cours', 'design', 'design', 'assign', 'cours', 'infrastruct', 'help', 'shar', 'expery', 'writ', 'stud', 'profess', 'us.', 'collab', 'facilit', 'wex', 'writ', 'exchang', 'plac', 'exchang', 'work', 'feedback']

在我们引入gensim之前,还有一件事要做,去掉在整个语料库中出现次数为1的低频词,测试了一下,不去掉的话对效果有些影响:

>>> all_stems = sum(texts_stemmed, [])
>>> stems_once = set(stem for stem in set(all_stems) if all_stems.count(stem) == 1)
>>> texts = [[stem for stem in text if stem not in stems_once] for text in texts_stemmed]

3、引入gensim
有了上述的预处理,我们就可以引入gensim,并快速的做课程相似度的实验了。以下会快速的过一遍流程,具体的可以参考上一节的详细描述。

>>> from gensim import corpora, models, similarities
>>> import logging
>>> logging.basicConfig(format=’%(asctime)s : %(levelname)s : %(message)s’, level=logging.INFO)

>>> dictionary = corpora.Dictionary(texts)
2013-06-07 21:37:07,120 : INFO : adding document #0 to Dictionary(0 unique tokens)
2013-06-07 21:37:07,263 : INFO : built Dictionary(3341 unique tokens) from 379 documents (total 46417 corpus positions)

>>> corpus = [dictionary.doc2bow(text) for text in texts]

>>> tfidf = models.TfidfModel(corpus)
2013-06-07 21:58:30,490 : INFO : collecting document frequencies
2013-06-07 21:58:30,490 : INFO : PROGRESS: processing document #0
2013-06-07 21:58:30,504 : INFO : calculating IDF weights for 379 documents and 3341 features (29166 matrix non-zeros)

>>> corpus_tfidf = tfidf[corpus]

这里我们拍脑门决定训练topic数量为10的LSI模型:
>>> lsi = models.LsiModel(corpus_tfidf, id2word=dictionary, num_topics=10)

>>> index = similarities.MatrixSimilarity(lsi[corpus])
2013-06-07 22:04:55,443 : INFO : scanning corpus to determine the number of features
2013-06-07 22:04:55,510 : INFO : creating matrix for 379 documents and 10 features

基于LSI模型的课程索引建立完毕,我们以Andrew Ng教授的机器学习公开课为例,这门课程在我们的coursera_corpus文件的第211行,也就是:

>>> print courses_name[210]
Machine Learning

现在我们就可以通过lsi模型将这门课程映射到10个topic主题模型空间上,然后和其他课程计算相似度:
>>> ml_course = texts[210]
>>> ml_bow = dicionary.doc2bow(ml_course)
>>> ml_lsi = lsi[ml_bow]
>>> print ml_lsi
[(0, 8.3270084238788673), (1, 0.91295652151975082), (2, -0.28296075112669405), (3, 0.0011599008827843801), (4, -4.1820134980024255), (5, -0.37889856481054851), (6, 2.0446999575052125), (7, 2.3297944485200031), (8, -0.32875594265388536), (9, -0.30389668455507612)]
>>> sims = index[ml_lsi]
>>> sort_sims = sorted(enumerate(sims), key=lambda item: -item[1])

取按相似度排序的前10门课程:
>>> print sort_sims[0:10]
[(210, 1.0), (174, 0.97812241), (238, 0.96428639), (203, 0.96283489), (63, 0.9605484), (189, 0.95390636), (141, 0.94975704), (184, 0.94269753), (111, 0.93654782), (236, 0.93601125)]

第一门课程是它自己:
>>> print courses_name[210]
Machine Learning

第二门课是Coursera上另一位大牛Pedro Domingos机器学习公开课
>>> print courses_name[174]
Machine Learning

第三门课是Coursera的另一位创始人,同样是大牛的Daphne Koller教授的概率图模型公开课
>>> print courses_name[238]
Probabilistic Graphical Models

第四门课是另一位超级大牛Geoffrey Hinton的神经网络公开课,有同学评价是Deep Learning的必修课。
>>> print courses_name[203]
Neural Networks for Machine Learning

感觉效果还不错,如果觉得有趣的话,也可以动手试试。

好了,这个系列就到此为止了,原计划写一下在英文维基百科全量数据上的实验,因为课程图谱目前暂时不需要,所以就到此为止,感兴趣的同学可以直接阅读gensim上的相关文档,非常详细。之后我可能更关注将NLTK应用到中文信息处理上,欢迎关注。

注:原创文章,转载请注明出处“我爱自然语言处理”:www.52nlp.cn

本文链接地址:http://www.52nlp.cn/如何计算两个文档的相似度三

发表在 Topic Model, 推荐系统, 自然语言处理 | 标签为 , , , , , , , , , , , , , , , , | 8 条评论

人工智能与机器翻译研讨会

人工智能与机器翻译研讨会
Workshop on Artificial Intelligence and Machine Translation
2013年6月6日15:00-17:00
北京大学一教202
特邀嘉宾

语智云帆团队、中科院计算所骆卫华博士、资深职业翻译娄东来先生

活动主持
北京大学MTI教育中心王华树老师
关键词
云计算 大数据 机器翻译 译后编辑 人机交互 移动互联网
主办单位
北京大学MTI教育中心研讨会
基本信息
活动时间:2013年6月6日(周四)下午15:00-17:00
报名日期:微活动页面于2013年6月5日(周三)23:59截止报名
活动地点:北京大学一教202
活动费用:免费
注意事项:(1)进入北大校门需要出示身份证。(2)参会人员请自带电脑。(3)非经微活动报名人员,请将个人信息、联系方式发送至王老师邮箱:richard@pkumti.net。
研讨会形式:
本 次研讨会除了嘉宾演讲和互动讨论之外,还特别设置了译后编辑现场实验环节(请与会人员自带电脑),嘉宾团队将就实验结果与参会者共同深入探讨。此次活动将 采取“线上线下同步”的方式开展,不能直接前往北京大学研讨会现场参与此次活动的朋友,也可以通过新浪微博观看研讨会的图文直播并参与实验和互动。
组织方介绍:

北京大学MTI教育中心是北京大学外国语学院从事翻译硕士专业(MTI)学位研究生培养的专门机构。自2008年成立以来,MTI教育中心坚持以职业化为教 学理念、注重翻译实践的培养原则,强调双语转换能力,翻译技术和管理等能力并重的培养策略,不断邀请行业知名人士开展讲座、沙龙、研讨会等活动,就行业热 点话题与学生开展深入交流和讨论。

此次研讨会,语智云帆团队受邀将围绕“人工智能与机器翻译”与同学们进行交流,介绍云计算、大数据等概念及其影响,探讨人工智能与机器翻译技术的发展趋势,以及“机器翻译+译后编辑”实践经验等。

语智云帆是一个成长中的创业团队,凭借强大的自然语言处理研发实力和多年积累的海量专业语料资源,语智云帆致力于提供高效率、高质量、低成本的语言服务技术解决方案,并积极探索可能对行业产生深远影响的技术及应用,已在行业中建立起一定的品牌知名度。

橙译中科专注于机器翻译技术的应用,拥有完全自主知识产权的核心机器翻译引擎和技术,并持续研发改进,保证技术始终处于国际先进水平。橙译中科的研究团队具 有国际知名度,在国内外最重要的多个评测(NIST OpenMT Evaluation、IWSLT、CWMT)中屡获佳绩,作为牵头单位承担了多项国 家重点课题。橙译中科已先后为三星电子、SK电讯、北京市政府、阿里巴巴、科大讯飞、华为、东方灵盾等公司或机构开发了机器翻译系统和核心技术。橙译语音 翻译引擎已经集成到科大讯飞的语音云示范应用“讯飞语点”和中国移动手机门户“灵犀”等产品中,而“专译家”、“电商多语翻译”等垂直翻译软件也已经实际 应用于多家公司的业务中。

发表在 自然语言处理 | 留下评论