毕业近两个月了,现在才想起来把毕业设计做的东西以博客的形式发出来,记得之前@爱可可—爱生活 老师分享加州大学圣地亚哥分校的Fhilip J.Guo教授对要求,“每篇发表的科研论文,最好都能配有一篇摘要博客文章,我试图对博士后发表的所有文章要求做到这一点(有时一篇博客里会包含几篇文章),我鼓励学生们也这样做,会有10-100x的人会阅读博客”。虽然这篇本科毕业论文不涉及发表,我也试图这样做。不仅是对之前所做工作的总结,也丰富一下自己的博客目录。
由于自己在之前的本科学习过程中,接触过自然语言处理的相关(比如:《人民的名义》剧本文本分析及人物画像),所以在选题过程中义无反顾的选择了这个题目,还“作死”的要求指导老师能不能加上深度学习(毕竟全民ai潮,想着这样效果应该会更好)。随即课题的题目就成了——基于主题模型与深度学习的微博文本分类及地理可视化。
闲话不说,先大体介绍一下主要做了什么吧。主要以较为频发的路面塌陷事件作为背景,结合微博文本数据,使用主题模型BTM作为无监督的概率统计模型在文本语义挖掘上进行训练。再对主题聚类的进行文本的语料库构建。这里对对训练集与测试集采用了Facebook提出的FastText模型。同时也利用GIS技术对事件进行了相关空间分析,以达到热点事件挖掘的目的。感兴趣的可以下载哦,GitHub地址:undergraduate_essay。欢迎批评指正。
数据获取
首先选择了八爪鱼等多类网络采集工具,多次抓取会出现身份验证的问题。好像收费的就可以,不想花钱就放弃了(还是穷!);然后我又去咨询了一下认识的在新浪工作的老师,说这数据好不好搞老师他说他买给我,我当然也放弃了(还是穷!);最后就在网上各种搜罗,下载到了无数套爬虫程序,都用不了(这不是因为穷,是因为自己wuneng!)。
算了,自己搞呗。最终采用网络爬虫的方法,利用selenium测试工具,模拟微博登录;设置了自动身份验证的判断。抓取了在微博页面可以直观看到的文本数据,同时也获取到了每条文本所对应的时间、设备等各类信息(如下图)。
信息提取
因为后期要进行地理可视化,所以地址信息必不可少。这里强烈推荐采中科院计算机所的NLPIR系统。采用它对文本中的地名实体进行抽取,得到事件发生的地址(相关预处理在这里不赘述了,比如去无意义数据、中文分词等)。
另外还需要将文本地址转为坐标,这里也不赘述,Excel地图插件-ExcelMap这篇博文里有详细介绍。
分类语料库建立
主题模型是自然语言处理领域的重要工具之一,能够有效的发现语料的潜在语义信息。主题模型能够将高维度的文档中的词映射到低维度的隐含主题中(隐含主题是一系列词的多项分布),最终使得每个文档都可以通过主题表示。
首先比较了LDA模型与BTM模型在处理文本分类问题上的差异。微博文本数据属于短文本,在多个数据集上结果表明BTM在这方面更有优势。所以就应用BTM模型对数据进行文本主题建模。对文档—主题相似度进行聚类从而完成分类,从而构建语料库。(具体原理这里不展开说了,感兴趣可以去查看论文)
进行聚类分析的算法有很多,其中K-means聚类算法在众多聚类算法里属于比较简单的,属于基于一种基于距离的无监督聚类算法,实现起来也比较容易,效果也能够满足要求。但它的缺点是需要指定聚类个数。这里采用了斯坦福大学的Robert等教授提出了Gap Statistic方法。文中定义Gap值为:
Gap_n (k)=E_n^* (log(W_k ) )-logW_k
为了便于表达,将聚类范围缩小到1—10类。由Gap指标以及图所示,当类别数为9时,GAP值达到最高峰。所以9可以作为最佳聚类数。这样对原始文本做标签处理,就完成了语料库的建立。
FastText模型
- FastText是一个可伸缩解决方案的资料库,其目的是帮助创建文本表征和分类,并且可以为294种语言提供训练模型。深度学习FastText模型主要应用于构建词向量与文本分类,在许多文本分类问题上都有非常不错的表现,不仅具有良好的分类效果,而且具有优秀的分类效率,所以适用于大批量的数据样本。在各个方面都表现出了很强的能力(如:标签的预测、情感分析等),尤其是对于短文本分类具有很好的性能。针对FastText算法的具体内容就不展开说了,具体可见基于深度学习的对文本分类的FastText模型这篇博文。
- 在本次课题中,使用以上步骤对原始数据(共5586条)进行人工标记后,将这些数据划分为九子类,选取其中50%作为模型训练集,50%作为模型测试集。文本文件的每一行都包含一个标签列表,其后是相应的文档。所有标签都以__label__前缀开始,这就是FastText如何识别什么是标签或什么是一个词。然后对模型进行训练,以预测文档中给定单词的标签。
1 | 类别 P R F |
- 由上表可知,测试集的平均准确度达到了74%,其中class_two、class_three具有百分之百的准确率,对于实验数据(数据量较少、质量相对较差的短文本数据)来说已经相当可观,由此可见针对短文本确实具有很高的效率。
可视化分析
同样第一类、第六类、第八类占大多数;第四类、第七类也相对较多。
基于分类结果分别利用R语言调用wordcloud2包对各类别文本数据进行词云展示。由分类词云图可见,第0类是大多与小区建设塌陷有关的文本;第一类是地铁施工所造成的有关塌方事故的文本;第二类是北京西二旗路所对应的事件文本;第三类是劳斯莱斯轿车深陷大坑的事件;第四类是与货车有关的路面塌陷的事件文本;第五类是塌陷事件所对应的民警预警文本;第六类是为塌陷事件进行路面抢修的事件;第七类是电动车掉入大坑的事件文本;第八类是由于暴雨、积水等所造成的路面塌陷的事件文本。
总结
本文就是从无监督分类-BTM主题模型入手,通过主题聚类为后续利用FastText模型进行分类提供基础数据。在多个实验数据上可以看出来,该分类思路能够取得目前最好的分类效果。同时,在任何短文本分类任务上都适用。
虽然上述研究思路与方法对于微博文本数据都取得了相当可观的效果,但其实微博粗糙的数据对其效果也产生了一定的影响,后续可以尝试下更先进的TextCNN,看看效果如何。