我想将word2vec保存到文件中.
model = Word2Vec(sentences, size=vector_size, window=5, min_count=5, workers=4)
fo = open("foo.txt", "wb")
model.save(fo)
Run Code Online (Sandbox Code Playgroud)
我在genericpath.py中收到以下错误
File "word2Vec_impl.py", line 39, in <module>
model.save(fo, separately=None)
File "C:\Python27\lib\site-packages\gensim\models\word2vec.py", line 669, in s
ave
super(Word2Vec, self).save(*args, **kwargs)
File "C:\Python27\lib\site-packages\gensim\utils.py", line 269, in save
pickle(self, fname)
File "C:\Python27\lib\site-packages\gensim\utils.py", line 608, in pickle
with smart_open(fname, 'wb') as fout: # 'b' for binary, needed on Windows
File "C:\Python27\lib\site-packages\gensim\utils.py", line 596, in smart_open
_, ext = path.splitext(fname)
File "C:\Python27\lib\ntpath.py", line 190, in splitext
return genericpath._splitext(p, sep, altsep, extsep)
File …Run Code Online (Sandbox Code Playgroud) 我想想象一下从gensim库创建的word2vec.我尝试了sklearn,但似乎我需要安装一个开发人员版本来获取它.我尝试安装开发人员版本,但这不适用于我的机器.是否可以修改此代码以显示word2vec模型?
我正在使用Python中的gensim处理word2vec模型,但我发现结果是具有相同主题的单词,同义词只是结果的一部分.
我可以根据我所做的工作找到单词的同义词吗?
任何回复将不胜感激!
我在spark中运行word2vec,当涉及到时fit(),在UI中只观察到一个任务,如图像:
.
根据配置,num-executors = 1000, executor-cores = 2.RDD合并到2000个分区.这需要相当长的时间mapPartitionsWithIndex.它可以分发给多个执行者或任务吗?
我正在训练一个如下Word2Vec模型:
model = Word2Vec(documents, size=200, window=5, min_count=0, workers=4, iter=5, sg=1)
Run Code Online (Sandbox Code Playgroud)
和Doc2Vec模型如:
doc2vec_model = Doc2Vec(size=200, window=5, min_count=0, iter=5, workers=4, dm=1)
doc2vec_model.build_vocab(doc2vec_tagged_documents)
doc2vec_model.train(doc2vec_tagged_documents, total_examples=doc2vec_model.corpus_count, epochs=doc2vec_model.iter)
Run Code Online (Sandbox Code Playgroud)
具有相同的数据和可比较的参数.
在此之后我将这些模型用于我的分类任务.我发现简单地平均或总结word2vec文档的嵌入比使用doc2vec向量要好得多.我也尝试了更多的doc2vec迭代(25,80和150 - 没有区别).
任何提示或想法为什么以及如何改善doc2vec结果?
更新:这是如何doc2vec_tagged_documents创建的:
doc2vec_tagged_documents = list()
counter = 0
for document in documents:
doc2vec_tagged_documents.append(TaggedDocument(document, [counter]))
counter += 1
Run Code Online (Sandbox Code Playgroud)
关于我的数据的更多事实:
doc2vec模型,但结果几乎相同.我正在尝试使用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)
任何替代解决方案也欢迎.
我在一百万个摘要数据集(20亿字)上使用word2vec.为了找到大多数类似的文档,我使用了这个gensim.similarities.WmdSimilarity类.在尝试使用时检索最佳匹配时wmd_similarity_index[query],计算会花费大部分时间来构建字典.这是一段日志:
2017-08-25 09:45:39,441 : INFO : built Dictionary(127 unique tokens: ['empirical', 'model', 'estimating', 'vertical', 'concentration']...) from 2 documents (total 175 corpus positions)
2017-08-25 09:45:39,445 : INFO : adding document #0 to Dictionary(0 unique tokens: [])
Run Code Online (Sandbox Code Playgroud)
这部分是什么?它依赖于查询吗?有没有办法一次性完成这些计算?
编辑:我的代码中的培训和评分阶段:
培训并保存到磁盘:
w2v_size = 300
word2vec = gensim.models.Word2Vec(texts, size=w2v_size, window=9, min_count=5, workers=1, sg=1, hs=1, iter=20) # sg=1 means skip gram is used
word2vec.save(utils.paths.PATH_DATA_GENSIM_WORD2VEC)
corpus_w2v_wmd_index = gensim.similarities.WmdSimilarity(texts, word2vec.wv)
corpus_w2v_wmd_index.save(utils.paths.PATH_DATA_GENSIM_CORPUS_WORD2VEC_WMD_INDEX)
Run Code Online (Sandbox Code Playgroud)
载入和评分:
w2v = gensim.models.Word2Vec.load(utils.paths.PATH_DATA_GENSIM_WORD2VEC)
words = [t for t in proc_text …Run Code Online (Sandbox Code Playgroud) 如果唯一字的总数大于10亿,则在word2vec算法中设置的矢量大小的最佳数目是多少?
我正在为word2vec使用Apache Spark Mllib 1.6.0。
示例代码:-
public class Main {
public static void main(String[] args) throws IOException {
SparkConf conf = new SparkConf().setAppName("JavaWord2VecExample");
conf.setMaster("local[*]");
JavaSparkContext jsc = new JavaSparkContext(conf);
SQLContext sqlContext = new SQLContext(jsc);
// $example on$
// Input data: Each row is a bag of words from a sentence or document.
JavaRDD<Row> jrdd = jsc.parallelize(Arrays.asList(
RowFactory.create(Arrays.asList("Hi I heard about Spark".split(" "))),
RowFactory.create(Arrays.asList("Hi I heard about Java".split(" "))),
RowFactory.create(Arrays.asList("I wish Java could use case classes".split(" "))),
RowFactory.create(Arrays.asList("Logistic regression models are …Run Code Online (Sandbox Code Playgroud) 我为我的幼稚而感到抱歉,但我不明白为什么NN训练过程(word2vec)产生的词嵌入实际上是向量。
嵌入是降维的过程,在训练过程中,NN将词的1/0数组缩小为较小的数组,该过程不执行任何应用矢量算法的过程。
因此,结果是我们只有数组而不是向量。为什么将这些数组视为向量?
即使我们得到矢量,为什么每个人都将它们描述为来自原点(0,0)的矢量?
再次,对不起,如果我的问题看起来很愚蠢。
我正在使用基于gensim word2vec模型的库node2vec来对嵌入空间中的节点进行编码,但是当我要适合word2vec对象时,会收到以下警告:
C:\ Users \ lenovo \ Anaconda3 \ lib \ site-packages \ gensim \ models \ base_any2vec.py:743:UserWarning:未加载C扩展名,培训会很慢。安装C编译器并重新安装gensim,以进行快速培训。
有人可以帮我解决这个问题吗?
word2vec ×10
gensim ×4
nlp ×3
python ×3
apache-spark ×2
anaconda ×1
cpu-word ×1
doc2vec ×1
embedding ×1
pyspark ×1
python-3.x ×1
scala ×1
scikit-learn ×1