2017-07-27 14 views
0

私はPySparkを使って単語ベクトルを生成しようとしています。 PySparkpyspark word2vecモデルから単語リストを取得する方法は?

私がモデルにベクトル空間から単語を生成することができますどのように
inp = sc.textFile("tweet.txt").map(lambda row: row.split(" ")) 
word2vec = Word2Vec() 
model = word2vec.fit(inp) 

を使用して

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]) 

:gensimを使用して、私は言葉と以下のように最も近い単語を見ることができますか?それはgensim model.wv.vocab.keys()のpysparkに相当しますか?

背景:モデルの単語と同義語をマップに保存する必要があるので、後でツイートの感想を見つけるために使うことができます。モデルがsparkコンテキスト(以下のペーストされたエラー)に属しているので、私はpysparkのマップ関数で単語ベクトルモデルを再利用することはできません。私は特定のテスト単語のためのより良い同義語を提供するので、gensimではなくpyspark word2vecバージョンが必要です。

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. 

代替ソリューションも歓迎します。

答えて

2

Sparkの同等のコマンドはmodel.getVectors()であり、これも辞書を返します。ここでdocumentationから適応のみ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'] 

、あなたはanother answer of mineが役に立つかもしれません。

あなたが言及しているエラーと考えられる回避策については、私のthis answerを見てください。

+1

ありがとうございました – Solo

+0

@Soloあなたは大歓迎です - 受け入れ&アップ投票してくれてありがとう – desertnaut

関連する問題