一种层次聚类方法及装置
技术领域
本发明涉及自然语言处理技术领域,具体涉及一种层次聚类方法及装置。
背景技术
聚类是研究分类问题的一种统计分析方法,是用于数据挖掘的一类重要的算法。它以相似性为基础,将数据分类到不同的类簇中,同一个类簇中的数据有很大的相似性,而不同类簇间的数据有很大的相异性。常用的聚类算法包括:层次法、划分法、基于密度的方法、基于网格的方法、基于模型的方法等。
层次法(Hierarchical Clustering)主要对数据集采用某种方法逐层地进行分解或者汇聚,直到分出的最后一层的所有的类别数据满足要求为止。按照分解或者汇聚的原理的不同,层次聚类可以分为凝聚(agglomerative)和***(divisive)两种方法。凝聚的层次聚类是一种自底向上的策略,首先将每个数据作为一个原子簇,然后将这些原子簇合并成越来越大的类簇,直到所有的数据都在一个类簇中,或者达到某个终止条件。***的层次聚类与凝聚的层次聚类相反,采用自顶向下的策略,它首先将所有数据置于同一个类簇中,然后逐渐细分为越来越小的类簇,直到每个文本自成一类簇,或者达到了某个终止条件。
现有的层次聚类方法,都需要在文本层面上计算两个文本的距离,将与预设的距离阈值进行比较,来决定是否合并,或者是否继续***。在凝聚的层次聚类方法中,当两个类簇的簇心的距离达到预设的距离阈值时,将两个类簇中所有的文本都合并到一个类簇中。在***的层次聚类方法中,当一个类簇中的最大样本距离小于预设的距离阈值时,则停止***。这里的距离阈值是一个表示两个文本之间的距离的数值,其设置的过大或者过小,都会导致层次聚类的精确度较差。因此,要设置一个合适的阈值存在较大的困难。
发明内容
为解决上述技术问题,本申请提供一种新的层次聚类方法,以避免设置难以控制的距离阈值,从而避免了距离阈值设置不恰当而导致的聚类精确度较差的问题,同时该方法的聚类精确度较高。
第一方面,本申请提供一种层次聚类方法,包括以下步骤:
确定第一文本集;
确定至少一个第一索引词,所述第一索引词包含于第一文本集中的至少一个文本中;
分别建立与每一个第一索引词对应的第一索引文档集合,所述第一索引文档集合为包含对应的第一索引词的文本的集合;
如果与当前第一文本集交集最大的第一索引文档集合中的文本数量大于或等于预设的第一阈值,则将与当前第一文本集交集最大的第一索引文档集合中的所有文本划分为第k个类簇,删除当前第一文本集中已经划分到第k个类簇中的文本,其中,k=1,2,3……。
结合第一方面,在第一方面第一种可能的实现方式中,该方法还包括:
如果当前第一文本集不为空,并且与当前第一文本集交集最大的第一索引文档集合中的文本数量小于预设的第一阈值,则将当前第一文本集中所有文本划分为第k+1个类簇。
结合第一方面及上述第一种实现方式,在第一方面的第二种可能的实现方式中,还包括:
确定至少一个第二索引词,所述第二索引词包含于待细分类簇中的至少一个文本中;所述待细分类簇为已划分出的类簇中的任一个;
分别建立与每一个第二索引词对应的第二索引文档集合,所述第二索引文档集合为包含对应的第二索引词的文本的集合;
如果与当前待细分类簇交集最大的第二索引文档集合中的文本数量大于或等于预设的第二阈值,则将与当前待细分类簇交集最大的第二索引文档集合中的所有文本划分为第j子类簇,删除当前待细分类簇中已经划分到第j子类簇中的文本,其中,j=1,2,3……,所述第二阈值小于或等于所述第一阈值;
如果当前待细分类簇不为空,并且与当前待细分类簇交集最大的第二索引文档集合中的文本数量小于预设的第二阈值,则将当前待细分类簇中所有文本划分为第j+1子类簇。
结合第一方面及上述第一种至第二种实现方式,在第一方面的第三种可能的实现方式中,确定至少一个第一索引词的步骤,包括:
将第一文本集中所有文本进行分词,得到分词结果;
从所述分词结果中筛选出至少一个第一索引词;
分别建立与每一个索引词对应的第一索引文档集合的步骤,包括:
针对第一文本集中的每一个文本,建立与文本的分词结果中每一个分词的映射关系;
根据筛选出的至少一个第一索引词以及所述映射关系,建立与每一个第一索引词对应的第一索引文档集合。
结合第一方面及上述第一种至第三种实现方式,在第一方面的第四种可能的实现方式中,确定第一文本集的步骤,包括:
将原始文本集中的文本聚类为至少两个粗分类簇;
从所有粗分类簇中选取一个粗分类簇,确定为第一文本集。
结合第一方面的第四种实现方式,在第一方面的第五种可能的实现方式中,将原始文本集中的文本聚类为至少两个粗分类簇的步骤,包括:
从原始文本集中选取一个文本作为第一粗分类簇的簇心,从原始文本集中删除的第一粗分类簇的簇心;
计算原始文本集中剩余文本之中的一个文本与已经划分出的粗分类簇的簇心之间的距离;
如果所述文本与一个粗分类簇的簇心之间的距离小于预设的第五阈值,则将所述文本划分到所述粗分类簇中,删除原始文本集中已经划分到粗分类簇中的文本;
如果所述文本与所有已经划分出的粗分类簇的簇心之间的距离都不小于预设的第五阈值,则将所述文本确定为第i粗分类簇的簇心,其中,i=2,3,……。
结合第一方面及上述第一种至第五种实现方式,在第一方面的第六种可能的实现方式中,还包括:
采用singlepass聚类法对待精分类簇进行聚类,所述待精分类簇为文本平均距离大于预设的第三阈值的类簇或子类簇中的任一个。
结合第一方面的第六种实现方式,在第一方面第七种可能的实现方式中,采用singlepass聚类法对待精分类簇进行聚类的步骤,包括:
从待精分类簇中读取一个文本;
如果所述文本到已经划分出的其中一个精分类簇中任意一个文本的距离不超过预设的第四阈值,则将所述文本划分到所述精分类簇中;
如果所述文本到已经划分出的所有精分类簇中全部文本的距离均超过第四阈值,则将所述文本确定为一个新的精分类簇的簇心。
结合第一方面的第七种实现方式,在第一方面第八种可能的实现方式中,一个文本到一个精分类簇中的其中一个文本的距离的计算方法包括:
将一个文本进行分词,得到第一分词结果;
利用第一分词结果中每一个分词的词向量计算所述文本的向量表示;
将一个精分类簇中的文本进行分词,得到第二分词结果;
利用第二分词结果中每一个分词的词向量计算所述精分类簇中的文本的向量表示;
根据余弦定理,利用所述文本的向量表示以及所述精分类簇中的文本的向量表示,计算得到所述文本与所述精分类簇中的文本的距离。
第二方面,本申请提供一种层次聚类装置,包括:
第一处理单元,用于确定第一文本集;确定至少一个第一索引词;分别建立与每一个第一索引词对应的第一索引文档集合;在与当前第一文本集交集最大的第一索引文档集合中的文本数量大于或等于预设的第一阈值的情况下,将与当前第一文本集交集最大的第一索引文档集合中的所有文本划分为第k个类簇,删除当前第一文本集中已经划分到第k个类簇中的文本;其中,所述第一索引词包含于第一文本集中的至少一个文本中,所述第一索引文档集合为包含对应的第一索引词的文本的集合,k=1,2,3……。
上述技术方案中的层次聚类方法及装置,首次结合了倒排索引和最小集合覆盖的思想,首先确定将要聚类的对象,即第一文本集;确定至少一个第一索引词,这里的第一索引词包含于第一文本集中的至少一个文本中;然后分别建立与每一个第一索引词对应的第一索引文档集合;如果与当前第一文本集交集最大的第一索引文档集合中的文本数量大于或等于预设的第一阈值,则将与当前第一文本集交集最大的第一索引文档集合中的所有文本划分为第k个类簇,删除当前第一文本集中已经划分到第k个类簇中的文本,其中,k=1,2,3……。通过这样的方式,如果第一文本集中全部文本都已经被划分好类簇,则聚类完成。如果当前第一文本集不为空,并且与当前第一文本集交集最大的第一索引文档集合中的文本数量小于预设的第一阈值,则将当前第一文本集中所有文本划分为第k+1个类簇,从而将第一文本集中全部文本划分好类簇。
在上述的层次聚类方法中,第一阈值是对文本数量的限定,而不是表示文本与文本距离的阈值。用户仅需要设置第一阈值即可,简单直接,无需通过计算两个文本之间的距离来确定是否需要划分类簇,避免设置难以控制的距离阈值,从而避免了当待聚类的文本发生变化时,由于距离阈值设置不恰当而导致的聚类精确度较差的问题。同时,该层次聚类方法的精确度较高。
附图说明
为了更清楚地说明本申请的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请的层次聚类方法的具体实施方式之一的流程图;
图2为本申请的层次聚类方法中,细分聚类具体实施方式之一的流程图;
图3为本申请的层次聚类方法中,粗聚类的具体实施方式之一的流程图;
图4为本申请的层次聚类方法中,精细聚类的具体实施方式之一的流程图;
图5为本申请的层次聚类装置的结构示意图。
具体实施方式
现有的层次聚类方法,无论是凝聚的层次聚类方法,还是***的层次聚类方法,都必须要预设一个表示两个文本之间距离的距离阈值。这里的表示文本之间距离的阈值也可以通过文本之间的相似度来表示,两个文本之间的距离越大,表示两个文本的相似度越低;距离越小,表示两个文本的相似度越高。这个距离可以采用向量来表示。距离阈值的预设值直接影响着层次聚类方法的聚类精确度,但是距离阈值的设置较难控制。这是因为,一旦要聚类的文本发生变化,该阈值就需要改变,否则就会影响聚类效果。对于使用该层次聚类方法的人而言,要设置一个合适的阈值以使每次层次聚类的精确度保持较高的水平,存在较大的困难。
为此,本申请提供一种新的层次聚类方法,该聚类方法属于***的层次聚类方法,首次结合了倒排索引和最小集合覆盖的思想,避免了在层次聚类的时候计算两个文本的距离,从而也避免了必须要预设表示两个文本之间距离的距离阈值的情况,并且本申请的层次聚类方法的聚类精确度较高,尤其适用于短文本聚类。
具体来说,请参考图1,在本申请的第一个实施例中,提供一种层次聚类方法,包括以下S100-S400的步骤。
S100:确定第一文本集。
在S100的步骤中,第一文本集为一个集合,其中包含了至少一个文本。一般来说,由于聚类都是对于多个数据进行聚类,因此,第一文本集中所包含的文本可以是几十个、几百个、几千个甚至更多,本申请对于第一文本集中所包含的文本的具体数量不作限定。
另外,第一文本集中所包含的文本可以是文本的本身,也可以是文本的编号等,以用于区分不同的文本,本申请对此不做限定。当第一文本集中所包含的是文本的编号等时,通过文本的编号等,可以获取到文本的全文,以便对文本进行处理和聚类。除第一文本集之外,本申请中的其他文本集以及类簇,其中所包含的都可以是文本本身,也可以是文本的编号等,后续不再赘述。
例如,第一文本集U1为[1,2,3,4,5,6,7,8,9]。
其中,1、2等是文本的编号,其具体的内容可以如下所示:
1.黑龙江肇源客车起火事故初步认定为车体自燃。
2.黑龙江肇源客车起火事故伤者仍在抢救之中。
3.黑龙江肇源客车燃烧事故亲历者回忆事发经过。
4.黑龙江肇源客车燃烧续:9人喝喜酒返回时遇难。
5.黑龙江新兴煤矿***事故善后工作全面展开。
6.黑龙江新兴煤矿***事故已确认106人遇难。
7.黑龙江新兴煤矿***事故139人被困井下。
8.呼和浩特肇源第二监狱原监狱长涉嫌***被捕。
9.呼和浩特新兴成功处置天然气泄漏事件。
S200:确定至少一个第一索引词。
在S200的步骤中,第一索引词包含于第一文本集中的至少一个文本中。也就是说,在第一文本集中的一个文本或多个文本中可以包含一个相同的第一索引词。同时,一个文本中也可以包含多个不同的第一索引词。
例如,对于S100步骤中的第一文本集U1来说,文本1至文本7这7个文本中都包含了“黑龙江”这个第一索引词;文本1至文本4这4个文本中都包含了“肇源”这个第一索引词。
第一索引词可以是由用户根据聚类需求直接预设的,也可以通过其他方式来确定。例如,在一种实现方式中,确定至少一个第一索引词的步骤可以包括:
S201:将第一文本集中所有文本进行分词,得到分词结果;
S202:从所述分词结果中筛选出至少一个第一索引词。
在S201的步骤中,对第一文本集中的所有文本进行分词,然后得到分词结果,此处的分词可以采用现有的分词方法,此处不再赘述。
在分词之后,还可以对分词结果进行清洗,以过滤掉停用词或者某些根据用户的需求而预设的词。例如,对于某些文本而言,其分词结果中包含了“的”、“了”等停用词,则可以将这些词从分词结果中清洗掉。还例如,对于一个第一文本集而言,其中所有或几乎所有文本都包含了“尽快”这个词,该词对于文本聚类没有太大的帮助,则可以将其作为预设的词而从分词结果中直接清洗掉,以便在后续的步骤中无需考虑是否要将该词作为第一索引词来建立与之对应的第一索引文档集合。
在S202的步骤中,可以从分词结果中筛选出部分词作为第一索引词,也可以直接将分词结果中的所有分词都作为第一索引词。当分词的步骤之后还包括清洗的步骤时,则可以从清洗后的分词结果中筛选出部分词或者全部分词作为第一索引词。
例如,将文本1进行分词,得到分词结果1为:黑龙江/肇源/客车/起火/事故/初步/认定/为/车体/自燃。对其他文本进行分词得到的分词结果与此形式类似。然后可以从所有的分词结果中筛选出第一索引词“黑龙江”、“肇源”、“呼和浩特”、“新兴”等。
此外,在确定第一索引词的过程中,也可以根据不同的需求而仅对第一文本集的部分文本进行分词,然后从分词结果中筛选出至少一个第一索引词。
S300:分别建立与每一个第一索引词对应的第一索引文档集合。
在S300的步骤中,所述第一索引文档集合为包含对应的第一索引词的文本的集合。也就是说,对于一个第一索引词而言,其对应一个第一索引文档集合,这个第一索引文档集合中包括了至少一个文本,并且,每一个文本都包含了该第一索引词。
例如,对于前述S200步骤的例子中筛选出的第一索引词,可以建立如表1所示的第一索引文档集合。
表1
在表1中,第一索引词“黑龙江”所对应的第一索引文档集合为K1,其中包括了文本1至文本7共7个文本。其他第一索引词所对应的第一索引文档集合的含义与此类似。另外,后续的表2中的第二索引词所对应的第二索引文档集合的含义也与此类似。
在一种实现方式中,S300的步骤可以包括:
S301:针对第一文本集中的每一个文本,建立与文本的分词结果中每一个分词的映射关系;
S302:根据筛选出的至少一个第一索引词以及所述映射关系,建立与每一个第一索引词对应的第一索引文档集合。
在S301的步骤中,对于第一文本集中的一个文本,其对应一个分词结果。对于该分词结果的每一个分词,都建立该分词与该文本的映射关系。例如,文本1的分词结果1为:黑龙江/肇源/客车/起火/事故/初步/认定/为/车体/自燃,建立文本1与每一个分词的映射关系如下:文本1[1,黑龙江,(1);1,肇源,(4);1,客车,(6);1,起火,(8);……;1,自然,(19)]。其中,不同的分词用分号分隔。以下以“1,肇源,(4)”为例来说明上述的映射关系中的含义,“肇源”为一个分词,“1”表示在文本1中“肇源”一次出现的次数为1次,再后面的“(4)”表示“肇源”在文本1中的位置,即“肇”字在文本1中为第4个字符。对于本实施例中的方案而言,此处的映射关系也可以只包括分词,而无需体现各个分词在文本中的出现次数以及相应的位置,例如文本1与每一个分词的映射关系如下:[黑龙江;肇源;客车;起火;……;自燃]。
在S302的步骤中,对于已经筛选出的第一索引词而言,由于其是从分词结果中筛选出来,这些第一索引词在上述映射关系中必然可以查询到匹配的分词。以一个第一索引词为基准,从所有的映射关系中查找与该第一索引词匹配的分词,从而可以确定包含该分词的所有文本,这些文本的集合,即为与该第一索引词对应的第一索引文档集合。例如,以“黑龙江”为例,映射关系中能够匹配到的分词为“黑龙江”,从而可以确定包含该分词的文本有文本1至文本7,故而与第一索引词“黑龙江”对应的第一索引文档集合为K1。
需要说明的是,由于S202的步骤中,已经筛选出至少一个第一索引词,因此在S300的步骤中,在建立映射关系的时候,针对每一个文本,也可以不对分词结果中的每一个分词建立其与文本的映射关系,而是对与第一索引词匹配的分词建立映射关系即可,然后将文本与第一索引词的映射关系转置,得到每一个第一索引词对应的文本,这些文本的集合即为第一索引文档集合。
S400:如果与当前第一文本集交集最大的第一索引文档集合中的文本数量大于或等于预设的第一阈值,则将与当前第一文本集交集最大的第一索引文档集合中的所有文本划分为第k个类簇,删除当前第一文本集中已经划分到第k个类簇中的文本,其中,k=1,2,3……。
为便于引述,以下将“与当前第一文本集交集最大的第一索引文档集合”称为“第一最大交集”。在S400的步骤中,第一阈值是第一最大交集中所包含的文本数量的下限值,可以预设为大于零的任一个值,具体的取值可以由用户根据应用场景、待分类文本的内容或者经验来设置。如果第一最大交集中所包含的文本数量≥第一阈值,则可以将该第一最大交集中包含的文本都划分为一个类簇。
以下将描述S400步骤的具体执行过程。
首先,分别确定每一个第一索引词对应的第一索引文档集合与第一文本集的交集,从中确定交集最大的一个第一索引文档集合,即第一最大交集。如果第一最大交集中的文本数量≥第一阈值,那么就将该第一最大交集中的所有文本都划分为一个类簇,在此称之为第1个类簇。从第一文本集中将这些已经划分到第1个类簇中的文本删除,以避免重复聚类。此时,第一文本集中包含的文本已经减少了一部分。
然后,如果当前第一文本集不为空,则分别确定各个第一索引词对应的第一索引文档集合与当前第一文本集的交集,从中确定新的第一最大交集。如果这个新的第一最大交集中的文本数量≥第一阈值,那么就将其中的所有文本都划分为一个类簇,在此称之为第2个类簇。从当前第一文本集中将这些已经划分到第2个类簇中的文本删除。此时,当前第一文本集中包含的文本又减少了一部分。
需要说明的是,在确定新的第一最大交集的过程中,此前的步骤中曾被确定为交集最大的第一索引文档集合,在后续的步骤中可以不参与计算。这是因为,对于当前第一文本集而言,此前与之交集最大的第一索引文档集合中的文本已经被划分为一个类簇,并且这些文本已经不包含在当前第一文本集中,故而其与当前第一文本集的交集必然为空。
如此重复,将第k次划分出的类簇称为第k个类簇,故而,k可以取1,2,3……等正整数。k每增加1,表示重复一次上述的确定第一最大交集、划分类簇以及删除的步骤,直到当前第一文本集为空,或者确定出的新的第一最大交集中的文本数量<第一阈值。
也就是说,如果当前第一文本集为空,表示针对第一文本集的聚类步骤已经完成,可以结束针对第一文本集的聚类步骤。或者,
S500:如果与当前第一文本集交集最大的第一索引文档集合中的文本数量小于预设的第一阈值,且当前第一文本集不为空,则将当前第一文本集中所有文本划分为第k+1个类簇。至此,结束针对第一文本集的聚类步骤。
沿用前述的第一文本集U1和表1的例子,预设第一阈值为2。
首先,分别确定表1中的K1至K4共四个第一索引文档集合与U1的交集,结果K1与U1的交集最大,即第一最大交集为K1。由于K1中的文本数量为7,大于第一阈值,故而将K1中所有文本划分为第1个类簇U2,删除U1中已经划分到U2中的文本,此时,U1包含的元素已经发生了变化,变更为[8,9]。
然后,分别确定表1中的K2至K4共三个第一索引文档集合与当前U1的交集,结果K2与当前U1的交集最大,即新的第一最大交集为K2。由于K2中的文本数量为2,等于第一阈值,故而将K2中所有文本划分为第二个类簇U3,删除当前U1中已经划分到U3中的文本。此时,U1变更为[],即当前第一文本集为空,此时表示原始的第一文本集中所有的9个文本都已经聚类完毕。
在上述技术方案中,第一阈值是对文本数量的限定,而不是表示文本与文本距离的阈值。用户仅需要设置第一阈值即可,简单直接,无需通过计算两个文本之间的距离来确定是否需要划分类簇,避免设置难以控制的距离阈值,从而避免了当待聚类的文本发生变化时,由于距离阈值设置不恰当而导致的聚类精确度较差的问题。
对于已经划分出的类簇,如果其聚类效果仍然不够好,存在聚类粒度较粗等问题,则可以继续采用前述的倒排索引结合最小集合覆盖的思想的处理方法,来对部分或者全部类簇进行进一步细分聚类。具体来说,请参考图2,上述的层次聚类方法还可以包括以下S710至S740的步骤。
S710:确定至少一个第二索引词。
待细分类簇为已划分出的类簇中的任一个,将待细分类簇作为接下来的处理对象。上述的第二索引词包含于待细分类簇中的至少一个文本中,也就是说,在待细分类簇中的一个文本或多个文本中可以包含一个相同的第二索引词。同时,一个文本中也可以包含多个不同的第二索引词。
这里,确定至少一个第二索引词的方法可以参考前述S200中任一种确定第一索引词的方法。另外,在一种实现方式中,由于此前已经对待细分类簇中的文本进行过分词,故而可以直接采用此前对这些文本进行分词的分词结果,从这些分词结果中筛选出至少一个第二索引词。
例如,对于前述例子中的第一个类簇U2来说,由于其中包含的文本数量超过预设的第一阈值4个,故而将其作为一个待细分类簇,来进一步细分聚类。对于待细分类簇U2中文本1至文本7的分词结果,可以从中筛选出第二索引词“肇源”、“新兴”等。
S720:分别建立与每一个第二索引词对应的第二索引文档集合。
在S720的步骤中,所述第二索引文档集合为包含对应的第二索引词的文本的集合。也就是说,对于一个第二索引词而言,其对应一个第二索引文档集合,这个第二索引文档集合中包括了至少一个文本,并且,每一个文本都包含了该第二索引词。
例如,对于S710的步骤的例子中筛选出的第二索引词,可以建立如表2所示的第二索引文档集合。
表2
在一种实现方式中,分别建立与每一个第二索引词对应的第二索引文档集合的方法,可以参考S300步骤中建立第一索引词对应的第一索引文档集合的任一种方法。在其中一种实现方式中,S720的步骤的方法可以包括:
S721:针对待细分类簇中的每一个文本,建立与文本的分词结果中每一个分词的映射关系;
S722:根据筛选出的至少一个第二索引词以及所述映射关系,建立与每一个第二索引词对应的第二索引文档集合。
此处,如果在S300的步骤中,针对第一文本集中的每一个文本,已经建立了与文本的分词结果中每一个词的映射关系,由于待细分类簇是第一文本集的子集,故而,可以直接采用此前已经建立过的映射关系,以避免重复建立映射关系。
S730:如果与当前待细分类簇交集最大的第二索引文档集合中的文本数量大于或等于预设的第二阈值,则将与当前待细分类簇交集最大的第二索引文档集合中的所有文本划分为第j子类簇,删除当前待细分类簇中已经划分到第j子类簇中的文本。
在S730的步骤中,j=1,2,3……;所述第二阈值小于或等于所述第一阈值。
为便于引述,以下将“与当前待细分类簇交集最大的第二索引文档集合”称为“第二最大交集”。
首先,分别确定每一个第二索引词对应的第二索引文档集合与待细分类簇的交集,从中确定交集最大的一个第二索引文档集合,即第二最大交集。如果第二最大交集中的文本数量≥第二阈值,那么就将其中的所有文本都划分为一个子类簇,在此称之为第1子类簇,从待细分类簇中将这些已经划分到第一子类簇中的文本删除,以避免重复聚类。此时,待细分类簇中包含的文本已经减少了一部分。
然后,如果当前待细分类簇不为空,则分别确定各个第二索引词对应的第二索引文档集合与当前待细分类簇的交集,从中确定新的第二最大交集。如果新的第二最大交集中的文本数量≥第二阈值,那么就将其中的所有文本都划分为一个子类簇,在此称之为第2子类簇,从待细分类簇中将这些已经划分到第2子类簇中的文本删除。此时,当前待细分类簇中包含的文本又减少了一部分。
与前述S400的步骤类似的,在确定新的第二最大交集时,在此前的步骤中曾被确定为交集最大的第二索引文档集合,在后续的步骤中可以不参与计算。
如此重复,将针对待细分类簇的第j次划分出的子类簇称为第j子类簇,故而,j可以取1,2,3,……等正整数。j每增加1,表示重复一次上述的确定第二最大交集、划分子类簇以及删除的步骤,直到当前待细分类簇为空,或者确定出的新的第二最大交集中的文本数量<第二阈值。
也就是说,如果当前待细分类簇为空,表示针对该待细分类簇的聚类步骤已经完成,可以结束针对待细分类簇的聚类步骤。或者,
S740:如果当前待细分类簇不为空,并且与当前待细分类簇交集最大的第二索引文档集合中的文本数量小于预设的第二阈值,则将当前待细分类簇中所有文本划分为第j+1子类簇。至此,结束针对待细分类簇的聚类步骤。
沿用前述例子中待细分类簇U2和表2的例子,预设第二阈值为2。
首先,分别确定表2中的K5至K6共两个第二索引文档集合与U2的交集,结果K5与U2的交集最大,即第二最大交集为K5。由于K5中的文本数量为4,大于第二阈值,故而则将K5中所有文本划分为第1子类簇U2-1,删除U2中已经划分到U2-1中的文本,此时,U2包含的元素已经发生了变化,变更为[5,6,7]。
然后,确定表2中的第二索引文档集合K6与当前U2的交集,K6与当前U2的交集最大,即新的第二最大交集为K6。由于K6中的文本数量为3,大于第二阈值,故而将K6中所有文本划分为第2子类簇U2-2,删除当前U2中已经划分到U2-2中的文本。此时,U2变更为[],即当前待细分类簇为空,此时表示待细分类簇中所有的7个文本都已经聚类完毕。
此外,针对S400步骤的例子中划分出的U3,也可以将其作为一个待细分类簇,采用类似的方法再对其进行聚类。假设仅聚类得到一个子类簇U3-1,那么至此,原本的第一文本集U1已经被聚类得到3个类簇,即U3-1,U2-1和U2-2。
对于已经划分出的子类簇中的部分或者全部,还可以再重复采用倒排索引结合最小集合覆盖的思想的处理方法,将子类簇进一步细分聚类为一个或多个孙类簇,直到所有划分出的类簇、子类簇、孙类簇等等所有类簇能够满足预设的停止条件为止。这里的停止条件可以是预设的迭代次数等。例如,当预设迭代次数为3次时,将部分或全部子类簇都分别划分出孙类簇之后就可以停止迭代;当预设的迭代次数为4次时,则需要将部分或者全部孙类簇都分别划分出曾孙类簇之后才停止迭代。
可选地,对于一个包含了大量的文本的原始文本集来说,可以先对该原始文本集进行粗聚类,将原始文本集聚类为至少一个粗分类簇。一般来说,对于包含大量文本的原始文本集可以划分成两个或两个以上的粗分类簇。然后针对其中一个粗分类簇,将其确定为前述的第一文本集,进行前述S100至S400步骤的处理,以进一步聚类,得到更加精确的聚类效果。
具体来说,请参考图3,在一种实现方式中,将原始文本集中的文本聚类为至少两个粗分类簇的步骤,可以包括:
S811:从原始文本集中选取一个文本作为第一粗分类簇的簇心,从原始文本集中删除的第一粗分类簇的簇心;
遍历原始文本集中的剩余文本,依次对每一个文本进行类簇划分。
对于其中一个文本而言,其聚类的过程包括如下步骤:
S812:计算原始文本集中剩余文本之中的一个文本与已经划分出的粗分类簇的簇心之间的距离;
S813:如果所述文本与一个粗分类簇的簇心之间的距离小于预设的第五阈值,则将所述文本划分到所述粗分类簇中,删除原始文本集中已经划分到粗分类簇中的文本;
S814:如果所述文本与所有已经划分出的粗分类簇的簇心之间的距离都不小于预设的第五阈值,则将所述文本确定为第i粗分类簇的簇心,其中,i=2,3,……。
在S811的步骤中,从原始文本集中选取一个文本作为第一粗分类簇的簇心,可以是随机选取,也可以是根据预设的需求来选取,本申请对于选取第一粗分类簇的簇心的具体方法不做限定。
在S812的步骤中,分别计算一个文本与已经划分出的一个粗分类簇的簇心之间的距离,具体可以通过以下方式来计算:
将一个文本进行分词,得到第三分词结果;利用第三分词结果中每一个分词的词向量计算所述文本的向量表示;
将一个粗分类簇的簇心进行分词,得到第四分词结果;利用第四分词结果中每一个分词的词向量计算所述粗分类簇的簇心的向量表示;
根据余弦定理,利用所述文本的向量表示以及所述粗分类簇的簇心的向量表示,计算得到所述文本与所述粗分类簇的簇心的距离。
此处,第三分词结果和第四分词结果中的分词的词向量可以是分词的独热表示(one-hot representation)。独热表示将词符号化,把每个词表示为一个很长的向量,是一种稀疏的表示方式。这个向量的维度是词表大小,其中绝大多数元素为0,只有一个维度的值为1,这个维度就代表了当前的词。例如,此表大小为10,依次包括“黑龙江”、“肇源”、“客车”、“起火”、“事故”、“初步”、“认定”、“为”、“车体”、“自燃”10个词。则“黑龙江”的独热表示为[1,0,0,0,0,0,0,0,0,0];“客车”的独热表示为[0,0,1,0,0,0,0,0,0,0]。
在S813和S814的步骤中,第五阈值是表示文本与文本的距离的阈值。如果一个文本距离一个粗分类簇的簇心之间的距离小于第五阈值,说明二者相似度相对而言较高,故而将该文本划分到该粗分类簇中。如果该文本与所有已经划分出的粗分类簇的簇心之间的距离都不小于预设的第五阈值,说明该文本与所有已经划分出的类簇的相似度都比较低,故而将该文本确定为一个新的粗分类簇的簇心。
依次计算一个文本与所有已经划分出的粗分类簇的簇心之间的距离,如果该文本到多个粗分类簇的簇心之间的距离均小于第五阈值,则按照计算顺序来将该文本划分到类簇中。例如,假设文本1到第一粗分类簇、第二粗分类簇以及第三粗分类簇的簇心的距离均小于第五阈值,但按照计算顺序,当计算文本1到第一粗分类簇的簇心的距离小于第五阈值时,就直接将文本1划分到第一粗分类簇中,而不再需要计算其余后续其他类簇的簇心之间的距离。
遍历完文本集中所有剩余文本,也就完成了对所有剩余文本进行聚类的过程。
在另一种实现方式中,将原始文本集中的文本聚类为至少两个粗分类簇的步骤,可以包括:
S821:从原始文本集中选取一个文本作为第一粗分类簇的簇心,从原始文本集中删除的第一粗分类簇的簇心;
S822:分别计算原始文本集中剩余文本与第一粗分类簇的簇心之间的距离,将距离小于预设的第六阈值的文本划分到所述第一粗分类簇中,删除原始文本集中已经划分到第一粗分类簇中的文本;
S823:如果当前原始文本集不为空,则从当前原始文本集中选取一个文本作为第h粗分类簇的簇心,从当前原始文本集中删除第h粗分类簇的簇心;
S824:分别计算当前原始文本集中剩余文本与第h粗分类簇的簇心之间的距离,将距离小于预设的第六阈值的文本划分到第h粗分类簇中,删除当前原始文本集中已经划分到第h粗分类簇中的文本,其中,h=2,3,……。
S821的步骤可以参考S811的步骤的相关描述,此处不再赘述。
S822至S824的步骤中,将原始文本集中剩余文本中所有与第一粗分类簇簇心的距离小于第六阈值的文本都划分到第一粗分类簇中。删除原始文本集中已经划分到第一粗分类簇中的文本,此时如果当前原始文本集不为空,则当前原始文本集中剩余的所有文本都是与第一粗分类簇的簇心距离≥第六阈值的文本。从这些文本中选取一个作为第二粗分类簇的簇心,从当前原始文本集中删除第二粗分类簇的簇心。再分别计算当前原始文本集中剩余文本与第二粗分类簇的簇心之间的距离,将距离小于第六阈值的文本划分到第二粗分类簇中,删除当前原始文本集中已经划分到第二粗分类簇中的文本。此时当前原始文本集中剩余的所有文本与第一粗分类簇和第二粗分类簇的簇心的距离都是≥第六阈值的。再重复前述的S823至S824的步骤,直到当前原始文本集为空,表示原始文本集中所有的文本都已经聚类完成。
上述两种实现方式中,第一种实现方式在计算时的时间复杂度相对较低,第二种实现方式的时间复杂度相对较高。
采用上述的粗聚类方法,可以快速地将大量的文本聚类为几个大的粗分类簇。在常见的直接聚类的方法中,由于必须要预设距离阈值,一旦距离阈值设置的不合适,大量文本就可能被聚类到错误的类簇中,不能修正,从而使得聚类质量受到较大影响。而采用粗聚类的方法先进行粗聚类,尽管粗聚类的方法中也需要设置距离阈值,即第五阈值或第六阈值,但是由于仅仅是粗聚类,对于第二阈值设置的准确程度没有像常见的直接聚类的方法的要求那么高,故而即便第五阈值或第六阈值设置得不那么合适,也不会对最终聚类的效果产生严重的影响。也就是说,通过上述方法一定程度上可以缓解聚类错误影响聚类精确度的问题。
可选地,在前述S400、S500、S730或S740的步骤之后,还可以对其中的部分或全部类簇/子类簇进行进一步精分聚类,以进一步提高聚类精确度。具体来说,可以包括:
S900:采用singlepass聚类法对待精分类簇进行聚类,所述待精分类簇为文本平均距离大于预设的第三阈值的类簇或子类簇中的任一个。
如果采用前述的方法所得到的类簇或子类簇的文本平均距离大于预设的第三阈值,则表示这样的类簇或子类簇还需要进一步进行精细聚类,以得到更加精确的聚类结果。将文本平均距离大于预设的第三阈值的类簇或子类簇中的任一个确定为待精分类簇,对该类簇再采用singlepass聚类法进行聚类。此处的singlepass聚类法属于凝聚型层次聚类方法。
具体地,在一种实现方式中,采用singlepass聚类法对待精分类簇进行聚类,遍历待精分类簇中的每一个文本,将当前读取到文本划分到类簇中。对于第一个读取的文本,可以直接将其划分到一个新的精分类簇中。对于后续读取的文本,可以通过以下方法来确定是将其划分到某一个精分类簇中,还是将其确定为一个新的精分类簇的簇心,请参考图4,具体步骤包括:
S910:从待精分类簇中读取一个文本;
S920:如果所述文本到已经划分出的其中一个精分类簇中任意一个文本的距离不超过预设的第四阈值,则将所述文本划分到所述精分类簇中;
S930:如果所述文本到已经划分出的所有精分类簇中全部文本的距离均超过第四阈值,则将所述文本确定为一个新的精分类簇的簇心。
在S920和S930的步骤中,第四阈值是表示文本与文本的距离的阈值。如果一个文本到已经划分出的其中一个精分类簇中的任一个文本的距离不超过第四阈值,说明该文本与该精分类簇中的至少一个文本的距离较近,二者的相似度较高,故而将该文本划分到该类簇中。如果该文本到所有已经划分出的精分类簇中全部文本的距离均超过第四阈值,说明该文本与所有已经划分出的精分类簇的距离都比较远,相似度都不高,故而将该文本确定为一个新的精分类簇的簇心。到划分下一个文本时,此前被划分出的新的精分类簇也参与到计算的过程中。此处,计算待精分类簇中的一个文本到已经划分出的精分类簇中的任一个文本之间的距离的方法,可以包括:
S921:将一个文本进行分词,得到第一分词结果;
S922:利用第一分词结果中每一个分词的词向量计算所述文本的向量表示;
S923:将一个精分类簇中的文本进行分词,得到第二分词结果;
S924:利用第二分词结果中每一个分词的词向量计算所述精分类簇中的文本的向量表示;
S925:根据余弦定理,利用所述文本的向量表示以及所述精分类簇中的文本的向量表示,计算得到所述文本与所述精分类簇中的文本的距离。
其中,第一分词结果中分词的词向量可以为分词的独热表示(one-hotrepresentation)或分词的分布式表示(distributed representation);第二分词结果中分词的词向量也可以为分词的独热表示或分词的分布式表示。独热表示可以参考S812步骤的相关描述。分布式表示使用特定维度的低维实数向量来表示单词,是一种稠密的表示方式。例如,这种向量一般是这样的:[0.712,-0.05,-0.343,0.156...]。
在S922的步骤中,文本的向量表示可以是第一分词结果中每一个分词的词向量的加和。类似地,S924以及此前计算文本的向量表示时,文本的向量表示都可以是该文本的分词结果中每一个分词的向量表示的加和。这里,加和指的计算多个向量相加之和的运算。例如,第一分词结果一共包括3个词,将这3个词采用独热表示分别表示为5维的词向量,具体如下:词1的向量表示:[1,0,0,0,0];词2的向量表示:[0,0,1,0,0];词3的向量表示:[0,0,0,1,0];则三者的加和结果为:[1,0,1,1,0]。
在S925的步骤中,假设文本的向量表示为向量一个精分类簇中的一个文本的向量表示为向量则二者的距离为:
该方法也适用于S812的步骤中计算两个文本之间的距离。
当待精分类簇中所有的文本都遍历完,则输出所有的精分类簇。
需要说明的是,前述的粗聚类和精分聚类的任一种方法,可以单独与S100至S400的层次聚类方法相结合,也可以共同与之相结合,本申请对于结合的方式不做限定,只需要逻辑通顺不相互矛盾即可。
在本申请的第二个实施例中,请参考图5,提供一种层次聚类装置,包括:
第一处理单元1,用于确定第一文本集;确定至少一个第一索引词;分别建立与每一个第一索引词对应的第一索引文档集合;在与当前第一文本集交集最大的第一索引文档集合中的文本数量大于或等于预设的第一阈值的情况下,将与当前第一文本集交集最大的第一索引文档集合中的所有文本划分为第k个类簇,删除当前第一文本集中已经划分到第k个类簇中的文本;其中,所述第一索引词包含于第一文本集中的至少一个文本中,所述第一索引文档集合为包含对应的第一索引词的文本的集合,k=1,2,3……。
可选地,所述第一处理单元1还用于在当前第一文本集不为空,并且与当前第一文本集交集最大的第一索引文档集合中的文本数量小于预设的第一阈值的情况下,将当前第一文本集中所有文本划分为第k+1个类簇。
可选地,所述第一处理单元1还用于确定至少一个第二索引词;分别建立与每一个第二索引词对应的第二索引文档集合;在与当前待细分类簇交集最大的第二索引文档集合中的文本数量大于或等于预设的第二阈值的情况下,将与当前待细分类簇交集最大的第二索引文档集合中的所有文本划分为第j子类簇,删除当前待细分类簇中已经划分到第j子类簇中的文本,其中,j=1,2,3……,所述第二阈值小于或等于所述第一阈值,所述第二索引词包含于待细分类簇中的至少一个文本中,所述待细分类簇为已划分出的类簇中的任一个;所述第二索引文档集合为包含对应的第二索引词的文本的集合。
可选地,所述第一处理单元1还用于在当前待细分类簇不为空,并且与当前待细分类簇交集最大的第二索引文档集合中的文本数量小于预设的第二阈值的情况下,将当前待细分类簇中所有文本划分为第j+1子类簇。
可选地,所述第一处理单元1还用于将第一文本集中所有文本进行分词,得到分词结果;从所述分词结果中筛选出至少一个第一索引词;针对第一文本集中的每一个文本,建立与文本的分词结果中每一个分词的映射关系;以及,根据筛选出的至少一个第一索引词以及所述映射关系,建立与每一个第一索引词对应的第一索引文档集合。
可选地,所述层次聚类装置还包括:
第二处理单元2,用于将原始文本集中的文本聚类为至少两个粗分类簇。
所述第一处理单元1还用于从所有粗分类簇中选取一个粗分类簇,确定为第一文本集。
可选地,所述第二处理单元2具体用于从原始文本集中选取一个文本作为第一粗分类簇的簇心,从原始文本集中删除的第一粗分类簇的簇心;计算原始文本集中剩余文本之中的一个文本与已经划分出的粗分类簇的簇心之间的距离;在所述文本与一个粗分类簇的簇心之间的距离小于预设的第五阈值的情况下将所述文本划分到所述粗分类簇中,删除原始文本集中已经划分到粗分类簇中的文本;以及,在所述文本与所有已经划分出的粗分类簇的簇心之间的距离都不小于预设的第五阈值的情况下将所述文本确定为第i粗分类簇的簇心,其中,i=2,3,……。
可选地,所述层次聚类装置还包括:
第三处理单元3,用于采用singlepass聚类法对待精分类簇进行聚类,所述待精分类簇为文本平均距离大于预设的第三阈值的类簇或子类簇中的任一个。
可选地,所述第三处理单元3具体用于从待精分类簇中读取一个文本;在所述文本到已经划分出的其中一个精分类簇中任意一个文本的距离不超过预设的第四阈值的情况下,将所述文本划分到所述精分类簇中;以及,在所述文本到已经划分出的所有精分类簇中全部文本的距离均超过第四阈值的情况下,将所述文本确定为一个新的精分类簇的簇心。
可选地,所述第三处理单元3具体还用于将一个文本进行分词,得到第一分词结果;利用第一分词结果中每一个分词的词向量计算所述文本的向量表示;将一个精分类簇中的文本进行分词,得到第二分词结果;利用第二分词结果中每一个分词的词向量计算所述精分类簇中的文本的向量表示;以及,根据余弦定理,利用所述文本的向量表示以及所述精分类簇中的文本的向量表示,计算得到所述文本与所述精分类簇中的文本的距离。
可选地,前述第一分词结果/第二分词结果中分词的词向量为分词的独热表示或分词的分布式表示。
此外,本实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行第一个实施例中的任一种层次聚类方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线DSL)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。这里的可用介质可以是磁性介质(例如软盘、硬盘、磁带)、光介质(例如DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
上述的层次聚类装置、计算机可读存储介质与第一个实施例中的层次聚类方法相对应,相应地具有前述层次聚类方法的有益效果,此处不再赘述。
本说明书中各个实施例之间相同相似的部分互相参见即可。以上所述的本发明实施方式并不构成对本发明保护范围的限定。