月度归档:2012年04月

Coursera公开课笔记: 斯坦福大学机器学习第一课“引言(Introduction)”

Deep Learning Specialization on Coursera

注:这是我在“我爱公开课”上做的学习笔记,会在52opencourse和这里同步更新。随着Coursera和Udacity这样的注重交互式的网络课堂的兴起,相信传统教育模式即将遭到颠覆。欢迎大家在52opencourse这个问答平台上进行交流,希望能为大家提供一个开放、免费、高质量以及世界级的公开课中文交流平台和桥梁。

以下转自原文: Coursera公开课笔记: 斯坦福大学机器学习第一课“引言(Introduction)”

Coursera上于4月23号启动了6门公开课,其中包括斯坦福大学于“机器学习”课程,由机器学习领域的大牛Andrew Ng教授授课:

https://www.coursera.org/course/ml

课程刚刚开始,对机器学习感兴趣的同学尽量注册,这样即使没有时间学习,获取相关资料特别是视频比较方便。

由于工作繁忙的缘故,这批科目里我主要想系统的学习一下“机器学习”课程,所以计划在52opencourse和52nlp上同步我的机器学习课程笔记,一方面做个记录和总结,另一方面方便后来者参考。

Coursera上机器学习的课程学习过程是这样的:看Andrew Ng教授的授课视频或者看看课程相关的ppt;答系统随机出的题,一般5道题,单选、多选甚至填空,满分5分;编程作业,需用Octave(和 Matlab相似的开源编程语言)完成,提交给系统得分,在规定时间内完成,均取最高分,超过规定时间会对得分打折。

第一周(4月23日-4月29日)的课程包括三课:

  • Introduction(引言)
  • Linear Regression with One Variable(单变量线性回归)
  • (Optional) Linear Algebra Review(线性代数回顾)(对于线性代数熟悉的同学可以选修)
4月30日是答题(Review Questions)截至时间。
以下是第一课“引言”的PPT课件资料,视频可以在Coursera机器学习课程上观看或下载:
PPT   PDF
以下是本课程的学习笔记,除了参考机器学习课程本身的内容外,还参考网上其他资料,特别是维基百科来做注解,欢迎学习该课程的同学在“我爱公开课”上进行探讨。

继续阅读

推荐《用Python进行自然语言处理》中文翻译-NLTK配套书

Deep Learning Specialization on Coursera

  NLTK配套书《用Python进行自然语言处理》(Natural Language Processing with Python)已经出版好几年了,但是国内一直没有翻译的中文版,虽然读英文原版是最好的选择,但是对于多数读者,如果有中文版,一定是不错的。下午在微博上看到陈涛sean 同学提供了NLTK配套书的中译本下载,就追问了一下,之后译者和我私信联系,并交流了一下,才发现是作者无偿翻译的,并且没有出版计划的。翻译是个很苦的差事,向译者致敬,另外译者说里面有一些错误,希望能得到nlper们的指正,大家一起来修正这个珍贵的NLTK中文版吧。另外译者希望在“52nlp”上做个推荐,这事是造福nlper的好事,我已经在“资源”里更新了本书的链接,以下是书的下载地址:

PYTHON自然语言处理中文翻译-NLTK Natural Language Processing with Python 中文版

  翻看了一下翻译版,且不说翻译质量,单看排版就让人觉得向一本正式的翻译书籍,说明译者是非常有心的。以下是从翻译版中摘录的“译者的话”:

  作为一个自然语言处理的初学者,看书看到“训练模型”,这模型那模型的,一直不知
道模型究竟是什么东西。看了这本书,从预处理数据到提取特征集,训练模型,测试修改等,一步一步实际操作了之后,才对模型一词有了直观的认识(算法的中间结果,存储在计算机中的一个个pkl 文件,测试的时候直接用,前面计算过的就省了)。以后听人谈“模型”的时候也有了底气。当然,模型还有很多其他含义。还有动词的“配价”、各种搭配、客观逻辑对根据文法生成的句子的约束如何实现?不上机动手做做,很难真正领悟。

  自然语言处理理论书籍很多,讲实际操作的不多,能讲的这么系统的更少。从这个角度
讲,本书是目前世界上最好的自然语言处理实践教程。初学者若在看过理论之后能精读本书,必定会有获益。这也是翻译本书的目的之一。

  本书是译者课余英文翻译练习,抛砖引玉。书中存在很多问题,尤其是第10 章命题逻
辑和一阶逻辑推理在自然语言处理中的应用。希望大家多多指教。可以在微博上找到我(w
eibo.com/chentao1999)。虽然读中文翻译速度更快,但直接读原文更能了解作者的本意。

  原书作者在书的最后列出了迫切需要帮助改进的条目,对翻译本书建议使用目标语言的
例子,目前本书还只能照搬英文的例子,希望有志愿者能加入本书的中文化进程中,为中文
自然语言处理做出贡献。

  将本书作学习和研究之用,欢迎传播、复制、修改。山寨产品请留下译者姓名和微博。
用于商业目的,请与原书版权所有者联系,译者不承担由此产生的责任。

翻译:陈涛(weibo.com/chentao1999)

