pyspark - 如何使用 pyspark(2.1.0) LdA 获取与每个文档关联的主题?

标签 pyspark data-mining lda topic-modeling data-processing

我正在使用pyspark的LDAModel从语料库中获取主题。我的目标是找到与每个文档相关的主题。为此,我尝试按照文档设置 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)

它列出了带有 termIndices 和 termWeights 的所有主题。

enter image description here

下面的代码会给我 topicDistributionCol。这里每一行代表每个文档。

print transformed.select("topicDistributionCol").show(truncate=False)

enter image description here

我想得到这样的文档主题矩阵。 pysparks LDA 模型可以吗?

doc | topic 
1   |  [2,4]
2   |  [3,4,6]

注意:我之前已经使用 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 = [dictionary.doc2bow(text) for text in texts]
doc_topics = LdaModel(corpus=corpus, id2word=dictionary, num_topics=10, passes=10)
## to fetch topics for one document
vec_bow = dictionary.doc2bow(text[0])
Topics = doc_topics[vec_bow]
Topic_list = [x[0] for x in Topics]
## topic list is [1,5]

最佳答案

使用 toPandas 可以帮助:

df_p = transformed.select('topicDistributionCol').toPandas()
df_p1 = df_p.topicDistribution.apply(lambda x:np.array(x))
df_p2 = pd.DataFrame(df_p1.tolist()).apply(lambda x:x.argmax(),axis=1)
df_p3 = df_p2.reset_index()
df_p3.columns = ['doc','topic']
df_p3

关于pyspark - 如何使用 pyspark(2.1.0) LdA 获取与每个文档关联的主题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41958469/

相关文章:

matlab - 如何获得固定大小的SIFT特征向量?

r - 如何将实验性聚类算法与预期结果进行比较

python - 我应该使用 tfidf 语料库还是仅使用语料库来使用 LDA 推断文档?

java - 从 Mallet 中的 LDA 模型获取词主题矩阵

dataframe - Pyspark Dataframe 差异 - param != null 不返回的地方?

python-3.x - 在 Spark 2.1.0 上通过 python3 在 Zeppelin 中使用 pyspark

python - Pyspark - 将字典列表(piplelinedRDD)扁平化为单个字典并按键按值分组

python - 大量记录之间的高效关联计算

algorithm - LDA和主题模型

python - 根据条件将列添加到 pyspark 数据框