基于Hadoop的文本分类方法及装置制造方法

文档序号:6539163阅读:173来源:国知局
基于Hadoop的文本分类方法及装置制造方法
【专利摘要】本发明涉及基于Hadoop的文本分类方法及装置。该方法包括:将经过分词处理的文本保存至一训练数据集中;使不同类别的文本的数量相等;将训练数据集的文本文件写入SequenceFile文件中;通过MapReduce模块统计文本包含的词条和类别、按照TF-IDF加权模型计算文本的每个词条的TF-IDF值并根据TF-IDF值将文本转换为用于贝叶斯分类器的一维向量、统计每个文本文件的文本的长度并根据长度对一维向量进行加权;得到分类模型;利用分类模型,对待分类的文本进行分类。本发明能解决传统的训练分类器数据不均衡的问题。
【专利说明】基于Hadoop的文本分类方法及装置
【技术领域】
[0001]本发明涉及文本分类技术。
【背景技术】
[0002]朴素贝叶斯分类算法作为一种优秀的分类算法,因为其准确率高,易于理解,容易实现等特点被广泛应用于各种分类任务中,是目前最广泛使用的文本分类方法之一。
[0003]近年来随着信息技术的发展,文档分类任务呈现出新的特点,这些特点主要体现在以下三个方面:一,每天都有海量的新增数据需要进行处理,这些数据通常是TB级以上,同时数据量呈现出快速增长的趋势。二,可用于训练分类器的已有数据往往存在数据不均衡现象,不仅不同类别的训练数据之间存在不均衡现象,而且同一类别的不同文本之间也存在不均衡现象。三,训练数据往往是大量的包含中文文本小文件,这些特点给传统的朴素贝叶斯分类技术带来了挑战。
[0004]传统的朴素贝叶斯分类技术主要存在两方面的问题:一方面传统朴素贝叶斯算法往往基于单机计算,无法在可接受的时间内处理海量数据,无法满足当前海量数据的处理要求。另外一方面,由于传统朴素贝叶斯算法的分类准确率完全依赖于训练数据,当训练数据存在不均衡时,分类效果会大打折扣,无法满足很多应用场景的要求,例如在对医院的病例文本进行分类时,采用历史病历作为训练数据时,罕见病的病历会远少于常见病的病历,如果采用传统朴素贝叶斯分类技术,训练的分类器对罕见病的分类效果会非常差,而对常见病的分类效果较好,这与医生更关心罕见病的分类准确率的需求相违背,使分类系统的实用性大打折扣。此外,大量的小文件直接上传至集群往往速度较慢,无法在可接受的时间内实现上传。
[0005]Hadoop Distributed File System,简称 HDFS,是一个分布式文件系统。HDFS 有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。HDFS放宽了 POSIX的要求这样可以实现流的形式访问(streaming access)文件系统中的数据。HDFS开始是为开源的apache项目nutch的基础结构而创建,HDFS是hadoop项目的一部分,而hadoop又是Iucene的一部分。
[0006]随着企业要处理的数据量越来越大,MapReduce思想越来越受到重视。Hadoop是MapReduce的一个开源实现,由于其良好的扩展性和容错性,已得到越来越广泛的应用。MapReduce是Google提出的一种实现分布式并行计算任务的通用软件框架,它简化了由普通计算机组成的超大集群上的并行软件编程模式,可用于大规模数据集的并行计算。
[0007]SequenceFile是一个由二进制形式key/value的字节流组成的存储文件,SequenceFile可压缩可切分,非常适合hadoop文件存储特性,SequenceFile的写入由SequenceFile.Writer 来实现,根据压缩类型 SequenceFile。

