分享到:QQ空间新浪微博腾讯微博人人网微信

支持中文文本的数据挖掘平台开源项目PyMining发布

2018-07-11 09:46

最近一个月,过年的时候天天在家里呆着,年后公司的事情也不断,有一段时间没有更新博客了。PyMining是我最近一段时间构思的一个项目,虽然目前看来比较微型。该项目主要是针对中文文本的数据挖掘算法的实验与应用。从项目的目标来说,希望使用者可以很方便的使用现有的数据挖掘、机器学习算法与添加需要的算法。

项目概述

项目目前主要关注中文文本的数据挖掘算法。由于每种数据挖掘算法的局限性都很大,就拿分类算法一样,决策树、朴素贝叶斯这两种算法都有着自己的特性,只能在某一种类型的类型的数据上应用比较良好,比如朴素贝叶斯,就对于那些短文本的分类比较适合,而决策树对于短文本、稀疏情况下就效果欠佳了,特别是在数据比较稀疏的情况。在这种情况下,当有一个数据挖掘任务的时候,怎样去找到一个合适的算法就非常重要了。如果从头开发算法,是一个成本很高的事情,特别是对文本来说就更麻烦,需要在前面做一些如分词、去停用词等等操作。如果有一个平台,可以支持快速的开发,让用户能够快速的看到,针对自己的数据,什么样的算法比较合适,就是本项目的一个初衷。

在这个角度上来说,还是有一些开源的数据挖掘工具,如weka是一个很全面的工具,里面支持几十上百种数据挖掘(机器学习)的算法。不过从我之前使用weka的经验来说,weka对于中文的支持非常糟糕,而且对于稍大一点的数据,就直接罢工不干了(我记得尝试过一个40M左右的文本的聚类任务,weka直接死掉了)。所以开发出一个支持中文、能够支持更大数据量的平台就很有必要了。

另外项目目前规划上来说,主要是针对单机上能够运行的任务。虽然分布式机器学习算法(换个更fashion的名字是云计算),是目前最热门的一个话题,但是对于大多数的任务来说,单机版也足够了。对于算法的学习、试验来说,单机版可以更简单、方便的将算法的特性展示出来。当了解了怎样写单机版后,将其改写为简单的分布式版本(比如mpi或者map-reduce),并不是那么复杂的一个事情。

目前项目使用Python作为开发语言,虽然之前只写过c++,但是从接触Python开始,就觉得Python语言在快速开发、可读性方面非常的适合,而且极其良好的跨平台型也是Python的优势,我平时的开发环境是在linux(ubuntu)下进行。

项目的名字是PyMining,这个取这个名字是为了能够简单的说明项目的开发语言与用途,Py是指的Python,Mining是指的Data Mining(数据挖掘)。

     PyMining与我的工作:

由于我的工作就是分布式数据挖掘,而且中文的数据挖掘也是我的工作的方向之一,这里就谈谈PyMining与我工作的关系。PyMining是我完全利用下班后的时间开发,对于我实现的算法,我将会尽量的参考经典的实现(已经公开的论文、网页等内容),而非公司那些我平时接触的算法的实现。

另外对于分词词典、测试数据等比较“贵重”的内容,我也不会使用任何受保护的数据,我会选择那些网上比较容易找到的内容并且加以提炼与修改作为项目的一部分。

License

目前使用BSD作为项目的License,简单来说,就是本项目的源代码可以被商业、非商业自由的使用,也可以将其修改作为二进制和源代码再次发布,但是保留原源代码(或者原源代码编译的二进制程序)的BSD协议,并且不能使用原作者(机构)名字来作为产品的市场推广,更详细的信息请参见发布包内的文档。

中文文本的数据挖掘基础

想了想,还是先科普一下中文文本的数据挖掘基础吧。一个典型的文本分类的数据挖掘流程:

image

上面这张图初看有点乱,我这里解释一下,红色的部分是训练时候调用的模块,绿色是测试时候调用的模块,而蓝色的部分是训练的时候生成的中间文件,它们联系着训练、测试两个部分。

从左到右看是算法运行的流程,首先用户给出原始的用于训练的中文文本,然后进行分词等操作。

经过了生成矩阵这个步骤,文本就转化成了数学语言了,之后的算法都是运行在这个数学语言之上,之后的算法就不再关心输入的数据是否是文档了,换句话来说,生成矩阵这个模块相当于是一道门,门内是纯数学表示的算法,门外是原始的文本语料。


上一篇:花儿朵朵,4399花儿朵朵,花儿朵朵小游戏,4399小游戏
下一篇:中年妇女盘发发型设计网友热点
扩展阅读
睡前使用发卷 起床拥有大
睡前使用发卷 起床拥有大

经常会有MM抱怨烫发太伤发,但是又很羡慕别人有一头长长的大波浪卷发,电卷棒效果不错但又不是很会用。Step3:在...点击了解…

想要展现出自己的清爽气
想要展现出自己的清爽气

对于男人来说,发型决定颜值,能改变你的命运。选对发型堪比整容,没准第二天就脱单了;而选错发型,可能别人...点击了解…