应用DBSCAN实现新闻文本聚类

注:这篇技术文章是9月我就职于W公司时在完成新闻聚类后整理的技术文档,因数据管控严格,文档中的聚类结果无法从公司电脑上复制,也无法发送邮件到自己邮箱中。2017.10.27

文本聚类

目  录

1 聚类概述 

2 不同文本间相似性的度量 

  2.1 杰卡德系数(JACCARD COEFFICIENT) 

3 文本分词 

4 文本聚类算法 

  4.1 DBSCAN算法的基本定义 

  4.2 DBSCAN算法 

5 文本聚类实现 

  5.1 聚类结果 

6 参考文献 


1 聚类概述

作为一种数据挖掘技术,聚类可将被聚类对象从无序状态实现聚集。被聚类的对象包括物理或抽象对象,按照特定或非特定的属性分为一组,根据对象间在属性上的相似性完成分类。分为同一组的对象有相似性,不同组间的对象有很大相异性。与分类不同,聚类所要划分的类是事先未知的。


2 不同文本间相似性的度量

常见的相似性的测量方式包括欧式距离、马氏距离、曼哈顿距离、夹角余弦、杰卡德相似系数/距离等。新闻和报告的文本特点是不同题材文本之间含有大量不同的词汇。这个特点决定了文本相似性适合由杰卡德相似系数/距离来度量。

2.1 杰卡德系数(Jaccard coefficient)

给定了两个集合A, B,杰卡德系数定义为A与B交集的大小与A与B并集的大小的比值,定义表达式如下

当集合A, B都为空时,J(A, B)定义为1.

与杰卡德系数相关的指标叫做杰卡德距离,用于描述集合间的不相似度

其中 .

在文本聚类中应用杰卡德系数测量距离时,首先将文本转化成n维布尔向量,即所有维度的取值为0或1,比如某文本A的布尔向量是(0,1,0,1,0,……1),某文本B的布尔向量是(0,0,1,0,0,……0).向量的每个维度对应了一个词,1表示集合中包含该词,即向量中1对应位置的词出现在文本中,0表示集合不包含该元素。

定义如下指标:

p: 文本A和B相对应的位置都是1的维度的个数;

q: 在文本A的值是1,文本B的值是0的维度个数;

r: 文本A的值是0,文本B的值是1的维度个数;

s: 文本A和B相对应的位置都是0的维度的个数。

p, q, r, s表示的是由向量代表的词是否在文本中出现及各自出现次数。仅考虑向量对应的词库,在两篇文章中均出现的词的数目为p,只在A中出现不在B中出现的数目是q,只在B中出现不在A中出现的数目是r,不在两篇文章中出现的数目是s。


3 文本分词

进行文本聚类前需要对中文文本进行分词操作。分词操作后得到每个文本的分词向量,删除重复词,并与另一文本分词向量计算杰卡德系数。实例如下:

A:美国国家经济顾问科恩:特朗普总统100%承诺将在今年完成税改。

B: 美国白宫发言人:总统特朗普感谢俄罗斯总统普京驱离美国外交官时是在“挖苦”俄罗斯。

