当前位置:文档之家› k-means文本聚类

k-means文本聚类

目录1 概念及应用背景 (1)1.1概念 (1)1.2应用背景................................................................................... 错误!未定义书签。

2 系统设计框架..................................................................................... 错误!未定义书签。

2.1总体框架................................................................................... 错误!未定义书签。

2.2文本聚类的具体过程 (1)3应用程序具体实现及说明 (3)3.1获取文档的输入....................................................................... 错误!未定义书签。

3.2提取文档的TF/IDF权重 (3)3.3 k-means进行数据聚类 (4)4 实验结果及分析................................................................................. 错误!未定义书签。

4.1实验结果................................................................................... 错误!未定义书签。

4.2结果分析................................................................................... 错误!未定义书签。

5结论...................................................................................................... 错误!未定义书签。

5.1实验结论................................................................................... 错误!未定义书签。

5.2个人感受................................................................................... 错误!未定义书签。

附录:项目框架和主程序代码............................................................. 错误!未定义书签。

1 概念及应用背景1.1概念文本聚类(Text clustering)是在没有学习的条件下对文本集合进行组织或划分的过程,其主要依据著名的聚类假设:同类的文档相似度较大,而不同类的文档相似度较小。

作为一种无监督的机器学习方法,聚类由于不需要训练过程,以及不需要预先对文档手工标注类别,因此具有一定的灵活性和较高的自动化处理能力,已经成为对文本信息进行有效地组织、摘要和导航的重要手段,为越来越多的研究人员所关注。

1.2文本聚类的具体过程1 文本信息的预处理文本聚类的首要问题是如何将文本内容表示成为数学上可分析处理的形式,即建立文本特征,以一定的特征项(如词条或描述)来代表目标文本信息。

要建立文本信息的文本特征,常用的方法是:对文本信息进行预处理(词性标注、语义标注),构建统计词典,对文本进行词条切分,完成文本信息的分词过程。

对于中文的处理,Lucene中文分词组件je-analysis.jar是个不错的包,其分词方法主要有以下两种:MMAnalyzer analyzer = new MMAnalyzer();//采用正向最大匹配的中文分词算法,相当于分词粒度等于0MMAnalyzer analyzer = new MMAnalyzer(int wordLength);//参数为分词粒度:当字数等于或超过该参数,且能成词时,该词就被切分出来2 文本信息特征的建立文本信息的特征表示模型有多种,常用的有布尔逻辑型、向量空间型、概率型以及混合型等。

其中,向量空间模型(Vector Space Model,VSM) 是近几年来应用较多且效果较好的方法之一。

1969 年,Gerard Salton 提出了向量空间模型VSM ,它是文档表示的一个统计模型。

该模型的主要思想是:将每一文档都映射为由一组规范化正交词条矢量张成的向量空间中的一个点。

对于所有的文档类和未知文档,都可以用此空间中的词条向量(T1 ,W 1 ,T 2 ,W2 ,…, Tn , Wn )来表示( 其中,Ti 为特征向量词条;Wi 为Ti 的权重)。

一般需要构造一个评价函数来表示词条权重,其计算的唯一准则就是要最大限度地区别不同文档。

这种向量空间模型的表示方法最大的优点在于将非结构化和半结构化的文本表示为向量形式,使得各种数学处理成为可能。

3 文本信息特征集的缩减VSM 将文本内容表示成数学上可分析处理的形式,但是存在的一个问题是文档特征向量具有惊人的维数。

因此,在对文本进行聚类处理之前,应对文本信息特征集进行缩减。

通常的方法是针对每个特征词条的权重排序,选取预定数目的最佳特征作为结果的特征子集。

选取的数目以及采用的评价函数都要针对具体问题来分析决定。

4 文本聚类在将文本内容表示成数学上可分析处理的形式后,接下来的工作就是在此数学形式的基础上,对文本进行聚类处理。

文本聚类主要有 2 种方法:基于概率[6] 和基于距离。

基于概率的方法以贝叶斯概率理论为基础,用概率的分布方式描述聚类结果。

基于距离的方法,就是以特征向量表示文档,将文档看成向量空间中的一个点,通过计算点之间的距离进行聚类。

目前,基于距离的文本聚类比较成熟的方法大致可以分为 2 种类型:层次凝聚法和平面划分法。

