- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 pyspark (spark 2.1.1) 中根据客户评论数据集训练 LDA 模型。现在,基于该模型,我想预测新的看不见的文本中的主题。
我使用以下代码来制作模型
from pyspark import SparkConf, SparkContext
from pyspark.sql import SparkSession
from pyspark.sql import SQLContext, Row
from pyspark.ml.feature import CountVectorizer
from pyspark.ml.feature import HashingTF, IDF, Tokenizer, CountVectorizer, StopWordsRemover
from pyspark.mllib.clustering import LDA, LDAModel
from pyspark.ml.clustering import DistributedLDAModel, LocalLDAModel
from pyspark.mllib.linalg import Vector, Vectors
from pyspark.sql.functions import *
import pyspark.sql.functions as F
path = "D:/sparkdata/sample_text_LDA.txt"
sc = SparkContext("local[*]", "review")
spark = SparkSession.builder.appName('Basics').getOrCreate()
df = spark.read.csv("D:/sparkdata/customers_data.csv", header=True, inferSchema=True)
data = df.select("Reviews").rdd.map(list).map(lambda x: x[0]).zipWithIndex().map(lambda words: Row(idd= words[1], words = words[0].split(" "))).collect()
docDF = spark.createDataFrame(data)
remover = StopWordsRemover(inputCol="words",
outputCol="stopWordsRemoved")
stopWordsRemoved_df = remover.transform(docDF).cache()
Vector = CountVectorizer(inputCol="stopWordsRemoved", outputCol="vectors")
model = Vector.fit(stopWordsRemoved_df)
result = model.transform(stopWordsRemoved_df)
corpus = result.select("idd", "vectors").rdd.map(lambda x: [x[0],Vectors.fromML(x[1])]).cache()
# Cluster the documents topics using LDA
ldaModel = LDA.train(corpus, k=3,maxIterations=100,optimizer='online')
topics = ldaModel.topicsMatrix()
vocabArray = model.vocabulary
print(ldaModel.describeTopics())
wordNumbers = 10 # number of words per topic
topicIndices = sc.parallelize(ldaModel.describeTopics(maxTermsPerTopic = wordNumbers))
def topic_render(topic): # specify vector id of words to actual words
terms = topic[0]
result = []
for i in range(wordNumbers):
term = vocabArray[terms[i]]
result.append(term)
return result
topics_final = topicIndices.map(lambda topic: topic_render(topic)).collect()
for topic in range(len(topics_final)):
print("Topic" + str(topic) + ":")
for term in topics_final[topic]:
print (term)
print ('\n')
现在我有一个数据框,其中有一列包含新的客户评论,我想预测它们属于哪个主题集群。我搜索过答案,大多推荐以下方式,如这里Spark MLlib LDA, how to infer the topics distribution of a new unseen document? 。
newDocuments: RDD[(Long, Vector)] = ...
topicDistributions = distLDA.toLocal.topicDistributions(newDocuments)
但是,我收到以下错误:
“LDAModel”对象没有属性“toLocal”。它也没有 topicDistribution 属性。
那么spark 2.1.1不支持这些属性吗?
还有其他方法可以从看不见的数据中推断主题吗?
最佳答案
您需要预处理新数据:
# import a new data set to be passed through the pre-trained LDA
data_new = pd.read_csv('YourNew.csv', encoding = "ISO-8859-1");
data_new = data_new.dropna()
data_text_new = data_new[['Your Target Column']]
data_text_new['index'] = data_text_new.index
documents_new = data_text_new
#documents_new = documents.dropna(subset=['Preprocessed Document'])
# process the new data set through the lemmatization, and stopwork functions
processed_docs_new = documents_new['Preprocessed Document'].map(preprocess)
# create a dictionary of individual words and filter the dictionary
dictionary_new = gensim.corpora.Dictionary(processed_docs_new[:])
dictionary_new.filter_extremes(no_below=15, no_above=0.5, keep_n=100000)
# define the bow_corpus
bow_corpus_new = [dictionary_new.doc2bow(doc) for doc in processed_docs_new]
然后你可以将它作为函数传递给经过训练的LDA。您所需要的只是 Bow_corpus:
ldamodel[bow_corpus_new[:len(bow_corpus_new)]]
如果您想以 csv 格式输出,请尝试以下操作:
a = ldamodel[bow_corpus_new[:len(bow_corpus_new)]]
b = data_text_new
topic_0=[]
topic_1=[]
topic_2=[]
for i in a:
topic_0.append(i[0][1])
topic_1.append(i[1][1])
topic_2.append(i[2][1])
d = {'Your Target Column': b['Your Target Column'].tolist(),
'topic_0': topic_0,
'topic_1': topic_1,
'topic_2': topic_2}
df = pd.DataFrame(data=d)
df.to_csv("YourAllocated.csv", index=True, mode = 'a')
我希望这有帮助:)
关于apache-spark - Spark 2.1.1 : How to predict topics in unseen documents on already trained LDA model in Spark 2. 1.1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55808041/
我致力于 Facebook 的 Google Chrome 扩展程序。 我有一个按钮,如果您单击它,则会出现一个包含最新事件线程的弹出窗口。我想对 facebook 服务器说,之后没有任何线程是“看不
我只喜欢在第一个 tr 中看到 th 但在第二个 tr 中的 th 消失了.您知道如何修复代码,使第一个 th 包含“Min.”吗?媒体宽度小于640px时可以显示文字吗?先感谢您!
我正在使用 PHP imap_search 来获取自给定日期以来未看到的消息列表,如下所示: imap_search($stream, 'UNSEEN SINCE 20-Sep-2015'); 这工作
在我的 Sprite Kit 应用程序中,在执行达到某个点后,我遇到了突然的延迟峰值。我相信我已经将问题范围缩小到我的 SKScene 子类中的以下片段。 - (void)touchesMoved:(
这个标题相当令人着迷,但我想不出更清晰的东西。 长话短说,我们正在创建一个连接到与 mySql 数据库通信的 node.js 服务器的移动应用程序。很常见的设置。现在,我们连接了多个用户,可以将“时刻
我一直在使用 fastai 的文本分类器 (https://docs.fast.ai/text.html)。我目前预测看不见的短语的情绪(正面或负面)如下: def _unpack_predictio
我有一个使用 devise 进行身份验证的简单 Rails 应用程序。我有兴趣为每个访问特定页面时更新的用户创建一个计数器。 例如: 用户计数器 = 4 用户访问页面A用户计数器 = 3 用户再次访问
我正在准备一个玩具spark.ml示例。 Spark version 1.6.0,在Oracle JDK version 1.8.0_65,pyspark和ipython笔记本上运行。 首先,它与Sp
我想在 php 中创建一个脚本来读取来自邮件帐户的所有邮件。我连接到服务器,我可以看到邮件,但是我想把它恢复到看不见的状态,我找不到执行此操作的功能。 最佳答案 如果我正确理解此页面: http://
我有一个大的马尔可夫链和一个样本,我想计算其可能性。问题是样本中的某些观察或转换不会发生在马尔可夫链中,这使得总似然为 0(或对数似然 - 无穷大)。不可能使用更多的数据来构建马尔可夫链。我想知道是否
我正在搜索此错误,但没有找到与 TrainValidationSplit 相关的任何内容。所以我想进行参数调整,并使用 TrainValidationSplit 执行此操作会出现以下错误:org.ap
我面临着这样的情况:我有一个通知/消息表。我想做的是获取: 最多 10 条消息 所有未读消息 有一个限制,如果有超过 10 条未读消息,我们只获取这些消息。所以基本上我希望最后有 10 条消息(未读和
我已经通过 SCP 传输数据并在上图中得到一些消息(黑色)。这些消息有什么关系(TCP ACKed...,TCP Zerowindow 和 TCP Prev...)。非常感谢您,对于网络新手的语言感到
label_encode_dict['cat116'] # output OrdinalEncoder(handle_unknown='use_encoded_value', unknown_valu
我们正在我们的服务器上进行一些负载测试,我正在使用 tshark 将一些数据捕获到 pcap 文件,然后使用 wireshark GUI 通过转到 Analyze -> expert Info 来查看
我正在 pyspark (spark 2.1.1) 中根据客户评论数据集训练 LDA 模型。现在,基于该模型,我想预测新的看不见的文本中的主题。 我使用以下代码来制作模型 from pyspark i
我是一名优秀的程序员,十分优秀!