Python之LDA主题模型算法应用

在这篇文章中,我将介绍用于Latent Dirichlet Allocation(LDA)的lda Python包的安装和基本用法。我不会在这篇文章中介绍该方法的理论基础。然而,这个模型的主要参考,Blei etal 2003可以在线免费获得,我认为将语料库(文档集)中的文档分配给基于单词矢量的潜在(隐藏)主题的主要思想是相当容易理解的而这个例子(来自lda)将有助于巩固我们对LDA模型的理解。那么,让我们开始......

安装lda

在之前的帖子中,我介绍了使用pip和 virtualenwrapper安装Python包,请参阅帖子了解更多详细信息:

  • 在Ubuntu 14.04上安装Python包
  • 在Ubuntu 14.04上的virtualenv和virtualenvwrapper

简而言之,我将提到两种方法:

  • 方法1

我将以用户身份安装lda

$ pip install --user lda

这也将安装所需的pbr包。现在我将 在一个设置中提供lda,其中包含我之前安装的所有其他软件包(再次参见上文)。使用此方法,您应该在安装后得到类似的内容:

$ pip show lda

---

名称:lda

版本:0.3.2

位置:/home/cstrelioff/.local/lib/python2.7/site-packages

需要:pbr,numpy

我已经安装了numpy,因此没有修改。

  • 方法2

如果你想为lda建立一个完全孤立的环境,你可以使用virtualenv(我将使用virualenvwraper,如上面列出的帖子中所述)。请注意,如果您选择此方法,将下载并编译numpy。在这种情况下的安装将是这样的:

$ mkvirtualenv lda_env

lda_env / bin / python中的新python可执行文件

安装setuptools,pip ... done。

(lda_env)〜$ pip安装lda

..很多numpy编译...

在这种情况下,pip将在为virtualenvs指定的位置显示安装。对我来说,这看起来像:

(lda_env)$ pip show lda

---

名称:lda

版本:0.3.2

位置:/home/cstrelioff/virtenvs/lda_env/lib/python2.7/site-packages

需要:pbr,numpy

请注意,该位置与方法1不同。

所以,就是这样,lda已经安装好了。让我们一起完成随包提供的示例。

一个例子

lda github存储库中的示例查看路透社新闻发布的语料库 - 让我们复制一下并添加一些细节以更好地了解正在发生的事情。此要点提供了一个包含所有要遵循的代码的脚本,名为 ex002_lda.py。首先,我们做一些导入:

import numpy as np

import lda

import lda.datasets

接下来,我们导入用于示例的数据。这包含在 lda包中,因此这一步很简单(我还打印出每个项目的数据类型和大小):

从上面我们可以看到有395个新闻项目(文档)和一个大小为4258的词汇表。文档术语矩阵X具有395个词汇表中每个4258个词汇单词的出现次数。文档。例如,X [0,3117]是单词3117在文档0中出现的次数。我们可以找出计数和与之对应的单词(让我们也得到文档标题):

doc_id 0

word_id 3117

print (“doc id:{} word id:{}” format doc_id  word_id ))

print (“ - count:{}” format doc_id  word_id ]))

print (“ - word:{}” format vocab word_id ]))

print (“ - doc:{}” format titles doc_id ]))

doc id  word id  3117

count  2

word  heir to the throne

doc  英国 查尔斯王子 率先引领英国皇室革命伦敦1996 - 08 - 20

当然我们应该期望X 矩阵中有很多零 - 我选择这个例子来获得非零结果。

选择模型

接下来,我们初始化并拟合LDA模型。要做到这一点,我们必须选择主题的数量(其他方法也可以尝试查找主题的数量,但对于LDA,我们必须假设一个数字)。继续我们选择的示例:

model lda LDA n_topics = 20 , n_iter = 500 , random_state = 1 )

先前有几个参数我们保留默认值。据我所知,这只使用对称先验 - 我将不得不更多地研究它(参见Wallach etal 2009讨论这个问题)。

主题字

从拟合模型中我们可以看到主题词概率:

从输出的大小我们可以看出,对于20个主题中的每一个,我们在词汇表中分配了4258个单词。对于每个主题,应该对单词的概率进行标准化。我们来看看前5:

for in range (5 ):

sum_pr sum topic_word ,:])

print (“topic:{} sum:{}” format  sum_pr ))

话题 总和 1.0

主题 总和 1.0

主题 总和 1.0

