首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python之LDA主题模型算法应用

相关视频

我不会在这篇文章中介绍该方法的理论基础。将语料库(文档集)中的文档分配给基于单词矢量的潜在(隐藏)主题的主要思想是相当容易理解的,而这个例子(来自lda)将有助于巩固我们对LDA模型的理解。

安装lda

简而言之,两种方法:

方法1:

我将以用户身份安装lda

$ pip install --user lda

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

$ pip show lda

\-\-\-

Name: lda

Requires: pbr, numpy

lda已经安装好了。让我们一起完成示例。

一个例子

查看路透社新闻发布的语料库。首先,我们做一些导入:

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(X\[doc\_id, word\_id\]))

print("-- word : {}".format(vocab\[word_id\]))

print("-- doc  : {}".format(titles\[doc_id\]))选择模型

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

model = lda.LDA(n\_topics=20, n\_iter=500, random_state=1)

先前有几个参数是我们保留默认值。据我所知,这里只使用对称先验 。

左右滑动查看更多

01

02

03

04

主题字

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

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

for n in range(5):

sum\_pr = sum(topic\_word\[n,:\])

print("topic: {} sum: {}".format(n, sum_pr))

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

* 主题 6

- 德国 战争 政治 政府

* 主题 7

- 哈里曼   克林顿 丘吉尔 大使

* 主题 8

- 俄罗斯 总统 克里姆林宫

* 主题 9

- 王子 女王 鲍尔斯 教会 王

* 主题 10

- 辛普森 亿 年前 南

- 红衣主教 癌症 教会 生活

* 主题 17

- 丧葬 教会 城市 死亡

* 主题 18

- 博物馆  文化 城市 文化

* 主题 19

- 艺术 展 世纪 城市 之旅

这让我们了解了20个主题可能是什么含义。

文档主题

我们从模型中获得文档主题概率:

doc\_topic = model.doc\_topic_

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

for n in range

document: 0 sum: 1.0

document: 1 sum:

文件: 0 总和: 1.0

文件: 1 总和: 1.0

文件: 2 总和: 1.0

文件: 3 总和: 1.0

文件: 4 总和: 1.0

我们可以对最可能的主题进行抽样:

for n in range(10):

topic\_most\_pr = doc_topic\[n\].argmax可视化

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

plt.tight_layout()

plt.show()

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

plt.tight_layout()

plt.show()

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OyM0r3sgBamPofbhKiY0l93Q0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券