一、概述

       文本聚类是聚类在文本上的应用,即在不需要标注语料的情况下,在文档层级上,用无监督方法自动找出文档与文档间的关联。

      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。此时算法的停止条件为,当一个簇的二分增幅小于阀值不再对该簇进行划分,即认为不可再分。