如何从pyspark word2vec模型中获取单词列表?
How to obtain the word list from pyspark word2vec model?
我正在尝试使用 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])
使用 PySpark
inp = sc.textFile("tweet.txt").map(lambda row: row.split(" "))
word2vec = Word2Vec()
model = word2vec.fit(inp)
如何从模型中的向量 space 生成单词?那是 pyspark 相当于 gensim model.wv.vocab.keys()
?
背景:我需要将模型中的单词和同义词存储在地图中,以便稍后使用它们来查找推文的情绪。我不能在 pyspark 的地图函数中重用词向量模型,因为该模型属于 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.
也欢迎任何替代解决方案。
Spark 中的等效命令是 model.getVectors()
,它又是 returns 一个字典。这是一个只有 3 个单词的快速玩具示例 (alpha, beta, charlie
),改编自 documentation:
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']
关于查找同义词,您可能会发现 another answer of mine 有用。
关于您提到的错误和可能的解决方法,请查看我的 。
并且按照建议here,
如果您想在文档中包含所有单词,请相应地设置 MinCount 参数(默认值=5):
word2vec = Word2Vec()
word2vec.setMinCount(1)
我正在尝试使用 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])
使用 PySpark
inp = sc.textFile("tweet.txt").map(lambda row: row.split(" "))
word2vec = Word2Vec()
model = word2vec.fit(inp)
如何从模型中的向量 space 生成单词?那是 pyspark 相当于 gensim model.wv.vocab.keys()
?
背景:我需要将模型中的单词和同义词存储在地图中,以便稍后使用它们来查找推文的情绪。我不能在 pyspark 的地图函数中重用词向量模型,因为该模型属于 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.
也欢迎任何替代解决方案。
Spark 中的等效命令是 model.getVectors()
,它又是 returns 一个字典。这是一个只有 3 个单词的快速玩具示例 (alpha, beta, charlie
),改编自 documentation:
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']
关于查找同义词,您可能会发现 another answer of mine 有用。
关于您提到的错误和可能的解决方法,请查看我的
并且按照建议here, 如果您想在文档中包含所有单词,请相应地设置 MinCount 参数(默认值=5):
word2vec = Word2Vec()
word2vec.setMinCount(1)