Python中的端对端主题建模: 隐含狄利克雷分布(LDA)

鹤之淇水 2019-05-15

(此处已添加圈子卡片,请到今日头条客户端查看)

主题模型: 简而言之,它是一种统计模型,用于标记出现在文档集合中的抽象“主题”,这些主题最能代表这个文档集合中的信息。

获取主题模型使用了许多技术。本文旨在演示LDA的实现:一种广泛使用的主题建模技术。

隐含狄利克雷分布(LDA)

根据定义,LDA是给定语料库的生成概率模型。其基本思想是将文档表示为潜在主题的随机混合,并对每个主题通过单词分布进行特征化。

LDA的底层算法

Python中的端对端主题建模: 隐含狄利克雷分布(LDA)

http://chdoig.github.io/pytexas2015-topic-modeling

给定M个文档、N个单词和估计的K个主题, LDA使用这些信息输出(1)K个主题,(2)psi,表示每个主题K的单词分布,(3)phi,表示文档 i 的主题分布。

α参数是Dirichlet先验浓度参数,表示文档-主题密度,α值越高,就可以假定文档由更多的主题组成,从而导致每个文档的主题分布更加具体。

β参数与先验浓度参数相同,表示主题词密度的,β值越高,就可以假定主题由大部分单词组成,从而导致每个主题的单词分布更加具体。

LDA 的实现

完整的代码可以在GitHub上以Jupyter Notebook的形式获得。(https://github.com/kapadias/ml-directory/blob/master/medium_posts/Introduction%20to%20Topic%20Modeling.ipynb )

  1. 加载数据
  2. 数据清洗
  3. 探索性分析
  4. 为LDA分析准备数据
  5. LDA模型训练
  6. 分析LDA模型结果

加载数据

Python中的端对端主题建模: 隐含狄利克雷分布(LDA)

NIPS(神经信息处理系统)标识

在本教程中,我们将使用NIPS大会上发表的论文数据集。NIPS大会(神经信息处理系统)是机器学习领域最负盛名的年度事件之一。在每次的NIPS大会上,参会者都会发表大量的研究论文。此CSV文件包含了从1987年到2016年(29年!)发表的不同的NIPS论文的信息。这些论文讨论了机器学习领域的各种各样的主题,从神经网络到优化方法等等。

首先,我们将研究CSV文件,以确定我们可以使用什么类型的数据进行分析,以及它的结构是怎样的。一篇研究论文通常由标题、摘要和正文组成。

Python中的端对端主题建模: 隐含狄利克雷分布(LDA)

¥39.2
购买

Python中的端对端主题建模: 隐含狄利克雷分布(LDA)

原始数据示例

数据清洗

去掉多余列

对于论文的分析,我们只对与论文相关的文本数据以及论文发表年份感兴趣。由于该文件包含一些元数据,如id和文件名,因此删除所有不包含有用文本信息的列是很有必要的。

Python中的端对端主题建模: 隐含狄利克雷分布(LDA)

删除标点符号/转换为小写

现在,我们将对论文文本内容执行一些简单的预处理,以便它们更易于分析。我们将使用一个正则表达式来删除标题中的任何标点符号。然后我们将执行小写字母转换。

Python中的端对端主题建模: 隐含狄利克雷分布(LDA)

Python中的端对端主题建模: 隐含狄利克雷分布(LDA)

探索性分析

为了验证预处理是否正确执行,我们可以对研究论文的文本创建一个词云。这将给我们一个最常见单词的可视化表示。可视化是理解我们是否仍然在正确的轨道上的关键!此外,它还允许我们在进一步分析文本数据之前验证是否需要对文本数据进行额外的预处理。

Python有大量的开放库!我们将使用Andreas Mueller的wordcloud库,而不是自己开发一种方法来创建词云:

Python中的端对端主题建模: 隐含狄利克雷分布(LDA)

Python中的端对端主题建模: 隐含狄利克雷分布(LDA)

为LDA分析准备文本

LDA不直接处理文本数据。首先,需要将文档转换为简单的向量表示形式。然后,LDA将使用这个表示来确定主题。“文档向量”的每个条目都对应于一个单词在文档中出现的次数(词袋模型,即BOW表示)。

接下来,我们将把标题列表转换为向量列表,所有向量的长度都等于对应的词汇。

然后,我们将根据这个操作的结果(文档向量列表)来标出最常见的10个单词。作为检查,这些单词也应该出现在词云中。

Python中的端对端主题建模: 隐含狄利克雷分布(LDA)

相关推荐

FJJackie / 0评论 2019-10-30

OccamsRazor / 0评论 2018-01-06