出于文本归类和数据处理之需求,这段时间研究了下文本处理类的机器学习方面的东西。也快过年放假了,在此做一个总结和感受吧。
正如绝大多数的科学研究一样,机器学习的算法绝大多数都是西方早在几年、十几年和几十年发布出来,然后再经过西方工程化之后,国内再慢慢跟上路来。在中文和英文处理的最大问题在于中文需要分词。当然可以将单个的汉字作为算法的处理单元,但是由于汉语的词汇比起单词含有多得多的信息,所以分词算是汉语处理的第一步。目前汉语分词算法实现的比较好的有:
个人感觉,中文分词目前已经到了90%以上的分词精度,已经十分满足工程应用了。但是语言是动态不断变化的,而且网络用语越来越多,变化也越来越快,分词程序如果能够快速跟踪这些变化,还是十分有现实价值的。
这里这样列,但是实际上文本归类和情感分析是一个问题,无非就是2类和多类的关系。文本归类分为长文本归类和段文本归类:长文本比如一篇文章、一个博文之类的;短文本比如Twitter和微博之类的。短文本的归类比长文本的归类难得多,长文本字词丰富,一般采用多项式模型(词频统计);而短文本一般采用伯努利模型(词出现与否)效果会好一些。在实现测试的过程中,以下几种算法效果较好:
贝叶斯网络
算是最简单的学习算法了,具有理论基础清晰、实现简单、计算量小、效果较好的有点。具有多项式模型和伯努利模型两种实现方式。在实践中,某东语聊好评差评两分类能达到90%的分类精度、sogou分类语聊10分类也能达到70%多的分类精度。
最大熵模型
这个吴军博士在《数学之美》中有介绍。用几句话来概括就是:如果有先验约束知识,就满足这些约束,否则就不做任何假设,因为不做任何假设是最可靠的,而等概率分布时候的熵最大,称之为最大熵模型。举个例子:如果没有任何条件限制,我问投一个骰子1向上的概率是多大,答案是1/6,然后我告诉你投一次出现3和4的概率之和是1/2,然后你肯定推算出这种约束下1向上的概率是1/8。正是秉着这样的观念,文献说最大熵模型在单一模型算法中效果差不多是最好的。
最大熵模型提出的比较早了,但是利用起来还不是很悠久,就是传统的GIS迭代求解效率太低,而后面改进使得求解速度大大加快的时候,在实际中才慢慢被利用。代码中是参照nltk的Python实现进行C/C++的移植的。
LDA(Latent Dirichlet Allocation)
也是一个比较流行的分类算法,这种算法和上面不同的是,不知道预先的类别种类和数目,有点类似聚类的意思。该算法在Twitter和微博主题分类和主题发现中被广泛使用,同时在广告推荐和信息投放中也被大量应用。还有就是这个算法跟别的算法不同的是,涉及到的数学和统计的知识比较的多,要看明白还是需要些功夫的。
推荐的文章:
无论是不是个坑,深度学习都是当前机器学习的热点和主流。让我的最大感受就是:传统的机器学习都是科学家们精妙的设计出各种数学模型和求解算法,而深度学习就是粗鲁地用大数据和巨大计算量拼出一个毕竟训练结果的模型而没有任何理论去支持它。这又让我想起了:
“我们(在考虑图灵测试中的机器时)也应当允许这样一种可能,那就是一些工程师可能会建造一台机器,它能够完成任务(通过图灵测试),但其工作的原理却未必能够被其创造者所完全理解,这是因为他们采用了一种试验的方式(来建造这台机器)。“
PS:搞深度学习的话,先换台好显卡的电脑吧!