具体实施方式
请参考图1,在本申请的第一个实施例中,提供一种内置约束规则的k-means文本聚类 方法,包括以下S100至S600的步骤。
S100:利用第二约束规则预处理待聚类文本集,得到与所述第二约束规则对应的第二预 处理集合,所述第二约束规则包括两个子规则,符合其中一个子规则的文本与符合另一个子 规则的文本必须聚类到不同的类簇中,所述第二预处理集合包括两个子集合,每一个所述子 集合包括符合一个对应的子规则的文本。
在S100的步骤中,第二约束规则包括两个子规则,符合其中一个子规则的文本与符合另 一个子规则的文本必须聚类到不同的类簇中。例如,第二约束规则1包括子规则1-1和子规 则1-2,文本A符合子规则1-1,文本J符合子规则1-2,则在对包括文本A和文本J的待聚 类文本集进行聚类时,须将文本A和文本J聚类到不同的类簇中。
具体地,在第二约束规则的其中一种实现方式中,每一个第二约束规则的子规则包括至 少一个互斥词袋(Bag of words),每一个互斥词袋包括至少一个预设的第二关键词。当同一 个互斥词袋中的第二关键词的数量≥2个时,所述互斥词袋还包括所述第二关键词之间的逻 辑“与”的关系。当某个文本包括某个第二约束规则中的子规则中任一个互斥词袋时,则该 文本符合该第二约束规则的子规则。
表1给出了第二约束规则的一个示例,在表1中“+”表示逻辑“与”的关系。以表1的第二约束规则为例,如果文本A包括互斥词袋1,也就是文本A中同时包括第二关键词1、第二关键词2和第二关键词3,则文本A符合第二约束规则1的子规则1-1。如果文本J包括互 斥词袋3,也就是文本J同时包括第二关键词7和第二关键词8,则文本J符合第二约束规则 1的子规则1-2。由于文本A和J分别符合第一约束规则1的两个子规则,故而在对包括文本 A和文本J的待聚类文本集进行聚类时,将文本A和文本J聚类到不同的类簇中。
表1第二约束规则的一种实现方式的示例
上述的每一个第二关键词都可以是一个明确的词,例如“办卡”、“错误”等。在不同的 应用场景中,子规则的互斥词袋中的第二关键词可以是与用户期望得到的类簇的主题密切相 关的词,以使第二关键词组成的互斥词袋能够体现类簇的主题。并且对于一个第二约束规则 而言,同一个子规则的互斥词袋均体现相同的类簇的主题,不同的子规则的互斥词袋体现不 同的类簇的主题。
例如,对于银行***部客户服务工单文本构成的待聚类文本集,用户预期对该文本集 进行聚类后得到的每个类簇都能够体现不同的主题,如“办卡问题”、“账务问题”、“资料录 入错误”、“工作人员业务不熟练”等,以便后续按不同的主题分别进行处理。为此,假设第 二约束规则1中子规则1-1的各个互斥词袋中的第二关键词能够体现“办卡问题”,则第二关 键词1可以是“办卡”,第二关键词2可以是“至今没有”,第二关键词3可以是“审批通过”, 则互斥词袋1为“办卡+至今没有+审批通过”,该互斥词袋体现了“办卡问题”这个类簇的主 题。类似地,还可以设置互斥词袋2等其他互斥词袋来体现“办卡问题”这个类簇的主题, 例如,互斥词袋2可以是“申请+卡+未收到”。第二约束规则1中子规则1-2的各个互斥词袋 中的第二关键词能够体现“资料录入错误”,则第二关键词4可以是“办卡”,第二关键词5 可以是“没有进展”,第二关键词6可以是“发现错误”,则互斥词袋3为“办卡+没有进展+发现错误”,该互斥词袋体现了“资料录入错误”这个类簇的主题。
类似地,还可以设置第二约束规则2等多个第二约束规则。例如,在第二约束规则2中, 子规则2-1的各个互斥词袋则可以体现“账务问题”这个类簇的主题;子规则2-2的各个互 斥词袋则可以体现“办卡问题”这个类簇的主题。
进一步地,第二关键词还可以用正则表达式来表示,即每一个第二关键词可以包括若干 个子关键词以及子关键词之间的关联关系。这里的关联关系可以用正则表达式中的元字符来 表示。例如“+”表示逻辑与;“|”表示逻辑或;“()”表示多元取整;“*”表示匹配前面的 子表达式任意次;“?”表示匹配前面的子表达式零次或一次;“(.*)?”表示最短匹配,即匹 配到“(.*)?”后面的限定字符就结束匹配。
举例来说,表9中的第二关键词1,可以表示为一个正则表达式“(办|办理|申办|申请)(.*)?卡”。其中,“办”、“办理”、“申办”、“申请”、“卡”均为子关键词,“()”、“|”、 “.*”、“?”元字符。如果某个文本中包括“办”、“办理”、“申办”、“申请”这4个子关键 词中的任意一个,并且在其后匹配到关键词“卡”,则该正则表达式能够匹配上该文本。也就 是说,该文本中包括第二关键词1。
在S100的步骤中,在利用第二约束规则预处理待聚类文本集时,将待聚类文本集中符合 第二约束规则的子规则的文本或者文本的唯一标识信息,例如编号信息,存储到相应的第二 预处理集合的子集合中,用于后续步骤。待聚类文本集中的部分文本可能不符合任意一条第 二约束规则的任一条子规则,这些文本或者文本的唯一标识信息则不会被存储到第二预处理 集合的子集合中。
需要说明的是,第二预处理集合、类簇互斥集合,以及后续第二个实施例中涉及的第一 预处理集合,这些集合中存储的可以是文本本身,也可以是文本的唯一标识信息,无论以哪 种形式存储,均未脱离本发明的核心思想。为便于描述,在后续的实施例中对此不做区分, 仅用“文本”来表示。
当本申请实施例的k-means文本聚类方法中存在n条第二约束规则的时候,利用第二约 束规则预处理待聚类文本集,相应地得到n个第二预处理集合,每个第二预处理集合包括2 个子集合,其中,n为≥1的正整数。
以下通过一个实例来进一步说明。假设待聚类文本集包括文本A、文本B、文本C……文 本H、文本I、文本J、文本L共11个文本。表2为本实例中,当存在2个第二约束规则时, 第二约束规则与第二预处理集合的对应关系。其中,文本A符合子规则1-1,文本J符合子 规则1-2;文本C、文本D和文本I符合子规则2-1,文本F和文本G符合子规则2-2。
表2第二预处理集合示例
S200:获取所述待聚类文本集中的k个文本作为簇心,k<N,N为待聚类文本集中文本 的总数量。
在S200的步骤中,选取待聚类文本集中的k个文本作为簇心。这意味着,待聚类文本集 中其余的(N-k)个文本将通过后续的步骤被归类到这k个类簇中。这里获取k个文本作为簇 心,可以是计算机获取人为指定的k个文本作为簇心,也可以由计算机随机获取k个文本作 为簇心,本申请对此不做限定。
S300:如果簇心包含于第二预处理集合的任一个子集合中,则将该第二预处理集合的另 一个子集合中的文本添加到与该簇心对应的类簇互斥集合中。
在S300的步骤中,可以遍历所有簇心,对于每一个簇心,如果该簇心包含于第二预处理 集合的任一个子集合中,则将该第二预处理集合的另一个子集合中的文本添加到与该簇心对 应的类簇互斥集合中。如果该簇心不包含于任何一个第二预处理集合的任何一个子集合中, 则对下一个簇心进行处理,直到所有簇心都处理完毕。
在本步骤中,类簇互斥集合与簇心一一对应,也就是说,在S200的步骤中获取了k个文 本作为簇心,则类簇互斥集合相应地也有k个,用于存储待聚类文本集中须与簇心聚类到不 同类簇中的文本。
沿用步骤100中的实例,假设S200的步骤获取3个文本作为簇心,分别是:文本A、文本D和文本H,则在执行了S300的步骤之后,可以得到表3的结果。具体来说,首先针对类 簇1的簇心——文本A,由于文本A包含于第二预处理集合1的子集合1-1中,因此子集合 1-2中的文本J存储到与簇心1对应的类簇互斥集合1中。然后针对下一个簇心——文本D, 由于文本D包含于第二预处理集合2的子集合2-1中,因此将子集合2-2中的文本F和文本 G存储到与簇心2对应的类簇互斥集合2中。最后针对下一个簇心——文本H,由于文本H不 包含于任何一个第二预处理集合的子集合中,因此,此时与簇心3对应的类簇互斥集合3中 暂时为空。
表3S300的步骤之后类簇互斥集合情况的示例
簇心序号 |
簇心 |
类簇互斥集合序号 |
类簇互斥集合的文本 |
簇心1 |
文本A |
类簇互斥集合1 |
文本J |
簇心2 |
文本D |
类簇互斥集合2 |
文本F、文本G |
簇心3 |
文本H |
类簇互斥集合3 |
—— |
S400:如果待聚类文本集中的当前文本包含于x个类簇互斥集合中,则计算除类簇互斥 集合所对应的簇心以外其他(k-x)个簇心与当前文本的距离,将当前文本添加到与其距离最 近的簇心所对应的类簇中,其中,0<x<k;
S500:如果待聚类文本集中的当前文本不包含于任何一个类簇互斥集合中,或者当前文 本包含于全部类簇互斥集合中,则计算所有簇心与当前文本的距离,将当前文本添加到与其 距离最近的簇心所对应的类簇中。
在S400和S500的步骤中,可以遍历待聚类文本集中的文本,对于每一个文本,判断该 文本是否包含于类簇互斥集合中。如果包含于x个类簇互斥集合中,则计算除类簇互斥集合 所对应的簇心以外其他(k-x)个簇心与当前文本的距离,将当前文本添加到与其距离最近的 簇心所对应的类簇中,其中,0<x<k。如果不包含在任何一个类簇互斥集合中,或者包含于 全部类簇互斥集合中,则计算该文本与每一个簇心的距离,然后将该文本添加到与其距离最 近的簇心所对应的类簇中。
这里需要说明的是,如果某个文本包含于全部类簇互斥集合中,说明在这种情况下该文 本和所有的簇心组合都能够符合第二约束规则。也就是说,此时,按照第二约束规则,该文 本必须与所有簇心都聚类到不同的类簇下。但这样操作的话,该文本在当前轮次的迭代中将 无法进行归类,容易导致聚类方法执行出错。为此,当面临这种情况时,将所有的簇心都视 为平等,一一计算该文本到所有簇心之间的距离,然后将该文本添加到与其距离最近的簇心 所对应的类簇中。
沿用本实施例步骤S300的实例,待聚类文本集中共有8个尚未归类的文本:文本B、文 本C、文本E、文本F、文本G、文本I、文本J、文本L。以下依次将8个文本归入3个类簇 中。
(1)判断文本B是否包含于表3的类簇互斥集合中,判断结果是文本B不包含于任何一 个类簇互斥集合中,则分别计算文本B与三个簇心之间的距离。假设文本B与簇心1“文本A” 的距离最近,则将文本B添加到类簇1中。
(2)判断文本C是否包含于表3的类簇互斥集合中,判断结果是文本C不包含于任何一 个类簇互斥集合中,则分别计算文本C与三个簇心之间的距离。假设文本C与簇心2“文本D” 的距离最近,则将文本C添加到类簇2中。
(3)判断文本E是否包含于表3的类簇互斥集合中,判断结果是文本E不包含于任何一 个类簇互斥集合中,则分别计算文本E与三个簇心之间的距离。假设文本E与簇心2“文本D” 的距离最近,则将文本E添加到类簇2中。
(4)判断文本F是否包含于表3的类簇互斥集合中,判断结果是文本F包含于类簇互斥 集合2中,类簇互斥集合2对应的簇心2为文本D,因此,分别计算除簇心2“文本D”之外 的其他簇心,也就是簇心1和簇心3,与文本F之间的距离。假设文本F与簇心3“文本H” 的距离最近,则将文本F添加到类簇3中。
(5)判断文本G是否包含于表3的类簇互斥集合中,判断结果是文本G包含于类簇互斥 集合2中,类簇互斥集合2对应的簇心2为文本D,因此,分别计算除簇心2“文本D”之外 的其他簇心,也就是簇心1和簇心3,与文本G之间的距离。假设文本G与簇心3“文本H” 的距离最近,则将文本G添加到类簇3中。
(6)判断文本I是否包含于表3的类簇互斥集合中,判断结果是文本I不包含于任何一 个类簇互斥集合中,则分别计算文本I与三个簇心之间的距离。假设文本I与簇心1“文本A” 的距离最近,则将文本I添加到类簇1中。
(7)判断文本J是否包含于表3的类簇互斥集合中,判断结果是文本J包含于类簇互斥 集合1中,类簇互斥集合1对应的簇心1为文本A,因此,分别计算除簇心1“文本A”之外 的其他簇心,也就是簇心2和簇心3,与文本J之间的距离。假设文本J与簇心3“文本H” 的距离最近,则将文本J添加到类簇3中。
(8)判断文本L是否包含于表3的类簇互斥集合中,判断结果是文本L不包含于任何一 个类簇互斥集合中,则分别计算文本L与三个簇心之间的距离。假设文本L与簇心3“文本H” 的距离最近,则将文本L添加到类簇3中。
上述归类的过程中,在将文本F、文本G和文本J归类到类簇中的时候,只需要计算除 类簇互斥集合所对应的簇心以外其他的簇心与当前文本的距离即可,减少了需要参与计算的 簇心的数量,从而降低了文本聚类的计算复杂度。
至此,待聚类文本集中所有的文本都已经被聚类到相应的类簇中,结果如表4所示。
表4S400和S500的步骤之后类簇情况的示例
类簇序号 |
簇心 |
类簇中的其余文本 |
类簇1 |
文本A |
文本B、文本I |
类簇2 |
文本D |
文本C、文本E |
类簇3 |
文本H |
文本F、文本G、文本J、文本L |
S600:重新计算每个类簇的新的簇心,如果新的簇心满足预设的停止条件,则输出全部 类簇。
在S600的步骤中,重新计算每个类簇的新的簇心,具体可以采用典型k-means聚类方法 中的计算方法,即计算类簇中所有文本两两之间的距离,然后找到与类簇中其他文本综合距 离最近的文本,将其作为新的簇心。
如果新的簇心不满足预设的停止条件,则重置待聚类文本集,以新的簇心为簇心,重复 执行S300至S500的步骤,然后再重新计算每个类簇的新的簇心。这里每一次重复S300、S400、 S500的步骤,以及计算每个类簇的新的簇心的过程,累记一次迭代过程。直到新的簇心满足 预设的停止条件,则输出全部类簇。
在S600的步骤中,预设的停止条件,可以根据不同的情况来具体设置,例如,如果新的 簇心与原簇心之间的的偏差值小于预设阈值,则新的簇心满足预设的停止条件;又例如,如 果累计的迭代次数达到预设的迭代次数,则新的簇心满足预设的停止条件。
以下沿用前述S400和S500的步骤中的实例来说明新的簇心满足预设的停止条件的情况。
经过一次迭代之后,假设重新计算每个类簇的新的簇心,分别为:类簇1——文本B,类 簇2——文本C,类簇3——文本J。
若经过计算,类簇1的原簇心文本A与新的簇心文本B之间的距离小于预设阈值,类簇 2的原簇心文本D与新的簇心文本C之间的距离小于预设阈值,并且类簇3的原簇心文本H与新的簇心文本J之间的距离小于预设阈值,则此时新的簇心满足停止条件,输出全部类簇, 如表5所示。
表5输出全部类簇的一个示例
类簇序号 |
类簇中的文本 |
类簇1 |
文本A、文本B、文本I |
类簇2 |
文本D、文本C、文本E |
类簇3 |
文本F、文本G、文本H、文本J、文本L |
以下延用前述S400和S500的步骤中的实例来说明新的簇心不满足预设的停止条件的情 况。
经过一次迭代之后,假设重新计算每个类簇的新的簇心,分别为:类簇1——文本B,类 簇2——文本C,类簇3——文本J。若经过计算,新的簇心不满足预设的停止条件,则进入 第二次迭代过程。具体过程包括:
重置待聚类文本集,此时待聚类文本集包括文本A、文本B、文本C……文本H、文本I、 文本J、文本L共11个文本。重置类簇互斥集合。
以每个类簇的新的簇心为簇心,如果簇心包含于第二预处理集合的任一个子集合中,则 将该第二预处理集合的另一个子集合中的文本添加到与该簇心对应的类簇互斥集合中,从而 得到新的类簇互斥集合。遍历完所有簇心,得到的类簇互斥集合如表6所示。
表6第二轮迭代中执行上述步骤后类簇互斥集合情况的示例
簇心序号 |
簇心 |
类簇互斥集合序号 |
类簇互斥集合的文本 |
簇心1 |
文本B |
类簇互斥集合1 |
—— |
簇心2 |
文本C |
类簇互斥集合2 |
文本G、文本F |
簇心3 |
文本J |
类簇互斥集合3 |
文本A |
待聚类文本集中共有8个尚未归类的文本:文本A、文本D、文本E、文本F、文本G、 文本H、文本I、文本L。以下依次将8个文本归入3个类簇中。
(1)判断文本A是否包含于表6的类簇互斥集合中,判断结果是文本A包含于类簇互斥 集合3中,类簇互斥集合3对应的簇心3为文本J,因此,分别计算除簇心3“文本J”之外 的其他簇心,也就是簇心1和簇心2,与文本A之间的距离。假设文本A与簇心1“文本B” 的距离最近,则将文本A添加到类簇1中。
(2)判断文本D是否包含于表6的类簇互斥集合中,判断结果是文本D不包含于任何一 个类簇互斥集合中,则分别计算文本D与三个簇心之间的距离。假设文本D与簇心2“文本C” 的距离最近,则将文本D添加到类簇2中。
(3)判断文本E是否包含于表6的类簇互斥集合中,判断结果是文本E不包含于任何一 个类簇互斥集合中,则分别计算文本E与三个簇心之间的距离。假设文本E与簇心2“文本C” 的距离最近,则将文本E添加到类簇2中。
(4)判断文本F是否包含于表6的类簇互斥集合中,判断结果是文本F包含于类簇互斥 集合2中,类簇互斥集合2对应的簇心2为文本C,因此,分别计算除簇心2“文本C”之外 的其他簇心,也就是簇心1和簇心3,与文本F之间的距离。假设文本F与簇心3“文本J” 的距离最近,则将文本F添加到类簇3中。
(5)判断文本G是否包含于表6的类簇互斥集合中,判断结果是文本G包含于类簇互斥 集合2中,类簇互斥集合2对应的簇心2为文本C,因此,分别计算除簇心2“文本C”之外 的其他簇心,也就是簇心1和簇心3,与文本G之间的距离。假设文本G与簇心3“文本J” 的距离最近,则将文本G添加到类簇3中。
(6)判断文本H是否包含于表6的类簇互斥集合中,判断结果是文本H不包含于任何一 个类簇互斥集合中,则分别计算文本H与三个簇心之间的距离。假设文本H与簇心2“文本C” 的距离最近,则将文本H添加到类簇2中。
(7)判断文本I是否包含于表6的类簇互斥集合中,判断结果是文本I不包含于任何一 个类簇互斥集合中,则分别计算文本I与三个簇心之间的距离。假设文本I与簇心1“文本B” 的距离最近,则将文本I添加到类簇1中。
(8)判断文本L是否包含于表6的类簇互斥集合中,判断结果是文本L不包含于任何一 个类簇互斥集合中,则分别计算文本L与三个簇心之间的距离。假设文本L与簇心1“文本B” 的距离最近,则将文本L添加到类簇1中。
至此,待聚类文本集中所有的文本都已经被聚类到相应的类簇中,结果如表7所示。
表7第二次迭代执行上述步骤后类簇情况的示例
类簇序号 |
簇心 |
类簇中的其余文本 |
类簇1 |
文本B |
文本A、文本I、文本L |
类簇2 |
文本C |
文本D、文本E、文本H |
类簇3 |
文本J |
文本F、文本G |
然后再一次重新计算每个类簇的新的簇心,假设此时计算得到新的簇心分别为:类簇1 ——文本A,类簇2——文本E,类簇3——文本J。
若经过计算,此时类簇1的原簇心文本B与新的簇心文本A之间的距离小于预设阈值, 类簇2的原簇心文本C与新的簇心文本E之间的距离小于预设阈值,并且类簇3的原簇心文 本J与新的簇心文本J之间的距离小于预设阈值,则此时新的簇心满足停止条件,输出全部 类簇,输出结果如表8所示。
表8输出全部类簇的另一个示例
类簇序号 |
类簇中的文本 |
类簇1 |
文本A、文本B、文本I、文本L |
类簇2 |
文本D、文本C、文本E、文本H |
类簇3 |
文本F、文本G、文本J |
在典型的k-means聚类方法中,在获取了k个文本作为簇心之后,对于除簇心外的每一 个文本,都需要一一测量其到每一个簇心的距离,然后才能将该文本添加到与其距离最近的 簇心所对应的类簇中。
而在本实施例的聚类方法中,首先利用内置于k-means聚类方法中的第二约束规则预处 理待聚类文本集,得到第二预处理集合,然后获取待聚类文本集中的k个文本作为簇心。如 果簇心包含于第二预处理集合的任一个子集合中,则将该第二预处理集合的另一个子集合中 的文本添加到与该簇心对应的类簇互斥集合中,从而,使得簇心及与其对应的类簇互斥集合 中的文本符合第二约束规则。再逐一判断待聚类文本集中的文本是否包含于类簇互斥集合中, 如果某个文本包含于某个类簇互斥集合中,说明该文本与该类簇互斥集合所对应的簇心符合 第二约束规则,须归类到不同的类簇中。因此在将该文本进行归类时,无需再一一计算该文 本与每一个簇心的距离,只需要计算该文本到前述类簇互斥集合所对应的簇心以外的其他簇 心的距离即可,从而减少了参与计算的簇心的数量。如果该文本包含于x个类簇互斥集合中, 则只需要计算除类簇互斥集合所对应的x个簇心以外其他(k-x)个簇心与当前文本的距离即 可。从而改进了k-means聚类的过程,进而降低了文本聚类的计算复杂度。尤其是对于待聚 类文本集中的文本数量大、聚类的类簇多的情况,采用本申请的内置约束规则的k-means聚 类方法可以显著地降低计算复杂度。
此外,对于特征交叉较多的文本集,采用典型的k-means聚类方法进行聚类的效果较差。 具体来说,在计算待聚类的文本与作为簇心的文本之间的距离时,需要分别从待聚类的文本 和作为簇心的文本中提取特征词,然后比对两个文本的特征词的相似度,以此来计算二者之 间的距离。在这些特征词中,有的特征词与该文本实际表达的主题相关度较低或者完全无关。 如果在两个文本各自提取的特征词中,与主题无关或相关度较低的特征词的重叠比例高,与 主题密切相关的特征词的比例很低,则可以认为这两个文本的特征交叉严重。在进行聚类时, 对于两个主题不同但特征交叉严重的文本,用户期望将这两个文本聚类到不同的类簇中,而 计算机很可能由于这两个文本的特征词重叠比例高而将这两个文本聚类到同一个类簇中,也 就是把一个待聚类的文本添加到另一个作为簇心的文本所对应的类簇中,因此降低了聚类精 度,导致整体聚类效果不理想。
在本实施例的聚类方法中,由于每一个第二约束规则的子规则包括至少一个互斥词袋, 每一个互斥词袋包括至少一个预设的第二关键词,可以将第二关键词预先设置为类簇的主题 密切相关的词,以使第二关键词组成的互斥词袋能够体现类簇的主题。当面对文本特征交叉 严重的问题时,首先利用第二约束规则预处理,可以确定作为簇心的文本,以及用户明确期 望与该簇心聚类在不同类簇中的文本。然后在对待聚类文本集中的文本进行归类时,如果某 个文本包含于与某个簇心对应的类簇互斥集合,则在计算该文本与簇心的距离时,直接将该 簇心排除在外,只计算该文本与其他的簇心之间的距离,最后将该文本添加到与其距离最近 的簇心所对应的类簇中。通过这样的方式,一方面突出了用户关注的主题词,利用第二约束 规则排除用户不期望聚类到相同类簇中的文本;另一方面减少了在待聚类的文本归类过程中 需要参与计算的簇心的数量,从而减弱了与主题无关或相关度较低、但交叉严重的特征词对 聚类所造成的影响,进而提高了聚类精度。
对于待聚类的文本来说,其有可能满足“包含于x个类簇互斥集合中”的条件,也可能 满足“不包含于任何一个类簇互斥集合中或者包含于全部类簇互斥集合中”的条件。但是对 于某一个确定的待聚类的文本而言,其不能同时满足上述两个条件,因此,相应地只可以执 行步骤S400和步骤S500中的一个。而无论在步骤S400还是在步骤S500中,最后都需要文 本添加到与其距离最近的簇心所对应的类簇中。
在此基础上,可选地,请参考图2,在S400或S500中的将当前文本添加到与其距离最 近的簇心所对应的类簇中的步骤之后,还可以包括:
S700:如果当前文本包含于第二预处理集合的任一个子集合中,则将该第二预处理集合 的另一个子集合中的文本添加到与当前文本所属类簇的簇心对应的类簇互斥集合中。
在执行S700的步骤中,有可能出现一种情况,即,第二预处理集合的另一个子集合中的 全部文本或者部分文本已经存储在相应的类簇互斥集合中。此时,对于类簇互斥集合中已经 存有的文本,无需再重复添加,仅将类簇互斥集合中没有的文本添加进入即可。
此处仍然沿用本实施例步骤S300的实例,待聚类文本集中共有8个尚未归类的文本:文 本B、文本C、文本E、文本F、文本G、文本I、文本J、文本L。以下依次将8个文本归入 3个类簇中。
(1)判断文本B是否包含于表3的类簇互斥集合中,判断结果是文本B不包含于任何一 个类簇互斥集合中,则分别计算文本B与三个簇心之间的距离。假设文本B与簇心1“文本A” 的距离最近,则将文本B添加到类簇1中。
文本B所属类簇1的簇心为簇心1“文本A”,簇心1对应类簇互斥集合1。由于文本B不包含于任一个第二预处理集合中,因此接下来对下一个尚未归类的文本进行归类。
(2)判断文本C是否包含于表3的类簇互斥集合中,判断结果是文本C不包含于任何一 个类簇互斥集合中,则分别计算文本C与三个簇心之间的距离。假设文本C与簇心2“文本D” 的距离最近,则将文本C添加到类簇2中。
文本C所属类簇2的簇心为簇心2“文本D”,簇心2对应类簇互斥集合2。文本C包含于第二预处理集合2的子集合2-1中,子集合2-2包括文本F、文本G均已经包含在表3的 类簇互斥集合2中,因此不再重复将文本F、文本G添加到类簇互斥集合2中。至此本轮迭 代中类簇互斥集合的情况仍然如表3所示。
(3)判断文本E是否包含于表3的类簇互斥集合中,判断结果是文本E不包含于任何一 个类簇互斥集合中,则分别计算文本E与三个簇心之间的距离。假设文本E与簇心2“文本D” 的距离最近,则将文本E添加到类簇2中。
由于文本B不包含于任一个第二预处理集合中,因此接下来对下一个尚未归类的文本进 行归类。
(4)判断文本F是否包含于表3的类簇互斥集合中,判断结果是文本F包含于类簇互斥 集合2中,类簇互斥集合2对应的簇心2为文本D,因此,分别计算除簇心2“文本D”之外 的其他簇心,也就是簇心1和簇心3,与文本F之间的距离。假设文本F与簇心3“文本H” 的距离最近,则将文本F添加到类簇3中。
文本F所属类簇3的簇心为簇心3“文本H”,簇心3对应类簇互斥集合3。由于文本F包含于第二预处理集合2的子集合2-2中,子集合2-1包括文本C、文本D和文本I,因此将 文本C、文本D和文本I添加到类簇互斥集合3中。至此类簇互斥集合的情况如表9所示。
表9执行上述步骤之后类簇互斥集合情况的示例
簇心序号 |
簇心 |
类簇互斥集合序号 |
类簇互斥集合的文本 |
簇心1 |
文本A |
类簇互斥集合1 |
文本J |
簇心2 |
文本D |
类簇互斥集合2 |
文本F、文本G |
簇心3 |
文本H |
类簇互斥集合3 |
文本C、文本D、文本I |
(5)判断文本G是否包含于表9的类簇互斥集合中,判断结果是文本G包含于类簇互斥 集合2中,类簇互斥集合2对应的簇心2为文本D,因此,分别计算除簇心2“文本D”之外 的其他簇心,也就是簇心1和簇心3,与文本G之间的距离。假设文本G与簇心3“文本H” 的距离最近,则将文本G添加到类簇3中。
文本G所属类簇3的簇心为簇心3“文本H”,簇心3对应类簇互斥集合3。由于文本F包含于第二预处理集合2的子集合2-2中,而子集合2-1中的文本C、文本D和文本I均已 经添加到类簇互斥集合3中,故而不再重复将文本C、文本D和文本I添加到类簇互斥集合3 中。至此类簇互斥集合的情况仍然如表9所示。
(6)判断文本I是否包含于表9的类簇互斥集合中,判断结果是文本I包含于类簇互斥 集合3中,类簇互斥集合3对应的簇心3为文本H,因此,分别计算除簇心3“文本H”之外 的其他簇心,也就是簇心1和簇心2,与文本I之间的距离。假设文本I与簇心1“文本A” 的距离最近,则将文本I添加到类簇1中。
文本I所属类簇3的簇心为簇心1“文本A”,簇心1对应类簇互斥集合1。由于文本I包含于第二预处理集合2的子集合2-1中,因此将子集合2-2中的文本F、文本G添加到类 簇互斥集合1中。至此类簇互斥集合的情况仍然如表10所示。
表10执行上述步骤之后类簇互斥集合情况的示例
簇心序号 |
簇心 |
类簇互斥集合序号 |
类簇互斥集合的文本 |
簇心1 |
文本A |
类簇互斥集合1 |
文本J、文本F、文本G |
簇心2 |
文本D |
类簇互斥集合2 |
文本F、文本G |
簇心3 |
文本H |
类簇互斥集合3 |
文本C、文本D、文本I |
(7)判断文本J是否包含于表10的类簇互斥集合中,判断结果是文本J包含于类簇互 斥集合1中,类簇互斥集合1对应的簇心1为文本A,因此,分别计算除簇心1“文本A”之 外的其他簇心,也就是簇心2和簇心3,与文本J之间的距离。假设文本J与簇心3“文本H” 的距离最近,则将文本J添加到类簇3中。
文本J所属类簇3的簇心为簇心3“文本H”,簇心3对应类簇互斥集合3。由于文本J包含于第二预处理集合1的子集合1-2中,而子集合11-1中的文本A添加到类簇互斥集合3中。至此类簇互斥集合的情况仍然如表11所示。
表11执行上述步骤之后类簇互斥集合情况的示例
簇心序号 |
簇心 |
类簇互斥集合序号 |
类簇互斥集合的文本 |
簇心1 |
文本A |
类簇互斥集合1 |
文本J、文本F、文本G |
簇心2 |
文本D |
类簇互斥集合2 |
文本F、文本G |
簇心3 |
文本H |
类簇互斥集合3 |
文本C、文本D、文本I、文本A |
(8)判断文本L是否包含于表11的类簇互斥集合中,判断结果是文本L不包含于任何 一个类簇互斥集合中,则分别计算文本L与三个簇心之间的距离。假设文本L与簇心3“文本H”的距离最近,则将文本L添加到类簇3中。
由于文本L是待聚类文本集中最后一个文本,至此,待聚类文本集中所有的文本都已经 被聚类到相应的类簇中,结果同表4。
将上述实例与S300和S400的步骤下的实例相比较,可见,在遍历待聚类文本集中尚未 归类的文本并将这些文本归类的过程中,利用在先归类的文本以及第二预处理集合不断更新 类簇互斥集合,可以减少在后归类的文本在归类时参与计算的簇心数量,从而进一步降低聚 类的计算复杂度。例如,在上述的例子中,将文本F归类到类簇3中之后,将子集合2-1中 的文本添加到类簇互斥集合中,从而使得在后续对文本I进行归类时,无需计算文本I与所 有簇心的距离,只需要计算文本I与簇心1和簇心2的距离,然后将文本I归类到与其距离 最近的簇心对应的类簇中即可,进而进一步降低了聚类的计算复杂度。
请参考图3,在本申请的第二个实施例中,提供一种内置约束规则的k-means文本聚类 方法,包括S100、S801、S200、S300、S802、S400、S500和S600的步骤。
S100:利用第二约束规则预处理待聚类文本集,得到与所述第二约束规则对应的第二预 处理集合,所述第二约束规则包括两个子规则,符合其中一个子规则的文本与符合另一个子 规则的文本必须聚类到不同的类簇中,所述第二预处理集合包括两个子集合,每一个所述子 集合包括符合一个对应的子规则的文本。
步骤S100可以参考第一个实施例中相关的描述,此处不再赘述。
S801:利用第一约束规则预处理待聚类文本集,得到与所述第一约束规则对应的第一预 处理集合,符合所述第一约束规则的文本必须聚类到相同的类簇中,所述第一预处理集合包 括符合对应的第一约束规则的文本。
此处S801的步骤可以在S100的步骤之前,也可以在S100的步骤之后,本申请对此不做 限定。
在S801的步骤中,第一约束规则是指符合该规则的文本必须聚类到相同的类簇中的预设 规则。例如,有两个文本A和B都符合某一条第一约束规则,则在对包括A和B的待聚类文 本集进行聚类时,就需将A和B聚类到同一个类簇中。这里将待聚类文本集中符合不同的第 一约束规则的文本划堆,并存储在第一预处理集合中。
具体地,在第一约束规则的其中一种实现方式中,每一个第一约束规则包括至少一个聚 合词袋,每一个聚合词袋包括至少一个预设的第一关键词,当同一个聚合词袋中的第一关键 词的数量≥2个时,所述聚合词袋还包括第一关键词之间的逻辑“与”的关系。当某个文本 包括某个第一约束规则中的任一个聚合词袋时,则该文本符合该第一约束规则。
表12给出了第一约束规则的一个示例,在表12中“+”表示逻辑“与”的关系。以表12的约束规则为例,如果文本A包括聚合词袋1,也就是文本A中同时包括第一关键词1、 第一关键词2和第一关键词3,则文本A符合第一约束规则1。如果文本B包括聚合词袋3, 也就是文本B同时包括第一关键词6和第一关键词7,则文本B也符合第一约束规则1。由于 文本A和文本B都符合第一约束规则1,则在对包括文本A和文本B的待聚类文本集进行聚 类时,将文本A和文本B聚类到同一个类簇中。
表12第一约束规则的一种实现方式的示例
上述的每一个第一关键词都可以是一个明确的词,例如“办卡”、“办理***”等。在 不同的应用场景中,第一约束规则的聚合词袋中的第一关键词可以是与用户期望得到的类簇 的主题密切相关的词,以使第一关键词组成的聚合词袋能够体现类簇的主题。
例如,对于银行***部客户服务工单文本构成的文本集,用户预期对该文本集进行聚 类后得到的每个类簇都能够体现不同的主题,如“办卡问题”、“账务问题”、“资料录入错误”、 “工作人员业务不熟练”等,以便后续按不同的主题分别进行处理。为此,假设第一约束规 则1中的各个聚类词袋中的第一关键词能够体现“办卡问题”,则第一关键词1可以是“办卡”, 第一关键词2可以是“至今没有”,第一关键词3可以是“审批通过”,则聚合词袋1为“办 卡+至今没有+审批通过”,该聚合词袋体现了“办卡问题”这个类簇的主题。除了聚合词袋1, 还可以设置聚合词袋2、聚合词袋3等其他聚合词袋,用以体现“办卡问题”这个类簇的主 题。类似的,第一约束规则2中的各个聚合词袋则可以体现“账务问题”这个类簇的主题; 第一约束规则3中的各个聚合词袋则可以体现“资料录入错误”这个类簇的主题。
进一步地,第一关键词还可以用正则表达式来表示,即每一个第一关键词可以包括若干 个子关键词以及子关键词之间的关联关系。这里的关联关系可以用正则表达式中的元字符来 表示。例如“+”表示逻辑“与”;“|”表示逻辑“或”;“()”表示多元取整;“*”表示匹配 前面的子表达式任意次;“?”表示匹配前面的子表达式零次或一次;“(.*)?”表示最短匹配, 即匹配到“(.*)?”后面的限定字符就结束匹配。
举例来说,表1中的第一关键词1,可以表示为一个正则表达式“(办|办理|申办|申请)(.*)?卡”。其中,“办”、“办理”、“申办”、“申请”、“卡”均为子关键词,“()”、“|”、“(.*)?”为元字符。如果某个文本中包括“办”、“办理”、“申办”、“申请”这4个子关键词 中的任意一个,并且在其后匹配到关键词“卡”,则该正则表达式能够匹配上该文本。也就是 说,该文本中包括第一关键词1。
此处的第一关键词与前述的第二关键词可以相同,也可以不同,用户可以根据关注的关 键词的不同或者应用场景的不同来进行调整,本申请对此不做限制。
待聚类文本集包括至少2个待聚类的文本。在利用第一约束规则预处理待聚类文本集时, 将待聚类文本集中符合第一约束规则的文本存储到相应的第一预处理集合中,用于后续步骤。 待聚类文本集中的部分文本可能不符合任意一条第一约束规则,这些文本则不会被存储到第 一预处理集合中。
当本申请实施例的k-means文本聚类方法中存在m条第一约束规则的时候,利用第一约 束规则预处理待聚类文本集,相应地得到m个第一预处理集合,其中,m为≥1的正整数。
以下通过另一个实例来进一步说明S801的步骤。假设待聚类文本集包括文本A、文本B、 文本C……文本H、文本I、文本J、文本L共11个文本。表13为本实例中,当存在3个第 一约束规则时,第一约束规则与第一预处理集合的对应关系。其中,文本A、文本B都符合 第一约束规则1;文本C、文本D、文本E都符合第一约束规则2;文本F、文本G都符合第 一约束规则3。
表13第一预处理集合的示例
约束规则 |
预处理集合 |
文本 |
第一约束规则1 |
第一预处理集合1(Must-set1) |
文本A,文本B |
第一约束规则2 |
第一预处理集合2(Must-set2) |
文本C,文本D,文本E |
第一约束规则3 |
第一预处理集合3(Must-set3) |
文本F,文本G |
S200:获取所述待聚类文本集中的k个文本作为簇心,k<N,N为待聚类文本集中文本 的总数量。
S300:如果簇心包含于第二预处理集合的任一个子集合中,则将该第二预处理集合的另 一个子集合中的文本添加到与该簇心对应的类簇互斥集合中。
步骤S200和S300可以参考第一个实施例中相关的描述,此处不再赘述。沿用S100中的 例子,并且S200-S300的步骤采用与第一个实施例步骤S300的例子相同的操作,则可以得到 与第一个实施例中表3示出的相同的结果。
S802:如果簇心包含于第一预处理集合中,则将该第一预处理集合中除该簇心外的其余 文本添加到与簇心对应的类簇中,清除所述待聚类文本集中已经添加到类簇中的文本。
在S802的步骤中,可以依次遍历所有簇心,对于每一个簇心,如果该簇心包含于第一预 处理集合中,将与该簇心属于同一个第一预处理集合中的其余文本添加到与该簇心对应的类 簇中,然后清除待聚类文本集中已经添加到类簇中的文本。如果该簇心不包含于任何一个第 一预处理集合中,则对下一个簇心进行处理,直到所有簇心都处理完毕。
需要说明的是,S402的步骤和S300的步骤顺序可以交换,本申请对二者的先后顺序不 做限定。由于S403的步骤和S300的步骤都需要遍历簇心,因此,在一种实现方式中,可以 只对簇心进行一次遍历,例如,针对每一个簇心,可以先判断该簇心是否包含于第二预处理 集合的任一个子集合中,如果是,则将该第二预处理集合的另一个子集合中的文本添加到与 该簇心对应的类簇互斥集合中;再判断该簇心是否包含于第一预处理集合中,如果是,则将 该第一预处理集合中除该簇心外的其余文本添加到与簇心对应的类簇中,清除所述待聚类文 本集中已经添加到类簇中的文本。直到所有簇心遍历完毕,然后进行后续的S400和S500的 步骤。
沿用本实施例中前述S801的步骤中的实例,假设S200的步骤获取3个文本作为簇心, 分别是:文本A、文本D和文本H,则此时待聚类文本集中尚未归类的文本共有8个:文本B、 文本C、文本E、文本F、文本G、文本I、文本J、文本L。
在执行了S802的步骤之后,可以得到表14示出的结果。具体来说,首先针对类簇1的 簇心——文本A,由于文本A包含于第一预处理集合1中,因此将文本B添加到类簇1中。然后针对下一个簇心——文本D,由于文本D包含于第一预处理集合2中,因此将文本C和 文本E添加到类簇2中。最后针对下一个簇心——文本H,由于文本H不包含于任何一个第 一预处理集合中,因此,此时类簇3中除文本H之外尚没有其他文本。
表14S802的步骤之后类簇情况的示例
类簇序号 |
簇心 |
类簇中的其余文本 |
类簇1 |
文本A |
文本B |
类簇2 |
文本D |
文本C、文本E |
类簇3 |
文本H |
—— |
在S802的步骤之前,待聚类文本集包括8个尚未归类的文本。在将第一预处理集合中除 该簇心外的其余文本添加到与簇心对应的类簇中的步骤之后,清除待聚类文本集中已经添加 到类簇中的文本,也就是清除文本B、文本C和文本E。此时,待聚类文本集中还剩下5个尚 未归类的文本:文本F、文本G、文本I、文本J、文本L。
S400:如果待聚类文本集中的当前文本包含于x个类簇互斥集合中,则计算除类簇互斥 集合所对应的簇心以外其他(k-x)个簇心与当前文本的距离,将当前文本添加到与其距离最 近的簇心所对应的类簇中,其中,0<x<k;
S500:如果待聚类文本集中的当前文本不包含于任何一个类簇互斥集合中,或者当前文 本包含于全部类簇互斥集合中,则计算所有簇心与当前文本的距离,将当前文本添加到与其 距离最近的簇心所对应的类簇中。
S600:重新计算每个类簇的新的簇心,如果新的簇心满足预设的停止条件,则输出全部 类簇。
步骤S400至S600的步骤可以参考第一个实施例中相关的描述,此处不再赘述。
S600的步骤中,如果新的簇心不满足预设的停止条件,则重置待聚类文本集,重置类簇 互斥集合,以新的簇心为簇心,重复执行前述的S300、S802、S400和S500的步骤,然后再 重新计算每个类簇的新的簇心。这里每一次重复S300、S802、S400和S500的步骤,以及计算每个类簇的新的簇心的过程,累记一次迭代过程。直到新的簇心满足预设的停止条件,则输出全部类簇。
以下沿用本实施例中前述S802的步骤中的实例来进一步说明。此时待聚类文本集中还剩 下5个尚未归类的文本:文本F、文本G、文本I、文本J、文本L。
(1)判断文本F是否包含于表3的类簇互斥集合中,判断结果是文本F包含于类簇互斥 集合2中,类簇互斥集合2对应的簇心2为文本D,因此,分别计算除簇心2“文本D”之外 的其他簇心,也就是簇心1和簇心3,与文本F之间的距离。假设文本F与簇心3“文本H” 的距离最近,则将文本F添加到类簇3中。
(2)判断文本G是否包含于表3的类簇互斥集合中,判断结果是文本G包含于类簇互斥 集合2中,类簇互斥集合2对应的簇心2为文本D,因此,分别计算除簇心2“文本D”之外 的其他簇心,也就是簇心1和簇心3,与文本G之间的距离。假设文本G与簇心3“文本H” 的距离最近,则将文本G添加到类簇3中。
(3)判断文本I是否包含于表3的类簇互斥集合中,判断结果是文本I不包含于任何一 个类簇互斥集合中,则分别计算文本I与三个簇心之间的距离。假设文本I与簇心1“文本A” 的距离最近,则将文本I添加到类簇1中。
(4)判断文本J是否包含于表3的类簇互斥集合中,判断结果是文本J包含于类簇互斥 集合1中,类簇互斥集合1对应的簇心1为文本A,因此,分别计算除簇心1“文本A”之外 的其他簇心,也就是簇心2和簇心3,与文本J之间的距离。假设文本J与簇心3“文本H” 的距离最近,则将文本J添加到类簇3中。
(5)判断文本L是否包含于表3的类簇互斥集合中,判断结果是文本L不包含于任何一 个类簇互斥集合中,则分别计算文本L与三个簇心之间的距离。假设文本L与簇心3“文本H” 的距离最近,则将文本L添加到类簇3中。
至此,待聚类文本集中所有的文本都已经被聚类到相应的类簇中,结果同表4。
经过一次迭代之后,假设重新计算每个类簇的新的簇心,分别为:类簇1——文本B,类 簇2——文本C,类簇3——文本J。
若经过计算,类簇1的原簇心文本A与新的簇心文本B之间的距离小于预设阈值,类簇 2的原簇心文本D与新的簇心文本C之间的距离小于预设阈值,并且类簇3的原簇心文本H与新的簇心文本J之间的距离小于预设阈值,则此时新的簇心满足停止条件,输出全部类簇, 结果同表5。
在本实施例的聚类方法中,首先分别利用内置于k-means聚类方法中的第一约束规则和 第二约束规则预处理待聚类文本集,得到第一预处理集合和第二预处理集合。然后利用第一 预处理集合,将待聚类文本集中与簇心共同符合第一约束规则的文本先进行归类。这样,已 经归类到类簇中的文本就不再需要一一计算与每一个簇心的距离,从而降低了计算的复杂度。 接着,对于待聚类文本中剩余的尚未归类的每一个文本,再判断该文本是否包含于类簇互斥 集合中,以此来排除需要计算与文本之间的距离的簇心,从而减少了归类时需要参与计算的 簇心的数量,进而进一步降低了文本聚类的计算复杂度。尤其是对于待聚类文本集中的文本 数量大、聚类的类簇多的情况,采用本申请的内置约束规则的k-means聚类方法可以显著地 降低计算复杂度。
可选地,请参考图4,在S400或S500中的将当前文本添加到与其距离最近的簇心所对 应的类簇中的步骤之后,还可以包括:
S803:如果当前文本包含于第一预处理集合中,则将该第一预处理集合中除当前文本外 的其余文本添加到当前文本所在的类簇中,清除所述待聚类文本集中已经添加到类簇中的文 本。
沿用前述S802的步骤中的实例来进一步说明。此时待聚类文本集中还剩下5个尚未归类 的文本:文本F、文本G、文本I、文本J、文本L。
(1)判断文本F是否包含于表3的类簇互斥集合中,判断结果是文本F包含于类簇互斥 集合2中,类簇互斥集合2对应的簇心2为文本D,因此,分别计算除簇心2“文本D”之外 的其他簇心,也就是簇心1和簇心3,与文本F之间的距离。假设文本F与簇心3“文本H” 的距离最近,则将文本F添加到类簇3中。
由于文本F包括在表13所示的第一预处理集合3中,则将第一预处理集合3中除文本F 之外的其余文本,也就是文本G,添加到类簇3中,然后清除待聚类文本集中的文本G。
至此,待聚类文本集中还剩下3个尚未归类的文本:文本I、文本J、文本L。
(2)判断文本I是否包含于表3的类簇互斥集合中,判断结果是文本I不包含于任何一 个类簇互斥集合中,则分别计算文本I与三个簇心之间的距离。假设文本I与簇心1“文本A” 的距离最近,则将文本I添加到类簇1中。
(3)判断文本J是否包含于表3的类簇互斥集合中,判断结果是文本J包含于类簇互斥 集合1中,类簇互斥集合1对应的簇心1为文本A,因此,分别计算除簇心1“文本A”之外 的其他簇心,也就是簇心2和簇心3,与文本J之间的距离。假设文本J与簇心3“文本H” 的距离最近,则将文本J添加到类簇3中。
(4)判断文本L是否包含于表3的类簇互斥集合中,判断结果是文本L不包含于任何一 个类簇互斥集合中,则分别计算文本L与三个簇心之间的距离。假设文本L与簇心3“文本H” 的距离最近,则将文本L添加到类簇3中。
至此,待聚类文本集中所有的文本都已经被聚类到相应的类簇中,结果同表4。
通过上述的例子可以发现,通过增加S803的步骤,在文本F已经添加到类簇3中以后, 由于文本G与文本F都处于第一预处理集合3中,也就是都符合第一约束规则3,故而将文 本F直接添加到类簇3中,省略了一一计算文本F与每一个簇心之间的距离的步骤,从而进 一步减少了需要一一计算与簇心之间的距离的待聚类的文本数量,进一步降低了文本聚类的 计算复杂度。
在本申请的第三个实施例中,提供一种内置约束规则的k-means文本聚类方法,该方法 将第一个实施例以及第二个实施例中的方法结合在一起,即包括:
S801:利用第一约束规则预处理待聚类文本集,得到与所述第一约束规则对应的第一预 处理集合,符合所述第一约束规则的文本必须聚类到相同的类簇中,所述第一预处理集合包 括符合对应的第一约束规则的文本。
S100:利用第二约束规则预处理待聚类文本集,得到与所述第二约束规则对应的第二预 处理集合,所述第二约束规则包括两个子规则,符合其中一个子规则的文本与符合另一个子 规则的文本必须聚类到不同的类簇中,所述第二预处理集合包括两个子集合,每一个所述子 集合包括符合一个对应的子规则的文本。
S200:获取所述待聚类文本集中的k个文本作为簇心,k<N,N为待聚类文本集中文本 的总数量。
遍历簇心,对每一个簇心分别判断该簇心是否包含于第二预处理集合的任一个子集合中, 以及判断该簇心是否包含于第一预处理集合中。如果满足执行S300和S802的条件,则执行 S300和S802的步骤。较佳地,S300的步骤在S802的步骤之前执行。
S300:如果簇心包含于第二预处理集合的任一个子集合中,则将该第二预处理集合的另 一个子集合中的文本添加到与该簇心对应的类簇互斥集合中。
S802:如果簇心包含于第一预处理集合中,则将该第一预处理集合中除该簇心外的其余 文本添加到与簇心对应的类簇中,清除所述待聚类文本集中已经添加到类簇中的文本。
遍历待聚类文本集中尚未归类的文本。对每一个文本,判断该文本是否包含于类簇互斥 集合中。如果包含于部分类簇互斥集合中,则执行S400的步骤;如果包含于全部类簇互斥集 合中,或者不包含于任何一个类簇互斥集合中,则执行S500的步骤。再判断当前文本是否包 含于第二预处理集合的任一个子集合中,如果是,则执行S700的步骤;判断当前文本是否包 含于第一预处理集合中,如果是,则执行S803的步骤。
S400:如果待聚类文本集中的当前文本包含于x个类簇互斥集合中,则计算除类簇互斥 集合所对应的簇心以外其他(k-x)个簇心与当前文本的距离,将当前文本添加到与其距离最 近的簇心所对应的类簇中,其中,0<x<k。
S500:如果待聚类文本集中的当前文本不包含于任何一个类簇互斥集合中,或者当前文 本包含于全部类簇互斥集合中,则计算所有簇心与当前文本的距离,将当前文本添加到与其 距离最近的簇心所对应的类簇中。
S700:如果当前文本包含于第二预处理集合的任一个子集合中,则将该第二预处理集合 的另一个子集合中的文本添加到与当前文本所属类簇的簇心对应的类簇互斥集合中。
S803:如果当前文本包含于第一预处理集合中,则将该第一预处理集合中除当前文本外 的其余文本添加到当前文本所在的类簇中,清除所述待聚类文本集中已经添加到类簇中的文 本。
通过S400和S500的步骤,将待聚类文本集中的文本都添加到与其距离最近的簇心所对 应的类簇中,完成了归类的过程。而通过S700和S803的步骤,在对待聚类文本集中后续的 文本进行归类时,减少了需要参与计算的簇心的数量,以及减少了需要参与计算的文本的数 量,从而降低文本聚类是计算的复杂度。
遍历完所有待聚类文本集中的文本,则所有的文本都归类完毕,然后执行S600的步骤。
S600:重新计算每个类簇的新的簇心,如果新的簇心满足预设的停止条件,则输出全部 类簇。
如果新的簇心不满足预设的停止条件,则重置待聚类文本集,重置类簇互斥集合使其为 空。然后以新的簇心为簇心,重复执行S300、S802、S400、S500、S700以及S803的步骤, 再重新计算每个类簇的新的簇心。这里每重复一次,就累记一次迭代过程。直到新的簇心满 足预设的停止条件,则输出全部类簇。
请参考图5,在本申请的第四个实施例中,提供一种内置约束规则的k-means文本聚类 装置,包括:
第二预处理单元3,用于利用第二约束规则预处理待聚类文本集,得到与所述第二约束 规则对应的第二预处理集合,其中,所述第二约束规则包括两个子规则,符合其中一个子规 则的文本与符合另一个子规则的文本必须聚类到不同的类簇中,所述第二预处理集合包括两 个子集合,每一个所述子集合包括符合一个对应的子规则的文本;可选地,所述第二约束规 则的子规则包括至少一个互斥词袋,所述互斥词袋包括至少一个预设的第二关键词,当同一 个互斥词袋中的第二关键词的数量≥2个时,所述互斥词袋还包括所述第二关键词之间的逻 辑与的关系。
聚类单元2,用于获取所述待聚类文本集中的k个文本作为簇心;在簇心包含于第二预 处理集合的任一个子集合中的情况下将该第二预处理集合的另一个子集合中的文本添加到与 该簇心对应的类簇互斥集合中;在待聚类文本集中的当前文本包含于x个类簇互斥集合中的 情况下计算除类簇互斥集合所对应的簇心以外其他(k-x)个簇心与当前文本的距离,将当前 文本添加到与其距离最近的簇心所对应的类簇中;在待聚类文本集中的当前文本不包含于任 何一个类簇互斥集合中,或者当前文本包含于全部类簇互斥集合中的情况下计算所有簇心与 当前文本的距离,将当前文本添加到与其距离最近的簇心所对应的类簇中;以及,重新计算 每个类簇的新的簇心,如果新的簇心满足预设的停止条件,则输出全部类簇。其中,k<N,N 为待聚类文本集中文本的总数量;0<x<k。
可选地,所述聚类单元2还用于在当前文本包含于第二预处理集合的任一个子集合中的 情况下将该第二预处理集合的另一个子集合中的文本添加到与当前文本所属类簇的簇心对应 的类簇互斥集合中。
可选地,上述内置约束规则的k-means文本聚类装置,还包括:
第一预处理单元1,用于利用第一约束规则预处理待聚类文本集,得到与所述第一约束 规则对应的第一预处理集合,其中,符合所述第一约束规则的文本必须聚类到相同的类簇中, 所述第一预处理集合包括符合对应的第一约束规则的文本;可选地,所述第一约束规则包括 至少一个聚合词袋,所述聚合词袋包括至少一个预设的第一关键词,当同一个聚合词袋中的 第一关键词的数量≥2个时,所述聚合词袋还包括第一关键词之间的逻辑与的关系。
所述聚合单元2还用于在簇心包含于第一预处理集合中的情况下将该第一预处理集合中 除该簇心外的其余文本添加到与簇心对应的类簇中,清除所述待聚类文本集中已经添加到类 簇中的文本。
可选地,所述聚合单元2还用于在当前文本包含于第一预处理集合中的情况下将该第一 预处理集合中除当前文本外的其余文本添加到当前文本所在的类簇中,清除所述待聚类文本 集中已经添加到类簇中的文本。
本说明书中各个实施例之间相同相似的部分互相参见即可。以上所述的本发明实施方式 并不构成对本发明保护范围的限定。