标签: topic-modeling

主题建模,但具有已知主题?

好的,因此通常使用主题模型(例如 LDA、pLSI 等)以无监督的方式推断可能出现在一组文档中的主题。我想知道是否有人对如何将我的问题硬塞进 LDA 框架有任何想法,因为有非常好的工具可用于解决 LDA 问题。

为了彻底起见,我将以下信息作为输入:

  • 一组文档(来自一个生物体的 DNA 片段,其中每个片段都是一个文档)
    • 在这种情况下,一个文档只能有一个主题
  • 一组主题(来自其他生物体的 DNA 片段)
  • 在这种情况下,单词是碱基的三元组(目前)

我要回答的问题是:对于当前文档,它的主题是什么?换句话说,对于给定的 DNA 片段,它最有可能来自哪个其他生物体(同一物种)?自从发生片段交换以来,可能存在突变等,因此两个片段不会相同。

这与经典LDA模型的主要区别在于我提前知道主题。

我最初的想法是采用 pLSA 模型 ( http://en.wikipedia.org/wiki/PLSA ) 并明确设置主题节点,然后执行标准的 EM 学习(如果只有一个像样的库可以处理贝叶斯参数)使用潜在变量学习......),然后使用任何算法进行推理(这应该无关紧要,因为无论如何模型都是多叉树)。

编辑:我想我已经解决了它,对于任何可能偶然发现的人。我发现您可以使用带标签的 LDA 并将每个标签分配给每个文档。由于每个标签都与一个主题一一对应,因此您实际上是在对算法说:对于每个文档,从给定的主题集(标签集)中选择主题,而不是自己编造。

topic-modeling

5
推荐指数
2
解决办法
2605
查看次数

如何并行化topicmodels R包

我有一系列文档(约 50,000 个),我已经将这些文档转换为语料库并使用 R 中的 topicmodels 包构建 LDA 对象。不幸的是,为了测试 150 多个主题,需要几个小时。

到目前为止,我发现我可以使用以下方法同时测试几个不同的集群大小:

library(topicmodels)
library(plyr)
library(foreach)
library(doMC)
registerDoMC(5) # use 5 cores

dtm # my documenttermmatrix

seq <- seq(200,500, by=50)

models <- llply(seq, function(d){LDA(dtm, d)}, .parallel=T)
Run Code Online (Sandbox Code Playgroud)

有没有办法并行化 LDA 函数,使其运行得更快(而不是一次运行多个 LDA)?

parallel-processing r lda topic-modeling

5
推荐指数
1
解决办法
2140
查看次数

使用主题模型,我们应该如何设置“停用词”列表?

有一些标准的停用词列表,给出了要从语料库中删除的诸如“a the of not”之类的词。但是,我想知道,停止列表是否应该逐案更改?

比如我有10K的期刊文章,那么由于文章的结构,基本上每篇文章都会看到“介绍、评论、结论、页面”这样的词。我担心的是:我们应该从我们的语料库中删除这些词吗?(每个文档都有的词?)感谢每一个评论和建议。

stop-words lda topic-modeling text-classification

5
推荐指数
1
解决办法
5101
查看次数

pyldavis 无法查看图表

我正在尝试使用 pyldavis 在 python 中直观地描述我的主题。但是我无法查看图表。是我们必须在浏览器中查看图形还是在执行时它会弹出。下面是我的代码

import pyLDAvis
import pyLDAvis.gensim as gensimvis
print('Pyldavis ....')
vis_data = gensimvis.prepare(ldamodel, doc_term_matrix, dictionary)
pyLDAvis.display(vis_data)
Run Code Online (Sandbox Code Playgroud)

程序在执行上述命令时持续处于执行模式。我应该在哪里查看我的图表?或者会存放在哪里?它是否仅与 Ipython 笔记本集成?请指导我完成此操作。PS我的python版本是3.5。

python-3.x lda topic-modeling

5
推荐指数
2
解决办法
1万
查看次数

Firebase 取消订阅主题不起作用

我在 fcm 中使用 2 台 android 设备订阅了一个主题,在使用一台设备取消订阅该主题后,我仍然可以使用我取消订阅的设备发送消息。

firebase topic-modeling firebase-cloud-messaging

5
推荐指数
0
解决办法
582
查看次数

gensim 的 get_document_topics 方法返回的概率加起来不等于 1

有时它返回所有主题的概率并且一切都很好,但有时它只返回几个主题的概率并且它们加起来不等于一个,这似乎取决于文档。一般来说,当它返回的主题很少时,概率加起来或多或少是 80%,那么它是否只返回最相关的主题?有没有办法强制它返回所有概率?

也许我遗漏了一些东西,但我找不到该方法参数的任何文档。

text-mining lda gensim topic-modeling

5
推荐指数
1
解决办法
1443
查看次数

如何解释 Sklearn LDA 困惑度分数。为什么它总是随着主题数量的增加而增加?

我尝试使用 sklearn 的 LDA 模型找到最佳主题数。为此,我通过在https://gist.github.com/tmylk/b71bf7d3ec2f203bfce2上引用代码来计算困惑度。

但是当我增加话题数量时,困惑总是不合理地增加。我在实现上错了还是只是给出了正确的值?

from __future__ import print_function
from time import time

from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer
from sklearn.decomposition import NMF, LatentDirichletAllocation
n_samples = 0.7
n_features = 1000
n_top_words = 20
dataset = kickstarter['short_desc'].tolist()
data_samples = dataset[:int(len(dataset)*n_samples)]
test_samples = dataset[int(len(dataset)*n_samples):]
Run Code Online (Sandbox Code Playgroud)

对 LDA 使用 tf(原始术语计数)功能。

print("Extracting tf features for LDA...")
tf_vectorizer = CountVectorizer(max_df=0.95, min_df=2,
                                max_features=n_features,
                                stop_words='english')
t0 = time()
tf = tf_vectorizer.fit_transform(data_samples)
print("done in %0.3fs." % (time() - t0))
# Use tf (raw term count) features for …
Run Code Online (Sandbox Code Playgroud)

python topic-modeling scikit-learn perplexity

5
推荐指数
1
解决办法
8008
查看次数

在 R 中使用 LDA 对新文本进行分类

我第一次尝试使用 R 进行主题建模。所以,这可能是一个非常愚蠢的问题,但我被困住了,谷歌搜索也没有给出明确的答案。

给定一个文档语料库,我使用 LDA 函数来识别语料库中的不同主题。一旦模型拟合完毕,我如何将该模型应用到一批新文档上,以将它们分类到迄今为止发现的主题中?

示例代码:

data("AssociatedPress", package = "topicmodels")

n <- nrow(AssociatedPress)
train_data <- sample(1:n,0.75*n,replace = FALSE)
AssociatedPress_train <- AssociatedPress[(train_data),]
AssociatedPress_test <- AssociatedPress[!(train_data),]

ap_lda <- LDA(AssociatedPress_train, k = 5, control = list(seed = 1234))
Run Code Online (Sandbox Code Playgroud)

现在,我可以使用拟合模型 ap_lda 对 AssociatedPress_test 中的文档进行分类吗?如果是,怎么办?如果没有,为未来的分类创建模型的最佳方法是什么?

r text-mining lda topic-modeling

5
推荐指数
1
解决办法
1235
查看次数

困惑随着主题数量的增加而增加

有很多关于这个具体问题的帖子,但我无法解决这个问题。我一直在 20newgroup 语料库上使用 Sklearn 和 Gensim 实现来试验 LDA。文献中描述,随着主题数量的增加,困惑度通常会降低,但我得到了不同的结果。

我已经尝试过不同的参数,但总的来说,当主题数量增加时,测试集的困惑度会增加,训练集的困惑度会减少。这可能表明模型在训练集上过度拟合。但使用其他文本数据集时也会出现类似的模式。此外,专门使用该数据集的研究也减少了困惑。(例如ng20 困惑度

我已经尝试过 SkLearn、Gensim 和 Gensim Mallet 包装器,所有包确实显示出不同的困惑度值(这是可以预期的,因为 LDA 是随机初始化 + 不同的推理算法),但常见的模式是每个包的困惑度确实增加,这与文献中的许多论文相矛盾。

# imports for code sample
from sklearn.feature_extraction.text import CountVectorizer
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.decomposition import LatentDirichletAllocation
Run Code Online (Sandbox Code Playgroud)

小示例代码

# retrieve the data
newsgroups_all = datasets.fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes'), shuffle = True)
print("Extracting tf features for LDA...")
tf_vectorizer_train = CountVectorizer(max_df=0.95, min_df=2,stop_words='english')
X = tf_vectorizer_train.fit_transform(newsgroups_all.data)
X_train, X_test = train_test_split(X,  test_size=0.2, random_state=42)
Run Code Online (Sandbox Code Playgroud)
k = N
lda = …
Run Code Online (Sandbox Code Playgroud)

python lda topic-modeling scikit-learn perplexity

5
推荐指数
0
解决办法
1519
查看次数

How can I replace emojis with text and treat them as single words?

I have to do a topic modeling based on pieces of texts containing emojis with R. Using the replace_emoji() and replace_emoticon functions let me analyze them, but there is a problem with the results.

A red heart emoji is translated as "red heart ufef". These words are then treated separately during the analysis and compromise the results.

Terms like "heart" can have a very different meaning as can be seen with "red heart ufef" and "broken heart" The function replace_emoji_identifier() …

r emoji topic-modeling data-preprocessing

5
推荐指数
1
解决办法
78
查看次数