主题 总和 1.0

主题 总和 1.0

我们还可以获得每个主题的前5个单词(按概率):

versace 迈阿密 cunanan

主题 6

德国 德国 战争 政治 政府

主题 7

哈里曼 你小号 克林顿 丘吉尔 大使

主题 8

叶利钦 的俄罗斯 俄罗斯 总统 克里姆林宫

主题 9

王子 女王 鲍尔斯 教会 王

主题 10

辛普森 亿 年前 南

bernardin 红衣主教 癌症 教会 生活

主题 17

死于 丧葬 教会 城市 死亡

主题 18

博物馆 肯尼迪 文化 城市 文化

主题 19

艺术 展 世纪 城市 之旅

这让我们了解了20个主题可能意味着什么 - 你能看到模式吗?

文档主题

我们从模型中获得的其他信息是文档主题概率:

doc_topic model doc_topic_

查看输出的大小,我们可以看到395个文档中的每个文档都有20个主题的分布。这些应该针对每个文档进行标准化,让我们测试前5个:

for in range (5 ):

sum_pr sum doc_topic ,:])

print (“document:{} sum:{}” format  sum_pr ))

文件 总和 1.0

文件 总和 1.0

文件 总和 1.0

文件 总和 1.0

文件 总和 1.0

使用新故事的标题,我们可以对最可能的主题进行抽样:

for in range (10 ):

topic_most_pr doc_topic ] 。argmax ()

print (“doc:{} topic:{} \ n {} ...” format 

topic_most_pr 

titles ] [:50 ]))

DOC  话题 11

UK  王子 查尔斯 的先头部队 英国 皇家 雷沃...

DOC  1个 话题 0

德国 历史的 德累斯顿 教堂 上升 ,从 二战...

DOC  话题 15

印度 母亲 修女的身体状况说仍然不合适...

doc  话题 11

英国 宫 警告 英国 每周 超过 查尔斯 PIC ...

DOC  话题 15

INDIA  母亲 邓丽君 略 强 祝福...

DOC  话题 15

印度 母亲 邓丽君的条件不变,你...

商务部 话题 15

印度 母亲 特雷莎 节目 招牌 的 实力 BL ...

DOC  主题 15

印度 母亲 修女的病情好转,许多...

DOC  主题 15

INDIA  母亲 特雷莎 提高 修女 祈祷  “米...

DOC  话题 0

UK  查尔斯 下 火 了 前景 的 女王 Ca ...

看起来很不错,除了主题0-文档1和9应该被赋予相同的主题吗?看起来不像。

可视化

最后,让我们想象一下这些发行版。为此,我将使用matplotlib - 如果您需要安装帮助,可以查看我以前的帖子(上图)。

首先,我们导入matplotlib并设置样式:

接下来,让我们看看一些主题词分布是什么样的。这里的想法是每个主题应该有一个独特的单词分布。在下面的词干图中,每个词干的高度反映了焦点主题中单词的概率:

plt tight_layout ()

plt show ()

Python之LDA主题模型算法应用

最后,让我们看一下几个文档的主题分布。这些分布给出了每个文档的20个主题中每个主题的概率。我只会画一些:

plt tight_layout ()

plt show ()

Python之LDA主题模型算法应用

绘制上述文档的主题分布提供了一个重要的见解:许多文档具有多个概率很高的主题。因此,选择每个文档概率最高的主题可能会受到不确定性的影响; 自我注意:小心。在比较两份文件时,是否应考虑完全分配主题?

大数据部落——中国专业的第三方数据服务提供商,提供定制化的一站式数据挖掘和统计分析咨询服务

统计分析和数据挖掘咨询服务 :y0.cn/teradat(咨询服务请联系官网客服

Python之LDA主题模型算法应用QQ:3025393450

 

【服务场景】  

科研项目; 

 

公司项目外包 ;线上线下一对一培训 ;数据采集;学术研究;报告撰写;市场调查。

【大数据部落】提供定制化的一站式数据挖掘和统计分析咨询服务

Python之LDA主题模型算法应用

分享最新的大数据资讯,每天学习一点数据分析,让我们一起做有态度的数据人Python之LDA主题模型算法应用

微信客服号:lico_9e

QQ交流群:186388004 Python之LDA主题模型算法应用


 

Python之LDA主题模型算法应用


欢迎关注微信公众号,了解更多数据干货资讯!

Python之LDA主题模型算法应用