29

我试图了解 Python 中的 gensim 包如何实现潜在狄利克雷分配。我正在执行以下操作:

定义数据集

documents = ["Apple is releasing a new product", 
             "Amazon sells many things",
             "Microsoft announces Nokia acquisition"]             

删除停用词后,我创建了字典和语料库:

texts = [[word for word in document.lower().split() if word not in stoplist] for document in documents]
dictionary = corpora.Dictionary(texts)
corpus = [dictionary.doc2bow(text) for text in texts]

然后我定义了 LDA 模型。

lda = gensim.models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=5, update_every=1, chunksize=10000, passes=1)

然后我打印主题:

>>> lda.print_topics(5)
['0.181*things + 0.181*amazon + 0.181*many + 0.181*sells + 0.031*nokia + 0.031*microsoft + 0.031*apple + 0.031*announces + 0.031*acquisition + 0.031*product', '0.077*nokia + 0.077*announces + 0.077*acquisition + 0.077*apple + 0.077*many + 0.077*amazon + 0.077*sells + 0.077*microsoft + 0.077*things + 0.077*new', '0.181*microsoft + 0.181*announces + 0.181*acquisition + 0.181*nokia + 0.031*many + 0.031*sells + 0.031*amazon + 0.031*apple + 0.031*new + 0.031*is', '0.077*acquisition + 0.077*announces + 0.077*sells + 0.077*amazon + 0.077*many + 0.077*nokia + 0.077*microsoft + 0.077*releasing + 0.077*apple + 0.077*new', '0.158*releasing + 0.158*is + 0.158*product + 0.158*new + 0.157*apple + 0.027*sells + 0.027*nokia + 0.027*announces + 0.027*acquisition + 0.027*microsoft']
2013-12-03 13:26:21,878 : INFO : topic #0: 0.181*things + 0.181*amazon + 0.181*many + 0.181*sells + 0.031*nokia + 0.031*microsoft + 0.031*apple + 0.031*announces + 0.031*acquisition + 0.031*product
2013-12-03 13:26:21,880 : INFO : topic #1: 0.077*nokia + 0.077*announces + 0.077*acquisition + 0.077*apple + 0.077*many + 0.077*amazon + 0.077*sells + 0.077*microsoft + 0.077*things + 0.077*new
2013-12-03 13:26:21,880 : INFO : topic #2: 0.181*microsoft + 0.181*announces + 0.181*acquisition + 0.181*nokia + 0.031*many + 0.031*sells + 0.031*amazon + 0.031*apple + 0.031*new + 0.031*is
2013-12-03 13:26:21,881 : INFO : topic #3: 0.077*acquisition + 0.077*announces + 0.077*sells + 0.077*amazon + 0.077*many + 0.077*nokia + 0.077*microsoft + 0.077*releasing + 0.077*apple + 0.077*new
2013-12-03 13:26:21,881 : INFO : topic #4: 0.158*releasing + 0.158*is + 0.158*product + 0.158*new + 0.157*apple + 0.027*sells + 0.027*nokia + 0.027*announces + 0.027*acquisition + 0.027*microsoft
>>> 

我无法从这个结果中理解很多。它是否提供了每个单词出现的概率?另外,主题#1,主题#2等是什么意思?我期待的东西或多或少像最重要的关键字。

我已经检查了gensim 教程,但它并没有太大帮助。

谢谢。

4

5 回答 5

21

您正在寻找的答案在gensim 教程中。 为随机选择的主题lda.printTopics(k)打印贡献最大的单词。k可以假设这是(部分)每个给定主题上的单词分布,这意味着这些单词出现在左侧主题中的概率。

通常,人们会在大型语料库上运行 LDA。在非常小的样本上运行 LDA 不会产生最好的结果。

于 2013-12-03T11:43:32.790 回答
19

我认为本教程将帮助您非常清楚地了解所有内容 - https://www.youtube.com/watch?v=DDq3OVp9dNA

一开始我也遇到了很多理解它的问题。我将尝试简要概述几点。

在潜在狄利克雷分配中,

  • 单词的顺序在文档中并不重要 - Bag of Words 模型。
  • 文档主题的分布
  • 反过来,每个主题是属于该词汇表的单词的分布
  • LDA 是一种概率生成模型。它用于使用后验分布推断隐藏变量。

想象一下创建文档的过程是这样的 -

  1. 选择主题分布
  2. 画一个主题 - 并从主题中选择单词。对每个主题重复此操作

LDA 有点沿着这条线回溯——假设你有一袋代表文档的单词,它代表的主题可能是什么?

因此,在您的情况下,第一个主题 (0)

INFO : topic #0: 0.181*things + 0.181*amazon + 0.181*many + 0.181*sells + 0.031*nokia + 0.031*microsoft + 0.031*apple + 0.031*announces + 0.031*acquisition + 0.031*product

更多关于thingsamazon并且many因为它们具有更高的比例,而不是更多关于microsoftapple具有显着较低的值。

我建议阅读此博客以获得更好的理解(Edwin Chen 是个天才!) - http://blog.echen.me/2011/08/22/introduction-to-latent-dirichlet-allocation/

于 2015-05-29T21:15:10.487 回答
11

由于发布了上述答案,现在有一些非常好的可视化工具可以使用gensim.

看看 pyLDAvis 包。这是一个很棒的笔记本概述。这是一个面向最终用户的非常有用的视频描述(9 分钟教程)。

希望这可以帮助!

于 2016-01-20T07:46:16.327 回答
2

为了了解 gensim LDA 实现的用法,我最近在 Python 中的 70,000 篇简单 wiki 转储文章中撰写了从头开始实现主题建模的博客文章。

在这里,详细解释了 gensim 的 LDA 如何用于主题建模。可以找到的用法

ElementTree library for extraction of article text from XML dumped file.
Regex filters to clean the articles.
NLTK stop words removal & Lemmatization
LDA from gensim library

希望它有助于理解 gensim 包的 LDA 实现。

第1部分

主题建模(第 1 部分):从简单的 Wikipedia 转储创建文章语料库

第2部分

主题建模(第 2 部分):使用潜在 Dirichlet 分配从文章中发现主题

作为结果,我得到的几个主题的词云(10 个词)。 在此处输入图像描述

于 2017-09-28T13:12:01.707 回答
0

It is returning the percent likelihood that that word is associated with that topic. By default the LDA shows you the top ten words :)

于 2019-03-22T16:08:29.563 回答