主题建模
在文本挖掘中,我们经常收集一些文档集合,例如博客文章或新闻文章,我们希望将其分成自然组,以便我们可以分别理解它们。主题建模是对这些文档进行无监督分类的一种方法,类似于对数字数据进行聚类,即使我们不确定要查找什么,也可以找到自然的项目组。
潜在狄利克雷分配(LDA)是拟合主题模型特别流行的方法。它将每个文档视为主题的混合体,并将每个主题看作是单词的混合体。这允许文档在内容方面相互“重叠”,而不是分离成离散的组,以反映自然语言的典型用法。
R语言中对文本数据进行主题模型topicmodeling分析
结合主题建模的文本分析流程图。topicmodels包采用Document-Term Matrix作为输入,并生成一个可以通过tidytext进行处理的模型,以便可以使用dplyr和ggplot2对其进行处理和可视化。
如图所示,我们可以使用 文本原理来处理主题建模 。
潜在狄利克雷分配
潜在Dirichlet分配是主题建模中最常用的算法之一。
每个文档都是主题的混合体。我们设想每个文档可能包含来自几个主题的文字,特别是比例。例如,在双主题模型中,我们可以说“文档1是90%的主题A和10%的主题B,而文档2是30%的主题A和70%的主题B.”
每个主题都是词汇的混合。例如,我们可以想象一个美国新闻的两个主题模型,一个话题是“政治”,一个是“娱乐”。政治话题中最常见的词语可能是“总统”,“国会”和“政府“,而娱乐主题可以由诸如”电影“,”电视“和”演员“之类的词组成。
LDA是一种同时估计这两种情况的数学方法:查找与每个主题相关的单词混合,同时确定描述每个文档的主题混合。这个算法有很多现有的实现,我们将深入探讨其中的一个。
library(topicmodels)data("AssociatedPress")AssociatedPress
: term frequency (tf)
我们可以使用LDA()topicmodels包中的函数设置k = 2来创建两个主题的LDA模型。
实际上几乎所有的主题模型都会使用更大的模型k,但我们很快就会看到,这种分析方法可以扩展到更多的主题。
此函数返回一个包含模型拟合完整细节的对象,例如单词如何与主题关联以及主题如何与文档关联。
# set a seed so that the output of the model is predictableap_lda <- LDA(AssociatedPress,k =2,control =list(seed =1234))ap_lda
拟合模型是“简单部分”:分析的其余部分将涉及使用整理tidytext软件包中的函数来探索和解释模型。
单词主题概率
tidytext包提供了这种方法来提取每个主题的每个词的概率,称为ββ (“测试版”)。
## # A tibble: 20,946 x 3## topic term beta## ## 1 1 aaron 1.69e-12## 2 2 aaron 3.90e- 5## 3 1 abandon 2.65e- 5## 4 2 abandon 3.99e- 5## 5 1 abandoned 1.39e- 4## 6 2 abandoned 5.88e- 5## 7 1 abandoning 2.45e-33## 8 2 abandoning 2.34e- 5## 9 1 abbott 2.13e- 6## 10 2 abbott 2.97e- 5## # ... with 20,936 more rows
R语言中对文本数据进行主题模型topicmodeling分析
每个主题中最常见的术语
这种可视化让我们了解从文章中提取的两个主题。话题1中最常见的词语包括“百分比”,“百万”,“十亿”和“公司”,这表明它可能代表商业或财务新闻。话题2中最常见的包括“总统”,“政府”和“苏维埃”,表示这个话题代表政治新闻。
作为替代方案,我们可以认为有条款最大的区别在ββ在主题1和主题2之间。
## # A tibble: 198 x 4## term topic1 topic2 log_ratio## ## 1 administratio