简单的可能是最好的
注意:本文不谈哲理。
最近测试了一下用贝叶斯算法对短信进行分类。测试数据是经过人工肉眼分类的1万多条短信,分为正常、广告、犯罪、黄色等多个类别。
贝叶斯算法有两种选择,一种是朴素贝叶斯,另一种是费舍尔贝叶斯,前者假定各变量之间完全独立,后者算法相对复杂。当然,大学毕业10多年我已经没耐心去看具体算法了,只知道这些大概。
要把文本内容拿去做贝叶斯训练和分类,首先就要把它拆开成多个独立的字或者词。这对于英文不是个问题,因为英文单词之间有空格来分隔,而对中文就复杂了,因为如何分词是一个需要一定智能的问题。比如说,“和尚未曾谋面的人通电话是一种冒险”与“和尚未曾谋面尼姑倒先见到了”,他们的前6个字完全相同,断句方式却截然不同。按照见到一个词就分一个词的算法来做,最简单,但是也最容易出简单错误,比如在前面这个例子里,只要词库里有“和尚”这个词,就会先匹配“和尚”。另有更为高深的分词方法,无非是向后多看一些字,根据语言习惯或者说是用词搭配的概率来决定如何断句。
测试方法就是哪一半的短信来“训练”,以得到合适的参数,然后用这些参数对另一半短信进行分类,分类的结果再跟“标准答案”做比较。
结果很有意思,用朴素贝叶斯算法以及最先见到最大长度词语匹配法的组合,能得到最佳的效果,不但准确度最高,达到95%,而且速度最快,在一台双核Intel CPU的机器上能做到零点几个毫秒处理一条短信。
这个结果有些出乎意料,天下怎么会有这等好事,吃草最少的马儿竟然跑得最快。
没有评论:
发表评论