我正在使用优秀的scikit-learn模块进行一些文本挖掘.我正在尝试对科学摘要进行聚类和分类.
我正在寻找一种方法来聚集我的tf-id表示集,而不必事先指定簇的数量.我无法找到一个可以做到这一点的好算法,并且仍能正确处理大型稀疏矩阵.我一直在研究使用scikit-learn的kmeans,但它无法确定最佳簇数(例如使用BIC).我也尝试使用高斯混合模型(使用最佳BIC分数来选择模型),但它们非常慢.
在我对文档进行聚类之后,我希望能够查看每个聚类的主题,这意味着他们倾向于使用的词.在给定数据矩阵和集群标签的情况下,有没有办法提取这些信息?也许采用聚类的均值并使用tf-id-vectorizer对其进行逆变换?我之前曾尝试使用卡方和随机森林对特征重要性进行排名,但这并不是说哪个标签类使用了什么.
我尝试使用NMF分解方法(仅使用scikit-learn网站的示例代码)进行主题检测.它工作得很好,很快就产生了非常有意义的话题.但是,我没有找到一种方法来使用它将每个数据点分配给一个集群,也没有自动确定"最佳"集群数.但这是我正在寻找的那种东西.
我还在某处读到,可以直接从适合的LDA模型中提取主题信息,但我不明白它是如何完成的.由于我已经将LDA实现为基线分类器和可视化工具,因此这可能是一个简单的解决方案.
如果我设法生成有意义的集群/主题,我将把它们与一些人造标签(不是基于主题的)进行比较,看看它们是如何对应的.但这是另一个主题的主题:-)
我想在我的Java中编译mallet(而不是使用命令行),所以我在我的项目中包含jar,并引用示例的代码:http://mallet.cs.umass.edu/topics-devel. PHP的,但是,当我运行此代码,有错误:
Exception in thread "main" java.lang.NoClassDefFoundError: gnu/trove/TObjectIntHashMap
at cc.mallet.types.Alphabet.<init>(Alphabet.java:51)
at cc.mallet.types.Alphabet.<init>(Alphabet.java:70)
at cc.mallet.pipe.TokenSequence2FeatureSequence.<init> (TokenSequence2FeatureSequence.java:35)
at mallet.TopicModel.main(TopicModel.java:25)
Caused by: java.lang.ClassNotFoundException: gnu.trove.TObjectIntHashMap
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 4 more
Run Code Online (Sandbox Code Playgroud)
我不确定导致错误的原因.有人可以帮忙吗?
package mallet;
import cc.mallet.util.*;
import cc.mallet.types.*;
import cc.mallet.pipe.*;
import cc.mallet.pipe.iterator.*;
import cc.mallet.topics.*;
import java.util.*;
import java.util.regex.*;
import java.io.*;
public class TopicModel {
public static void main(String[] args) throws Exception { …Run Code Online (Sandbox Code Playgroud) 我正在使用pyspark的LDAModel从语料库中获取主题.我的目标是找到与每个文档相关的主题.为此,我尝试根据Docs 设置topicDistributionCol.由于我是新手,我不确定本专栏的目的是什么.
from pyspark.ml.clustering import LDA
lda_model = LDA(k=10, optimizer="em").setTopicDistributionCol("topicDistributionCol")
// documents is valid dataset for this lda model
lda_model = lda_model.fit(documents)
transformed = lda_model.transform(documents)
topics = lda_model.describeTopics(maxTermsPerTopic=num_words_per_topic)
print("The topics described by their top-weighted terms:")
print topics.show(truncate=False)
Run Code Online (Sandbox Code Playgroud)
它列出了termIndices和termWeights的所有主题.
下面的代码会给我topicDistributionCol.这里每行都是针对每个文档的.
print transformed.select("topicDistributionCol").show(truncate=False)
Run Code Online (Sandbox Code Playgroud)
我想得到像这样的文档主题矩阵.有没有可能与pysparks LDA模型?
doc | topic
1 | [2,4]
2 | [3,4,6]
Run Code Online (Sandbox Code Playgroud)
注意:我之前使用gensims LDA模型使用以下代码完成了此操作.但我需要使用pysparks LDA模型.
texts = [[word for word in document.lower().split() if word not in stoplist] for document in documents]
dictionary = corpora.Dictionary(texts)
corpus = …Run Code Online (Sandbox Code Playgroud) 我需要处理 LDA 输出中的主题 (lda.show_topics(num_topics=-1, num_words=100...),然后比较我用 pyLDAvis 图所做的事情,但主题编号的编号不同。有没有办法我可以匹配他们吗?
不确定这是否是正确的论坛,但我想知道是否有人理解当 lambda = 0 时如何解释 pyLDAvis 图右侧红条与蓝条的宽度(请参阅http://www.kennyshirley)。 com/LDAvis/#topic=0&lambda=0.01&term=用于演示,用于示例)。据我所知,当 lambda = 1 时,红色条代表给定主题中术语的计数,灰色条代表语料库中总体相同术语的计数。我不明白当 lambda = 0 时显示的内容以及为什么条形图似乎不再以任何方式排序。你能帮忙吗?
我在安装topicmodels包时遇到错误R.
关于运行install.packages("topicmodels",dependencies=TRUE)以下是我得到的最后几行.请帮忙.我的R版本是3.1.3.
g++ -I/usr/share/R/include -DNDEBUG -fpic -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -D_FORTIFY_SOURCE=2 -g -c utilities.cpp -o utilities.o
gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG -fpic -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -D_FORTIFY_SOURCE=2 -g -c utils.c -o utils.o
g++ -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o topicmodels.so cokus.o common.o ctm.o dataset.o gsl-wrappers.o inference.o lda-alpha.o lda-inference.o lda-model.o model.o rGibbslda.o rctm.o rlda.o utilities.o utils.o -lgsl -lgslcblas -L/usr/lib/R/lib -lR
installing to /usr/local/lib/R/site-library/topicmodels/libs
** R
** data …Run Code Online (Sandbox Code Playgroud) 我已经运行我的代码来加载我的 pickle 保存的变量。这是我的代码
import pickle
last_priors_file = open('simpanan/priors', 'rb')
priors = pickle.load(last_priors_file)
Run Code Online (Sandbox Code Playgroud)
我得到这样的错误: AttributeError: Can't get attribute 'Wishart' on <module '__main__' from 'app.py'>
我是 python 新手,我需要构建一个 LDA 项目。做了一些预处理步骤后,这是我的代码:
dictionary = Dictionary(docs)
corpus = [dictionary.doc2bow(doc) for doc in docs]
from gensim.models import LdaModel
num_topics = 10
chunksize = 2000
passes = 20
iterations = 400
eval_every = None
temp = dictionary[0]
id2word = dictionary.id2token
model = LdaModel(corpus=corpus, id2word=id2word, chunksize=chunksize, \
alpha='auto', eta='auto', \
random_state=42, \
iterations=iterations, num_topics=num_topics, \
passes=passes, eval_every=eval_every)
Run Code Online (Sandbox Code Playgroud)
我想获得文档的主题分布,所有文档并获得主题分布的 10 概率,但是当我使用:
get_document_topics = model.get_document_topics(corpus)
print(get_document_topics)
Run Code Online (Sandbox Code Playgroud)
输出只出现
<gensim.interfaces.TransformedCorpus object at 0x000001DF28708E10>
Run Code Online (Sandbox Code Playgroud)
如何获得文档的主题分布?
python-3.x lda gensim topic-modeling probability-distribution
我创建了一个 Gensim LDA 模型,如本教程所示:https ://www.machinelearningplus.com/nlp/topic-modeling-gensim-python/
lda_model = gensim.models.LdaMulticore(data_df['bow_corpus'], num_topics=10, id2word=dictionary, random_state=100, chunksize=100, passes=10, per_word_topics=True)
Run Code Online (Sandbox Code Playgroud)
它生成 10 个主题,log_perplexity 为:
lda_model.log_perplexity(data_df['bow_corpus']) = -5.325966117835991
但是当我在其上运行一致性模型来计算一致性分数时,如下所示:
coherence_model_lda = CoherenceModel(model=lda_model, texts=data_df['bow_corpus'].tolist(), dictionary=dictionary, coherence='c_v')
with np.errstate(invalid='ignore'):
lda_score = coherence_model_lda.get_coherence()
Run Code Online (Sandbox Code Playgroud)
我的 LDA-Score 是 nan。我在这里做错了什么?
我正在使用这个GSDMM python 实现来聚类文本消息的数据集。根据初始论文, GSDMM 收敛速度快(大约 5 次迭代)。我也有收敛到一定数量的集群,但是每次迭代仍然有很多消息传递,所以很多消息仍然在改变它们的集群。
我的输出看起来像:
In stage 0: transferred 9511 clusters with 150 clusters populated
In stage 1: transferred 4974 clusters with 138 clusters populated
In stage 2: transferred 2533 clusters with 90 clusters populated
….
In stage 34: transferred 1403 clusters with 47 clusters populated
In stage 35: transferred 1410 clusters with 47 clusters populated
In stage 36: transferred 1430 clusters with 48 clusters populated
In stage 37: transferred 1463 clusters with 48 …Run Code Online (Sandbox Code Playgroud) topic-modeling ×10
lda ×5
python ×4
gensim ×3
python-3.x ×2
convergence ×1
data-mining ×1
mallet ×1
pickle ×1
pyspark ×1
python-2.7 ×1
r ×1
scikit-learn ×1
text-mining ×1
ubuntu-14.04 ×1