对于给定的文件集合D={d1, d2,…,di ,…, dn},层次凝聚法具体过程如下:(1) 将D中的每个文件di 看成一个具有单个成员的簇ci ={di}这些簇构成了D的一个聚类C={c1 ,c2 ,…,ci ,…,cn};(2) 计算C中每对簇(ci ,cj)之间的相似度sim{ci ,cj};(3) 选取具有最大相似度的簇对(ci ,cj)将ci和cj合并为一个新的簇ck =sim ci∪cj,从而构成了D的一个新的聚类C =(c1, c2,…,cn-1);(4) 重复上述步骤,直至C中剩下一个簇为止。

该过程构造出一棵生成树,其中包含了簇的层次信息以及所有簇内和簇间的相似度。

对于给定的文件集D={d1 , d2 ,…,di ,…, dn},平面划分法的具体过程如下:(1) 确定要生成簇的数目k;(2) 按照某种原则生成k个聚类中心作为聚类的种子S=(s1,s2,…,si,…,sk);(3) 对D中的每个文件di,依次计算它与各个种子sj的相似度sim (di,sj);(4) 选取具有最大相似度的种子,将di归入以sj为聚类中心的簇cj,从而得到D的一个聚类C={ci ,cj};(5) 重复此步骤若干次,以得到较为稳定的聚类结果。

这2种类型各有优缺点。

层次凝聚法能够生成层次化的嵌套簇,准确度较高。

但在每次合并时,需要全局地比较所有簇之间的相似度,并选出最佳的2个簇,因此执行速度较慢,不适合大量文件的集合。

而平面划分法相对来说速度较快,但是必须事先确定k 的取值,且种子选取的好坏对群集结果有较大影响。

2 k-means聚类方法原理计算两篇文档的相似度,最简单的做法就是用提取文档的TF/IDF权重,然后用余弦定理计算两个多维向量的距离。

能计算两个文本间的距离后,用标准的k-means算法就可以实现文本聚类了。

这里会用到TF/IDF权重,用余弦夹角计算文本相似度,用方差计算两个数据间欧式距离,用k-means进行数据聚类。

其具体实现过程为:图2-1 文本聚类具体实现过程2.1提取文档的TF/IDF权重TF-IDF(term frequency–inverse document frequency)的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

TFIDF实际上是:TF*IDF,TF词频(Term Frequency),IDF反文档频率(Inverse Document Frequency)。

TF表示词条t在文档d中出现的频率。

IDF的主要思想是:如果包含词条t的文档越少,IDF越大,则说明词条t具有很好的类别区分能力。

假如document1和document2的term的TF/IDF分别是t11,t12,t13,...t1n和t21,t22,t23,...,t2n.他们之间的相似性可以用余弦定理来表示。

则:cos(d1,d2) = d1和d2的内积/(d1的长度*d2的长度) = (t11*t21 + t12*t22 + t13*t23 + ... + t1n*t2n)/(|d1|*|d2|);d1 = sqrt(t11*t11 + t12*t12 + t13*t13 + ... + t1n*t1n)。

夹角越大,相似性越大;为1则表示d1和d2一致。

例如一篇文档文件的总词语数是100个,而词语“母牛”出现了3次,那么“母牛”一词在该文件中的词频就是0.03 (3/100)。

一个计算文件频率(DF) 的方法是测定有多少份文件出现过“母牛”一词,然后除以文件集里包含的文件总数。

所以,如果“母牛”一词在1,000份文件出现过,而文件总数是10,000,000份的话,其文件频率就是0.0001 (1000/10,000,000)。

最后,TF-IDF分数就可以由计算词频除以文件频率而得到。

以上面的例子来说,“母牛”一词在该文件集的TF- IDF分数会是300 (0.03/0.0001)。

下面简单介绍下基本的计算步骤:(1) 文档预处理:1)文档分词;2)移除停用词;3)单词正规化处理(2) 分出的单词作为索引项(或单词表),它们代表的就是向量空间的项向量(3) 计算项权值:这包括要计算1)词频;2)倒排文件频率;3)TF-IDF权值(4) 计算文档之间的相似度,用余弦相似度(cosine similarity)一同使用于向量空间模型中,用以判断两份文件之间的相似性。

这里将文档分词从其中提取文档的TF/IDF权重中分离出来,文档分词采用je-analysis-1.5.3.jar中的jeasy.analysis.MMAnalyzer类,该类需依赖于lucene2.4~2.9版本的包,使用方法很简单:MMAnalyzer mm = new MMAnalyzer();String result = mm.segment(str,splitor);// splitor是切词后各词组的分隔符,这里使用" "如文档内容为字符串"奥运拳击入场基本分邹市明夺冠对手浮出水面",则分词后的结果为"奥运拳击入场基本分邹市明夺冠对手浮出水面"。

相关主题