2017-07-27 3 views
0

Ich versuche, Wort Vektoren mit PySpark zu generieren. Mit GENSIM ich die Worte und die nächsten Worte, wie unten sehen:Wie man die Wortliste vom pyspark word2vec Modell erhält?

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

Mit PySpark

inp = sc.textFile("tweet.txt").map(lambda row: row.split(" ")) 
word2vec = Word2Vec() 
model = word2vec.fit(inp) 

Wie kann ich die Worte aus dem Vektorraum in Modell generieren? Das ist das pyspark Äquivalent des Gensim model.wv.vocab.keys()?

Hintergrund: Ich muss die Wörter und die Synonyme aus dem Modell in einer Karte speichern, damit ich sie später für das Finden der Stimmung eines Tweets verwenden kann. Ich kann das Wortvektormodell in den Kartenfunktionen in pyspark nicht verwenden, da das Modell zum Funkenkontext gehört (Fehler unten eingefügt). Ich möchte die pyspark word2vec-Version anstelle von Gensim, weil es bessere Synonyme für bestimmte Testwörter bietet.

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. 

Jede alternative Lösung ist ebenfalls willkommen.

Antwort

2

Der entsprechende Befehl in Spark ist model.getVectors(), der wiederum ein Wörterbuch zurückgibt. Hier ist ein kurzes Spielzeug Beispiel mit nur drei Worten (alpha, beta, charlie), angepasst von den 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'] 

In Bezug auf Synonyme zu finden, können Sie another answer of mine nützlich finden.

In Bezug auf den Fehler, den Sie erwähnen und eine mögliche Problemumgehung, werfen Sie einen Blick auf this answer von mir.

+1

Danke..das ist genau das, was ich wollte – Solo

+0

@Solo Sie sind sehr willkommen - und danke für die Annahme und Upvoting – desertnaut

Verwandte Themen