一、概述
文本聚类是聚类在文本上的应用,即在不需要标注语料的情况下,在文档层级上,用无监督方法自动找出文档与文档间的关联。
1.1 聚类
它是指将给定对象的集合划分为不同子集的过程,目标是使得每个子集内部的元素尽量相似,不同子集间的元素尽量不相似。这些子集又被称为簇,一般没有交集。
根据元素从属于集合的确定程度,分为硬聚类和软聚类。
硬聚类:每个元素被确定地归入一个簇,从属关系是离散的,比较强硬。
软聚类:每个元素与每个簇都存在一定的从属程度,只不过该程度有大有小,从属关系是用一个连续值来衡量,比较灵活。
根据聚类结果的结构,聚类算法可以分为划分式和层次化两种。
划分式:结果是一系列不相交的子集。
层次化:结果是一棵树,叶子节点是元素,父节点是簇。
1.2 聚类的应用
聚类通常用于数据的预处理,或归档相似的数据。在数据量比较大、标注成本比较高的时候,可以使用聚类。
1.3 文本聚类
文本聚类是指对文档进行的聚类分析,被广泛用于文本挖掘和信息检索领域,后来挖掘出了新用途,如改善搜索结果、生成同义词等。
基本流程就是:特征提取与向量聚类两步。
二、文档的特征提取
文档是一系列单词的有序不定长列表,这些单词的种类无穷大,且可能反复出现。单词本身已然千变万化,它们的不定长组合更加无穷无尽,从细节上尽善尽美地表示一篇文档不现实,我们必须采用一些有损模型。
2.1 词袋模型
词袋是信息检索与自然语言处理中最常用的文档表示模型,将文档想象为一个装有词语的袋子,通过袋子中每个词语的计数等统计量将文档表示为向量。
2.2 词袋中的统计指标
词袋模型的统计指标可以选取词频、布尔词频(词频非零为1,否则为0)、TF-IDF、词向量等
三、K均值算法
将文本转换成向量,相当于一系列的数据点,我们将通过一些聚类算法将数据点聚焦成不同的簇。K均值算法不能保证一定能够得到最优聚类结果,但实践结果非常好。
3.1 基本原理
(1)选取k个点作为k个簇的初始质心;
(2)将所有的点分别分配给最近的质心所在的簇;
(3)重新计算每个簇的质心;
(4)不断重复(2)、(3)直到质心不再发生变化;
3.2 初始质心的选取
由于k均值不能保证收敛到全局最优,所以初始质心的选取对k均值的运行结果影响非常大,如果选取不当,则可能收敛到一个较差的局部最优点。
朴素实现经常用随机选取的方式确定初始质心,但是需要用户多运行几次,得出最佳结果。但是数据量很大时,往往不够经济。
高效的实现方法:将质心的选取视作准则函数进行迭代式优化的过程,具体做法是先随机选择第一个数据点作为质心,视作只有一个簇计算准则函数,同时维护每个点到最近质心的距离的平方,作为一个映射数组M;然后随机取准则函数数值的一部分记作 p。遍历剩下所有的数据点,若该点到最近质心的距离小于p,则选取该点添加到质心列表,同时更新准则函数与M。循环多次,直至凑足k个初始质心。该方法每次新增一个质心,都保证了准则函数的值下降一个随机比率;而朴素实现相当于每次新增的质心是完全随机的,准则函数的增减无法控制。
3.3 更快的准则函数
一种基于余弦距离的准则函数,基于新准则函数,k均值算法流程如下:
(1)选取k个点作为k个簇的初始质心;
(2)将所有的点分别分配给最近的质心所在的簇;
(3)对每个点,计算将其移入另一个簇时余弦函数的增大量,找到最大增大量,完成移动;
(4)重复步骤3直到达到最大迭代次数,或簇的划分不再变化。
四、 重复二分聚类算法
4.1 基本原理
重复二分聚类是k均值算法的效率加强版,它是反复对子集进行二分。该算法的步骤如下:
(1)挑选一个簇进行划分;
(2)利用k均值算法将该簇划分为两个子集;
(3)重复(1)、(2),直到产生足够数量的簇;
4.2 自动判断聚类个数K
通过给准则函数的增幅设定阀值来自动判断k。此时算法的停止条件为,当一个簇的二分增幅小于阀值不再对该簇进行划分,即认为不可再分。