最近看了LDA以及文本聚类的一些方法,写在这里算是读书笔记。文章最后进行了一个小实验,通过爬取本人在微博上关注的人的微博,利用微博的内容,尝试将我关注的人按主题进行进行聚类。
文本聚类就是把一个文本集分成一定数量的簇(Cluster),使每个簇内的文本之间具有较大的相似性,而使簇间的文本具有较大的差异性。传统的文本聚类方法一般基于向量空间模型(vector space model): 在对文本集中的每个文本进行预处理(分词、停用词过滤等)、特征选择和权重计算之后,将文档集表示成一个高纬、稀疏的文档-词矩阵,进而使用K-Means、凝聚的层次聚类、DBSCAN等聚类方法对文档进行聚类。
在特征选择选择环节,虽然一些高效的特征选择方法,例如互信息MI(Mutual Information)、x2统计量等已经非常成功地应用于文本分类,但由于它们需要每个文档人工标记的类信息而无法应用于无监督的文本聚类。文本聚类里面一般选择无监督的特征选择方法,例如文档频数(整个数据集中有多少个文本包含这个单词)、单词权(认为一个词在相关的文本中出现得越多, 在不相关的文本中出现得越少就越为重要,需要计算每个文档对的相似度)等。
由于基于VSM 向量空间模型在文本聚类时存在的高维稀疏问题,以及不能从语义上理解文本之间的内在联系,另一种比较流行的方法就是通过主题模型来给文本建模,将文本表示成一个主题概率向量,这样能够充分的挖掘文本集合的主题信息。通过主题模型,原本是在高维的特征词空间上表示的文本,被转换在了低维的并且融入更多语义信息的主题空间上来表达,应该能提高文本聚类性能和效率,使得聚类的结果更加有效。
LDA(Latent Dirichlet Allocation)主题模型
LDA 是一个三层贝叶斯概率模型,包含词、主题和文档三层结构。整个文档集有K个主题,每个主题是固定词汇表上的一个多项式分布。这些主题被集合中的所有文档所共享,但每个文档有一个特定的主题分布。每个文档的主题分布θm从Dirichlet分布中抽样产生,每个主题的词分布φk也从Dirichlet分布中抽样产生,这两个Dirichlet分布相互独立,参数分别是α和β。(Dirichlet 分布可以理解为一个分布的分布,从Dirichlet 分布中抽个样取出的是一个分布)。
LDA的图模型表示:
首先从以β为参数的Dirichlet分布中,抽样产生整个文档集的K个词分布φk,即左侧的K个主题;
对于每一篇文档:
从以α为参数的Dirichlet分布中,抽样产生一个主题分布θm,即这篇文档中各个主题的比重,图中为右侧的直方图;
对于这篇文章中的每一个词:
以概率分布 φi,从该主题中选择一个词。
Gibbs 抽样容易实现并且能够有效地从大规模文集中抽取主题,是当前最流行的LDA 模型抽取算法。Gibbs 抽样并没有直接去计算主题-单词分布φk和文本上的主题分布θm,转而对每个位置上的词的主题进行迭代采样。一旦每个位置上的词的主题确定下来,那么φk和θm的值就可以在统计频次后计算出来。对每个位置上的词进行主题采样时,该词的主题以该词当时在各个主题上的概率分布采样获得。采样前需要计算该词属于每个主题的概率。
微博用户聚类实验:
(1)爬取我在微博上的关注的用户他们在之前一个月内发的微博。每个人的微博作为一个文本,得到大约500个文本;
(2)用IK Analyzer对每个文本进行切词,并同时过滤掉一些停用词;
(3)利用JGibbLDA将每个文本表示成一个主题向量,即该文本属于每个主题的概率,运行时指定了20个主题,进行了1000次迭代;
(4)使用scikit-learn里的K-Means进行聚类,指定的簇个数是20。
下面是聚类的一部分结果,可以看到一些内容账号的聚类效果还是可以的,主要是它们每天发博量比较大,而且博文的主题较明显。对于个人账号,往往发博量少而且主题分散。当然跟抓的量少也有关系。
(1) LOVE_湖人 湖人新闻动态 NikeBasketball 爱死科比论坛 CNTV体育台 科比演绎之路 于嘉 NBA 苏群
(2) SAP中国 创新工场微招聘 新浪校园招聘 IBM中国有限公司人才与招聘 Google中国校园招聘 IBM中国 IBM杭州分公司 IBM中国大学合作部 新浪招聘
(3) 百度校园 百度开发者中心 百度搜红包 编程之美全国挑战赛 美国国家仪器 阿里巴巴集团校园招聘 微软亚洲研究院 百老汇之家 acmicpc 微软学生技术俱乐部 阿里云 百度云 BaiduFamily 微软校招官方微博 微软中国 网易校园招聘
(4) DataScientist 52opencourse_挖课 网易汪源 丕子 刘思喆 杨滔_数据科学 邓侃 王威廉 北冥乘海生 刘洋THU ChinaHadoop MachineLearner 阿里日照
(5) 唯美丶中国风 全球视觉图宴 镜头中的中国 BJTUcaixia 百度旅游 全球顶尖摄影
(6) TechWeb 程苓峰-云科技 互联网的那点事 开心的老胡-GodHope 淘宝鬼脚七 google那点事儿 腾讯微信团队 张辉forestsong 刘江总编 月光博客 PingWest中文网 刘挺 王小川 36氪 雷军 Fenng 高效IT网 庄宝童
(7) Smile_geek 赫阳at百度 199IT-互联网数据中心 苏宁易购李斌 视物致知 蔡学镛 billgates FT中文网 数据化管理 微数据 爬盟中国 DataV 淘宝技术大学 社会网络与数据挖掘 李开复 于仰民_Emilyu 数据挖掘_PHP 淘依韵 ResysChina 量子恒道 林仕鼎 钱皓-互联网分析师 陈利人 EMC中国研究院 BIT-百度技术学院 3W咖啡 微指数 淘薛奎 数据挖掘研究院 百度统计 TEDNews 周鸿祎 一淘数据工程师 杨栋_Kenny 大数据 张俊林say 郭去疾 数据魔方 微软云计算 ipad应用排行榜 数据挖掘与数据分析 唐福林 五洲红 AdMaster 程辉 2012百度之星程序设计大赛 eBayTech 百度推广 社交数据分析 Google黑板报 张亚勤
(8) 连城404 伯乐在线官方微博 图灵社区 何_登成 一淘测试 python4cn 骆逸 nosqlfan zhh-2009 阿里技术嘉年华 微博应用架构 developerWorks 开源中国 程序员的那些事 LAMP人 InfoQ 程序员修炼营 TimYang CNodeJS 百度技术沙龙 朴灵 微博平台架构 SinaAppEngine
(9) 一淘网 淘宝网 淘宝邓悟 Python发烧友 淘宝数据 rockdai 一淘招聘 淘楚材 乔三石 hugozhu 淘宝指数
(10)姚晨 花泽云静 司華Fighting glinglingw 邹_小珊 蔡圆媛的后花园 开启新起点tianran 凌_欣 任婷婷养了一只皮皮兽 胡思乱想乐 BatmanFly 超级码力 macbax Miss好好菁 蔡虎Stanley 夏炎xyxy 阿Oey--陈叶萍 Ali_lulululuya 夏碉堡 turbosun 依兰花开_emma LillianC小超人 Loxpzi-四叶草 稀土部队