Sol*_*olo 4 nlp apache-spark word2vec pyspark apache-spark-mllib
我正在尝试使用PySpark生成单词向量.使用gensim我可以看到单词和最接近的单词如下:
sentences = open(os.getcwd() + "/tweets.txt").read().splitlines()
w2v_input=[]
for i in sentences:
tokenised=i.split()
w2v_input.append(tokenised)
model = word2vec.Word2Vec(w2v_input)
for key in model.wv.vocab.keys():
print key
print model.most_similar(positive=[key])
Run Code Online (Sandbox Code Playgroud)
使用PySpark
inp = sc.textFile("tweet.txt").map(lambda row: row.split(" "))
word2vec = Word2Vec()
model = word2vec.fit(inp)
Run Code Online (Sandbox Code Playgroud)
如何从模型中的向量空间生成单词?那是与gensim相当的pyspark model.wv.vocab.keys()
?
背景:我需要将模型中的单词和同义词存储在地图中,以便稍后我可以使用它们来查找推文的情绪.我不能在pyspark中的map函数中重用word-vector模型,因为模型属于spark上下文(下面粘贴的错误).我想要pyspark word2vec版本而不是gensim,因为它为某些测试单词提供了更好的同义词.
Exception: It appears that you are attempting to reference SparkContext from a broadcast variable, action, or transformation.SparkContext can only be used on the driver, not in code that it run on workers.
Run Code Online (Sandbox Code Playgroud)
任何替代解决方案也欢迎.
Spark中的等效命令model.getVectors()
,它再次返回一个字典.这是一个快速的玩具示例,只有3个单词(alpha, beta, charlie
),改编自文档:
sc.version
# u'2.1.1'
from pyspark.mllib.feature import Word2Vec
sentence = "alpha beta " * 100 + "alpha charlie " * 10
localDoc = [sentence, sentence]
doc = sc.parallelize(localDoc).map(lambda line: line.split(" "))
word2vec = Word2Vec()
model = word2vec.fit(doc)
model.getVectors().keys()
# [u'alpha', u'beta', u'charlie']
Run Code Online (Sandbox Code Playgroud)
关于寻找同义词,你可能会发现我的另一个答案是有用的.
关于你提到的错误和可能的解决方法,请看看我的这个答案.