【发明内容】
[0008]本发明的目的在于提出一种基于Hadoop的文本分类方法及装置,其能解决训练分类器数据不均衡的问题。
[0009]为了达到上述目的,本发明所采用的技术方案如下:
[0010]基于Hadoop的文本分类方法,其包括以下步骤:
[0011]步骤1、对训练用的文本进行分词处理,将每一个经过分词处理的文本保存至一训练数据集中对应的一个文本文件中;
[0012]步骤2、对训练数据集的文本文件的文本进行采样,以使不同类别的文本的数量相等;
[0013]步骤3、将训练数据集的文本文件写入SequenceFile文件中,并将SequenceFile文件上传至Hadoop文件系统;
[0014]步骤4、通过MapReduce模块统计SequenceFile文件的文本文件的文本包含的词条和类别,其中,所述词条和类别分别对应贝叶斯分类器的属性值和类别标签;
[0015]步骤5、通过MapReduce模块按照TF-1DF加权模型计算SequenceFile文件的每个文本文件的文本的每个词条的TF-1DF值,根据所述TF-1DF值将文本转换为用于贝叶斯分类器的一维向量;
[0016]步骤6、通过MapReduce模块统计每个文本文件的文本的长度,根据所述长度对一维向量进行加权,以使所有文本的权重相等;
[0017]步骤7、利用一维向量,根据贝叶斯分类器,统计每个类别的先验概率和每个词条属于每个类别的先验概率,得到分类模型;
[0018]步骤8、利用分类模型,对待分类的文本进行分类。
[0019]本发明还提出了一种基于Hadoop的文本分类装置,其包括以下模块:
[0020]分词模块,用于对训练用的文本进行分词处理,将每一个经过分词处理的文本保存至一训练数据集中对应的一个文本文件中;
[0021]采样模块,用于对训练数据集的文本文件的文本进行采样,以使不同类别的文本的数量相等;
[0022]上传模块,用于将训练数据集的文本文件写入SequenceFiIe文件中,并将SequenceFile文件上传至Hadoop文件系统;
[0023]统计模块,用于通过MapReduce模块统计SequenceFile文件的文本文件的文本包含的词条和类别,其中,所述词条和类别分别对应贝叶斯分类器的属性值和类别标签;
[0024]第一加权模块,用于通过MapReduce模块按照TF-1DF加权模型计算SequenceFile文件的每个文本文件的文本的每个词条的TF-1DF值,根据所述TF-1DF值将文本转换为用于贝叶斯分类器的一维向量;
[0025]第二加权模块,用于通过MapReduce模块统计每个文本文件的文本的长度,根据所述长度对一维向量进行加权,以使所有文本的权重相等;
[0026]模型建立模块,用于利用一维向量,根据贝叶斯分类器,统计每个类别的先验概率和每个词条属于每个类别的先验概率,得到分类模型;
[0027]分类模块,用于利用分类模型,对待分类的文本进行分类。
[0028]本发明通过采用hadoop集群并对传统朴素贝叶斯分类方法进行改进,具有如下有益效果:[0029](I)通过将小文件写入sequencefile格式的压缩文件,将sequencefile作为小文件的容器,然后上传sequencefile至集群文件系统HDFS,提升数据集上传速度,充分利用sequencefile提供java接口,可多文件,可分割,且无需解压即可作为MapReduce的输入数据的特点,有效克服Hadoop集群不适合处理小文件的缺点。
[0030](2)通过对训练数据进行加权,克服了因为不同文本长度不同带来的不均衡问题,提高了分类准确率。
[0031](3)通过MapReduce并行计算框架对分类模型进行训练,提高了训练效率,适应了新形势下海量数据的处理要求。
[0032](4)通过对训练的文本进行采样处理,克服了训练的文本不同类别训练数据分布不均衡的问题,提高了分类准确率。
【专利附图】

