apache-spark - 如何从pyspark word2vec模型中获取单词列表?

标签 apache-spark nlp pyspark apache-spark-mllib word2vec

我正在尝试使用 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)

如何从模型中的向量空间生成单词?那是 gensim 的 pyspark 等价物 model.wv.vocab.keys() ?

背景:我需要将模型中的单词和同义词存储在 map 中,以便以后可以使用它们来查找推文的情绪。我不能在 pyspark 的 map 函数中重用词向量模型,因为该模型属于 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() ,它再次返回一个字典。这是一个只有 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有用。

关于您提到的错误和可能的解决方法,请查看 this answer我的。

关于apache-spark - 如何从pyspark word2vec模型中获取单词列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45346418/

相关文章:

apache-spark - 将数据从 dstream 写入 parquet

python - Scikit Learn 中的 CountVectorizer

python - 在 spacy 中进行多类分类时出错

nlp - BERT 的无监督微调仅用于嵌入?

java - spark-class : line 71. ..没有那个文件或目录

apache-spark - 在 pyspark.ml 中使用 RandomForestClassifier 时,maxCategories 在 VectorIndexer 中无法按预期工作

python - Pandas 到PySpark转换器

python - 对于以下模式,PySpark regexp_replace 无法按预期工作

apache-spark - 有没有办法动态停止 Spark Structured Streaming?

scala - 如何使用 scala/spark 正确迭代/打印 Parquet ?