本文由竹间智能科技(Emotibot)出品,作者为数据分析师童旭平。
Emotibot致力于打造中国首款人工智能伴侣,以情感计算研究为核心,深度学习等尖端技术为基础,满足广大用户的日常生活和工作所需。
如需转载,请联系Emotibot情感机器人微信公众号(Emotibot_tech),并注明出处。
前言
生活中,我们经常在与人聊天时根据聊天内容的类型分类来判断出这个人的性格;当我们读一篇文章时,可以轻松的将其中的句子分为特定的类别。
但是在大数据中,接收到的对话却不只是一两条,而是千万级别甚至更多的对话数量,面对海量的句子或者比较模糊的语句时,我们又该怎么快速判断这句话应该属于哪一类呢?
当我们不知道该怎么将这些语句进行分类时,我们可以使用一种统计学方法——聚类分析。
什么是聚类分析?
聚类分析(Cluster Analysis)是根据“物以类聚”的道理,将数据集分组为由相似的对象组成的多个类的分析过程。
有差吗?
——聚类和分类的区别
你可能会很疑惑,这个聚类和分类又有什么区别呢?它们的区别在于聚类所要求划分的类是未知的。比如我们一看初中课本内容,就知道该课应该是属于哪个学科,这是分类;当面对一堆复杂数据的时候,我们没有事先定义应该划分的类别而去归类,则属于聚类。
聚类分析该如何应用?
在商业上,通过聚类来发现不同的客户群,并刻画不同客户群的特征;
在生物上,通过聚类来对动植物和其基因进行分类;
在电商上,聚类能够根据用户的地理位置、购买记录等进行更多真实的需求类型;
在保险行业上,聚类通过一个高的平均消费来鉴定汽车保险单持有者的分组,同时根据住宅类型,价值,地理位置来鉴定一个城市的房产分组。
在大数据时代,聚类分析虽然应用的很广,但是解决的基本都是数值信息,那语言该怎么靠数学、统计学的方法来聚类呢?这就要靠一种自然语言处理的一个文本深度表示模型——word2vec了。word2vec是一种将词语变成向量的工具,后续Emotibot会有对这个模型的详细介绍,请持续关注!
聚类分析算法
传统的聚类算法可以被分为五类:划分方法、层次方法、基于密度方法、基于网格方法和基于模型方法,方法各有各的长处,今天介绍的是最为经典的算法——K-means聚类(K-means clustering) 。
K-means算法是基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为聚得的同类内容是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。
K-means算法过程
1)从数据中随机选取K个数据作为质心
2)对剩余的每个数据测量其到每个质心的距离,并把它归到最近的质心的类
3)重新计算已经得到的各个类的质心
4)迭代2~3步直至新的质心与原质心相等或小于指定阈值,算法结束
聚类分析中的计算方法
1. 两点间的距离计算
计算两点间距离有多种方法,我们可以用中学学过的方法——欧氏距离(Euclidean distance):
2. k值的估计
我们先将数据分为k个组,首先需要定义k合适的值。
推荐的方法为采用平均直径法来进行 k 的估计。我们从k=2开始(k=3,4,5…),找出该K值所获得的组内平均直径。
若我们猜想的 K 值大于或等于真实的 K 值,也就是簇的真实数目,那么该指标的上升趋势会很缓慢,但是如果我们给出的 K 值小于真实的簇的数目时,这个指标一定会急剧上升。
3. 具体实现方法
统计相关的软件,如R、SAS、MATLAB、Python等都有相对应的函数package,实现很方便。
聚类分析在对话中的应用
说了这么多,我们也用聚类分析实际在我们的对话中进行聚类,从知乎、豆瓣、微博中爬取了2688句话。
我们利用word2vec将这些话转换为300维度向量,然后进行了降维到2维(利用pca或t-SNE进行降维,暂不多做介绍),获得了(x,y)坐标组。如下图所示:
这次对向量文字结果进行的是K-means聚类分析,利用平均直径法分析发现2688句话可分为13个cluster。
聚类分析有趣的地方是,我们完全不知道分得的这13个类具体名称叫什么,而是利用“人类易懂”的类别名称对这13个类进行了总结归纳,赋予它们真正的意义,其中部分结果示例如下:
小结
介绍完了比较经典的案例后,是不是也觉得聚类分析很有趣呢?
聚类后的数据无法用合适的语言表达出所分的类别名称,却发现这些语句聚在一起确实有道理,有一种发现新世界的感觉。
是不是突然想去实验呢?那就快去行动吧!
Emotibot最新产品体验:
在各大应用市场均可下载小影机器人APP
或微信搜索:小影机器人公众号
即可体验小影机器人
Emotibot 最新技术API开放平台:
http://www.emotibot.com/web/APILogin.html