【附图说明】
[0033]图1为本发明较佳实施例的基于Hadoop的文本分类方法的流程图。
【具体实施方式】
[0034]下面,结合附图以及【具体实施方式】,对本发明做进一步描述。
[0035]结合图1所示,一种基于Hadoop的文本分类方法,其包括以下步骤:
[0036]步骤S1、对训练用的文本进行分词处理,将每一个经过分词处理的文本保存至一训练数据集中对应的一个文本文件中。可使用IK、ICTCLAS等开源分词包,对训练用的文本进行自动的中文分词,将标点及停止词去除,这里的停止词是指出现频率很高但是没有实际意义的词,如“与”、“的”、“得”等。并将分词后得到的词条用空格分隔输出到本地的训练数据集中,例如“阐释机器学习概念”这句话经分词后将变成“阐释”、“机器学习”、“概念”三个词条,训练数据集中每一个文本文件存储一条经过分词的文本。
[0037]步骤S2、对训练数据集的文本文件的文本进行采样,以使不同类别的文本的数量相等。由于不同类别的文本数量不一致,所以需要通过采样进行平衡。采样前,首先需要根据实际数据的分布情况设定阈值(即每个类别经过采样后最终包含的文本数量,阈值的选取可以根据实际效果进行调整),然后,根据阈值可以将文本数量大于阈值的类别划分为多数类,将文本数量小于阈值的类别设为少数类,最后,对于多数类的文本,将随机从中抽取等于阈值的η份文本作为训练数据,而对于少数类的文本,则将重复已有文本,使其包含的文本数量等于阈值。
[0038]步骤S3、将训练数据集的文本文件写入SequenceFile文件中,并将SequenceFile文件上传至Hadoop文件系统。首先,提供Hadoop文件系统HDFS的本地文件系统接口(getLocalFileSystem)读取本地文件系统的训练数据集中的文本文件,然后将文件路径和内容以键值对的形式写入SequenceFile中,并提供将SequenceFile的输出路径设为集群文件系统HDFS中的地址,实现文件流式压缩上传,其中每个文件以键值对的形式读取,将该文件在训练数据集内的相对路径(包含文件名)作为键,而该文件的内容作为值,与本领域常用的压缩上传方法相比,充分利用了 SequenceFile可分割,支持java接口,可多文件,可被MapReduce直接读取的特点,无需在集群文件系统中对压缩文件进行解压,无需生成大量元数据。[0039]步骤S4、通过MapReduce模块统计SequenceFile文件的文本文件的文本包含的词条和类别,其中,所述词条和类别分别对应贝叶斯分类器的属性值(attribute)和类别标签(label)。MapReduce模块统计有哪些不同的类别时,由于原始数据在创建训练数据集时即按照所属类别将不同类别的文本文件存入不同的文件夹下,文件夹名即为文本所属类另IJ,所以在这里只需将SequenceFile中存储文件路径的键取出,并将路径前缀去除,即可得到类别名称(即文件夹名字);MapReduce模块还用于统计有哪些不同的词条,这里的属性值是指经过分词后的词条,如果已经建立了专业词典,则可以根据专业词典对这些词条进行过滤。
[0040]步骤S5、通过MapReduce模块按照TF-1DF加权模型计算SequenceFile文件的每个文本文件的文本的每个词条的TF-1DF值,根据所述TF-1DF值将文本转换为用于贝叶斯分类器的一维向量。其中,TF-1DF值的计算包括两个步骤:首先,计算每个词的“词频”(TF)和“逆文档频率”(IDF),然后,通过将TF值与IDF值相乘得到TF-1DF值,一个词的TF-1DF值越大则代表该词的重要性越大,反之则代表该词的重要性越小。
[0041]TF计算公式如下:
[0042]词频(TF)=某个词在当前文本出现的次数
[0043]IDF计算公式如下:
[0044]逆文档频率(IDF) =1g(数据集的文档总数/ (包含该词的文档数+1))
[0045]其中,第一次MapReduce用于计算训练数据集的文本总数;
[0046]第二次MapReduce用于计算包含每个词条的文本数从而得到IDF值。
[0047]第三次MapReduce用于计算每个文档中每个词的TF值,并将TF值与该词条的IDF值相乘得到TF-1DF值,将文本转换为一维向量。
`[0048]通过计算文本中每个词条的TF-1DF值后,即可将文本转换为各个词条的TF-1DF值组成的一维向量,例如在一个训练数据集中一个文本“中国蜜蜂养殖”经过分词后变成“中国蜜蜂养殖”,然后计算TF-1DF值如下表所示:
[0049]
包含该词的文IDFTF-1DF
档数(亿)
中国62.30.6030.0121
蜜蜂0.4842.7130.0543
养殖0.9732.4100.0482
[0050]然后就可以将文本“中国蜜蜂养殖”转换为一维向量(0.0121, 0.0543, 0.0482)。
[0051]步骤S6、通过MapReduce模块统计每个文本文件的文本的长度(包含词条的数量),根据所述长度对一维向量进行加权,增加长度较短的文本的权重,使其与长度较长文本的权重一致,即使所有文本的权重相等。
[0052]具体计算公式如下:[0053]某个词加权后的值=某个词TF-1DF值/该文本的长度。
[0054]步骤S7、利用一维向量,根据贝叶斯分类器,统计每个类别的先验概率和每个词条属于每个类别的先验概率,得到分类模型。之所以需要计算先验概率是因为我们可以通过贝叶斯定理以这些先验概率为基础预测未知数据属于每个类别的条件概率。
[0055]贝叶斯定理简单来说就是当我们知道P (AI B)的概率时获得P (B IA)的概率的一种方法,贝叶斯公式如下:
【权利要求】
1.基于Hadoop的文本分类方法,其特征在于,包括以下步骤: 步骤1、对训练用的文本进行分词处理,将每一个经过分词处理的文本保存至一训练数据集中对应的一个文本文件中; 步骤2、对训练数据集的文本文件的文本进行采样,以使不同类别的文本的数量相等;步骤3、将训练数据集的文本文件写入SequenceFile文件中,并将SequenceFile文件上传至Hadoop文件系统; 步骤4、通过MapReduce模块统计SequenceFile文件的文本文件的文本包含的词条和类别,其中,所述词条和类别分别对应贝叶斯分类器的属性值和类别标签; 步骤5、通过MapReduce模块按照TF-1DF加权模型计算SequenceFile文件的每个文本文件的文本的每个词条的TF-1DF值,根据所述TF-1DF值将文本转换为用于贝叶斯分类器的一维向量; 步骤6、通过MapReduce模块统计每个文本文件的文本的长度,根据所述长度对一维向量进行加权,以使所有文本的权重相等; 步骤7、利用一维向量,根据贝叶斯分类器,统计每个类别的先验概率和每个词条属于每个类别的先验概率,得到分类模型; 步骤8、利用分类模型,对待分类的文本进行分类。
2.基于Hadoop的文本分类装置,其特征在于,包括以下模块: 分词模块,用于对训练用的文本进行分词处理,将每一个经过分词处理的文本保存至一训练数据集中对应的一个文本文件中; 采样模块,用于对训练数据集的文本文件的文本进行采样,以使不同类别的文本的数量相等; 上传模块,用于将训练数据集的文本文件写入SequenceFile文件中,并将SequenceFile文件上传至Hadoop文件系统; 统计模块,用于通过MapReduce模块统计SequenceFile文件的文本文件的文本包含的词条和类别,其中,所述词条和类别分别对应贝叶斯分类器的属性值和类别标签; 第一加权模块,用于通过MapReduce模块按照TF-1DF加权模型计算SequenceFile文件的每个文本文件的文本的每个词条的TF-1DF值,根据所述TF-1DF值将文本转换为用于贝叶斯分类器的一维向量; 第二加权模块,用于通过MapReduce模块统计每个文本文件的文本的长度,根据所述长度对一维向量进行加权,以使所有文本的权重相等; 模型建立模块,用于利用一维向量,根据贝叶斯分类器,统计每个类别的先验概率和每个词条属于每个类别的先验概率,得到分类模型; 分类模块,用于利用分类模型,对待分类的文本进行分类。
【文档编号】G06F17/30GK103810293SQ201410073364
【公开日】2014年5月21日 申请日期:2014年2月28日 优先权日:2014年2月28日
【发明者】万睿, 张国强, 谢浩安 申请人:广州云宏信息科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1