A的分词向量是['美国', '国家', '经济', '顾问', '科恩', '特朗普', '总统', '100%', 承诺', '将', '在', '今年', '完成', '税改'],B的分词向量是['美国白宫', '发言人', '总统','特朗普', '感谢', '俄罗斯', '普京', '驱离', '美国', '外交官', '时', '是', '在', '挖苦']。分词的实现过程中删除经常出现的标点符号如逗号(,)句号(。)引号(“”)感叹号(:),并适当选取停止词(stopwords),在分词后滤出,以清理分词结果,用于计算相似性。

仍然以上文为例,A和B中共有的词共3个('美国','总统','特朗普'),p = 3,A中有而B中没有的词共11个('国家', '经济', '顾问', '科恩', '100%', 承诺', '将', '在', '今年', '完成', '税改'),q = 11,A中没有而B中有的词共11个('美国白宫', '发言人', '感谢', '俄罗斯', '普京', '驱离', '外交官', '时', '是', '在', '挖苦'),r = 11。由此计算出两个文本的杰卡德系数为


4 文本聚类算法

常见的聚类算法分为以下若干类别,划分法、层次法、基于密度的方法、基于网格的方法和基于模型的方法。被数据科学家广泛采用的无监督的K-means方法(划分法)的劣势在于在对未知数据进行聚类时需要指定所分成簇的个数K,应用于文本聚类中会导致聚类错误。本项目采用的聚类方法是基于密度的DBSCAN(Density-based spatial clustering of application with noise)。该方法是一种基于密度的聚类算法,假定类别可以通过样本分布的紧密程度决定,同一类别的样本之间紧密相连,即在该类任意样本周围不远处一定有同类别的样本存在。通过紧密项相连的样本被划为一类,就得到了一个聚类的类别,通过将各组紧密相连的样本划到不同的类别,即实现了最终聚类的效果。下面介绍DBSCAN算法的细节。

4.1 DBSCAN算法的基本定义

核心点:一个点p是个核心点,如果距离它ε范围之内的其他点个数不低于minPts个。

可到达点:在核心点p的ε范围内的点被称作由核心点直接抵达,或可到达点。可到达点可通过与其相邻的核心点,到达距离超过ε的核心点。

异类点(outliers):不能达到核心点的点即为异类点。

簇(cluster):簇由核心点形成,以核心点为中心,每个簇至少包含一个核心点,相连的核心点形成簇,非核心点可以成为簇的一部分。

如图所示,红色点即为核心点,黑色点中处在红点ε范围内的为可到达点,其他黑色点为异类点。彼此距离不大于ε的核心点构成一个簇,图示中含有两个簇。

图1 核心点、可到达点、异类点和簇的示意图


4.2 DBSCAN算法

DBSCAN算法中有两个重要参数:距离ε和形成簇的最小点数minPts。

聚类从随机节点开始,保证每个节点被访问一次且仅访问一次。对每个节点,计算其范围ε内节点的个数。如果节点个数超过预定的点数minPts,则该节点被标记为核心点,否则被标记为噪音点。

核心点和其范围ε内的点形成簇。查找簇的过程在访问所有点一遍之后完成。

DBSCAN算法描述如下:

While 数据库中存在未被处理的点

{从数据库中抽取一个未被处理的点

If 抽出的点周围ε范围内的点个数>= minPts

抽出的点 = 核心点

Else

抽出的点 = 噪音点

If 抽出的点 = = 核心点

找出所有密度可达的周边的点,形成一个簇

Else

抽出的点 = 边缘点

continue

}


5 文本聚类实现

本项目中的文本聚类算法用Python语言实现(IDE: Spyder),分词使用jieba分词包。前期试验从大数据平台选用了过往任意七天的带有摘要的新闻数据,共4769条,在经过数据预处理之后根据新闻摘要进行聚类。

在分词过程中中文常见标点符号不在结果中保留。一些常见的停止词(stopwords)也被排除在结果中,比如“的”,“月”,“日”,“了”。

在实现过程中对所有新闻任意两两计算杰卡德系数,并保存于杰卡德系数矩阵中(4769*4769)。比较每条新闻的杰卡德系数与范围ε的大小并计算拥有系数大于ε的周围节点数目minPts,即可判断该条新闻是否能够成为核心点,是否有簇形成。

本测试中ε=0.14,minPts = 15。


5.1 聚类结果

下图2(略)是没有经过聚类的新闻事件,图3(略)是经过DBSCAN算法聚类得到的若干结果。这里只给出算法结果的示意图。更多测试和准确性度量将在后续工作中完成。

图略。

调整参数后可得到不同的聚类结果。调整ε,增大ε则聚类结果中新闻的相关性增高;调整minPts,增大minPts则聚类结果只保留新闻多的类。


6 参考文献

[1] DBSCAN on Wikipedia, https://en.wikipedia.org/wiki/Dbscan

[2] 数据挖掘导论(英文版),Pang-Ning Tan/Michael Steinbach/Vipin Kumar,机械工业出版社,2010

[3] 百度百科: DBSCAN, https://baike.baidu.com/item/DBSCAN/4864716?fr=aladdin

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容

  • 1. 章节主要内容 “聚类”(clustering)算法是“无监督学习”算法中研究最多、应用最广的算法,它试图将数...
    闪电随笔阅读 5,032评论 1 24
  • 写在之前 因简书导入公式很麻烦,如果想获得更好的观看体验请移步https://www.zybuluo.com/ha...
    hainingwyx阅读 6,827评论 2 13
  • 聚类 聚类就是对大量未知标注的数据集,按数据 的内在相似性将数据集划分为多个类别,使 类别内的数据相似度较大而类别...
    寒夏凉秋阅读 1,944评论 0 3
  • 概述及标签体系搭建 1 概述 随着信息技术的迅速发展和信息内容的日益增长,“信息过载”问题愈来愈严重,愈发带来很大...
    JinkeyAI阅读 22,771评论 10 241
  • 注册接口 1.接口地址:2.支持格式:json3.请求方式:post 请求参数: | Tables ...
    君恪阅读 422评论 0 50