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)
关于寻找同义词,你可能会发现我的另一个答案是有用的.
关于你提到的错误和可能的解决方法,请看看我的这个答案.
| 归档时间: |
|
| 查看次数: |
2442 次 |
| 最近记录: |