2012 年4 月7 日

   最后希望大家在读这本书的过程中,记录一下需要勘误的地方,可以在“评论”中给出勘误建议,一起来修正这本书。谢谢!

转载: Topic modeling made just simple enough

Deep Learning Specialization on Coursera

在微博上看到 @c0d3r_Jia 同学发的一条信息:

这篇讲LDA更"人道"一些,比那些用来证明自己算法正确的文章清楚很多。不过也提到,LDA或者概率模型要用好,需要不断的筛选features、精选进行操作的token才行。// Topic modeling made just simple enough http://t.cn/zOpOc4D //喜欢这样的文章是不是就是Sheldon看不上Leonard很重要的方面,呵呵

就打开链接看了一下,然后转发了,再之后有同学反映文章被墙了,才发现这篇文章发表在wordpress.com上,转载在这里吧,有需要的同学可以看看,原文见:Topic modeling made just simple enough
继续阅读

分享:ConceptBro语义网浏览器

Deep Learning Specialization on Coursera

一款开源软件,http://wuliang.github.com/assets/projects/ConceptBro/

通用型的语义网浏览器,支持WordNet,WikiNet,JA-WordNet。由于提供了统一的数据库接口,所以有其他形式的语义网络格式都比较容易支持,只要为其写一个数据库接口(适配)。以下是数据库(策略)选择菜单。

使用方法等细节就不在这里多说了,项目站点都有。希望使用之后多提反馈意见。当然也欢迎大家根据自己的需求进行后续开发。另外一点,由于中文的WordNet似乎缺少完全开放的(比如台湾中科院的需要去信索取),所以就没有做这方面的工作,请大家理解。

 

Itenyh版-用HMM做中文分词五:一个混合的分词器

Deep Learning Specialization on Coursera

        在上一节中,我们看到了HMM分词器的优势在于它的灵活性,能够联系上文情况作出是否分词的判断,但是过于灵活又会出现一些低级的分词错误。一种扬长避短的想法是使用词典限定HMM的分词。具体的做法是,用基于词典的分词方法分出N种结果,然后用HMM挑出最有可能的分词结果。

       介绍一下分词使用的词典,在《中文分词入门之资源》有提到:

        Mandarin.dic                             分词词典,约40000条词汇

        对于一段文本,找出所有可能的切分结果叫做全切分,全切分可以保证切分结果集对正确切分结果100%的召回率,换句话说全切分中一定包含正确结果(在不包含未登录词的前提之下)。长度为n的句子,最大全切分数量可以达到2`(n-1)个,因此全切分计算量会随着句子长度增加急剧上升。举例,句子“研究生命起源”的全切分如下:

研/究/生/命

研/究/生命

研究/生/命

研究/生命

研究生/命

共有5个切分方案,其中倒数第二个是正确切分。下面讲一下我对句子进行全切分用的具体算法。

        如上图,考虑构建一颗多叉树,其中每一条从root到叶子节点的路径均为一种分词结果,所有root到叶子节点的路径就是全切分的结果。树的建立方法是使用的递归:

        对句子进行正向词典匹配,结果为:

        研            对剩余句子:究生命    进行词典匹配

        研究        对剩余句子:生命        进行词典匹配

        研究生    对剩余句子:命            进行词典匹配

        全切分结果准备就绪,下面的问题是如何从备选分词中选出最佳分词结果,因为备选结果只有有限的数量,因此可以使用枚举算法求最佳解:

                                                          ArgmaxC,O  P(C|O)

解法在第2集中已经提到,等价于求:

ArgmaxC,O  P(O|C)P(C)

       为了避免计算溢出(小数位数太多计算机无法表示),我们改为求:

                                                          ArgminC,O  -lnP(O|C) – lnP(C)

        对于句子“研究生命”,分词结果如下:

        研/究/生/命:44.24491284128293

        研/究/生命:37.12604972173189

        研究/生/命:33.59480382540995

        研究/生命:26.49050292705271

        研究生/命:32.15705471620734

        其中“研究/生命”拥有最低值,被选为最优解。再举一些有意思的分词结果:

        研究生/研究/生活

        结合/成/分子

        他/说/的/确实/在/理

        可以看出这种混合分词器能够灵活的掌握字符间的分和,消除一些歧义分词。

        下面是我对几种分词方法的实验结果,同时使用了ICTCLAS2011作为一个权威的分词效果比对,其中ICTCLAS2011使用的是它自带的词典,其他分词方法使用的词典是Mandarin.dic

                                      每秒分词     P         R            F

普通最大词匹配          5482401      0.76   0.85      0.80

扩展的最大匹配          1118591      0.79   0.75      0.77

普通的Markov           1590173      0.76   0.72      0.74

混合的Markov           46818        0.73   0.84      0.78

ICTCLAS2011           942973       0.92   0.92     0.92

          可以看出ICTCLAS果然是名不虚传,相对于混合的Markov,ICTCLAS使用的是层叠式的HMM模型,可以很好的识别出未登录词;其次ICTCLAS使用了基于N-最短路径的切分,对计算效率也有很大的提高。

          PS:因为之前没有想过要分享分词的程序,所以写得比较混乱,最近也很忙,我会尽快整理发上来的。