标签: word2vec

gensim错误:没有名为gensim的模块

我试图导入gensim.

我有以下代码

import gensim
model = gensim.models.Word2Vec.load_word2vec_format('./model/GoogleNews-  
vectors-negative300.bin', binary=True)  
Run Code Online (Sandbox Code Playgroud)

我收到以下错误.

ImportError                               Traceback (most recent call  
last)
<ipython-input-5-50007be813d4> in <module>()
----> 1 import gensim
  2 model = gensim.models.Word2Vec.load_word2vec_format('./model  
/GoogleNews-vectors-negative300.bin', binary=True)

ImportError: No module named 'gensim'
Run Code Online (Sandbox Code Playgroud)

我在python中安装了gensim.我使用genssim作为word2vec.

python linux gensim word2vec

21
推荐指数
3
解决办法
3万
查看次数

生成器不是迭代器?

我有一个生成器(一个产生东西的函数),但是当试图将它传递给gensim.Word2Vec我时,我得到以下错误:

TypeError:您不能将生成器作为句子参数传递.尝试一个迭代器.

发生器不是一种迭代器吗?如果没有,我如何从中制作迭代器?

看一下库代码,它似乎只是简单地迭代句子for x in enumerate(sentences),这对我的生成器来说效果很好.那么是什么导致错误?

python gensim word2vec

20
推荐指数
2
解决办法
4361
查看次数

Word2Vec:维数

我正在使用Word2Vec,其中包含大约11,000,000个令牌的数据集,它们希望同时进行单词相似性(作为下游任务的同义词提取的一部分),但我不太清楚我应该使用Word2Vec多少维度.根据令牌/句子的数量,是否有人对要考虑的维度范围有一个良好的启发式?

nlp machine-learning word2vec

19
推荐指数
1
解决办法
1万
查看次数

给出最相似的单词,给出单词的向量(不是单词本身)

使用该gensim.models.Word2Vec库,您可以提供一个模型和一个"单词",您可以为其找到最相似的单词列表:

model = gensim.models.Word2Vec.load_word2vec_format(model_file, binary=True)
model.most_similar(positive=[WORD], topn=N)
Run Code Online (Sandbox Code Playgroud)

我想知道是否有可能将系统作为输入模型和"向量",并要求系统返回顶部相似的单词(它们的向量非常接近给定的向量).类似的东西:

model.most_similar(positive=[VECTOR], topn=N)
Run Code Online (Sandbox Code Playgroud)

我需要这个功能用于双语设置,其中我有2个模型(英语和德语),以及一些英语单词,我需要找到他们最相似的德国候选人.我想要做的是从英语模型中获取每个英语单词的向量:

model_EN = gensim.models.Word2Vec.load_word2vec_format(model_file_EN, binary=True)
vector_w_en=model_EN[WORD_EN]
Run Code Online (Sandbox Code Playgroud)

然后用这些向量查询德国模型.

model_DE = gensim.models.Word2Vec.load_word2vec_format(model_file_DE, binary=True)
model_DE.most_similar(positive=[vector_w_en], topn=N)
Run Code Online (Sandbox Code Playgroud)

我已经使用word2vec包中的原始距离函数在C中实现了这一点.但是,现在我需要它在python中,以便能够将它与我的其他脚本集成.

你知道在gensim.models.Word2Vec库或其他类似的库中是否已经有一个方法可以做到这一点吗?我需要自己实施吗?

python gensim word2vec

19
推荐指数
1
解决办法
2万
查看次数

SpaCy:如何加载Google新闻word2vec向量?

我尝试了几种加载google news word2vec向量的方法(https://code.google.com/archive/p/word2vec/):

en_nlp = spacy.load('en',vector=False)
en_nlp.vocab.load_vectors_from_bin_loc('GoogleNews-vectors-negative300.bin')
Run Code Online (Sandbox Code Playgroud)

以上给出:

MemoryError: Error assigning 18446744072820359357 bytes
Run Code Online (Sandbox Code Playgroud)

我也试过.gz打包向量; 或者使用gensim将它们加载并保存为新格式:

from gensim.models.word2vec import Word2Vec
model = Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)
model.save_word2vec_format('googlenews2.txt')
Run Code Online (Sandbox Code Playgroud)

然后,该文件包含每行上的单词及其单词向量.我试着加载它们:

en_nlp.vocab.load_vectors('googlenews2.txt')
Run Code Online (Sandbox Code Playgroud)

但它返回"0".

这样做的正确方法是什么?

更新:

我可以将自己创建的文件加载到spacy中.我在每一行使用带有"string 0.0 0.0 ...."的test.txt文件.然后使用.bzip2将此txt压缩到test.txt.bz2.然后我创建一个spacy兼容的二进制文件:

spacy.vocab.write_binary_vectors('test.txt.bz2', 'test.bin')
Run Code Online (Sandbox Code Playgroud)

我可以加载到spacy:

nlp.vocab.load_vectors_from_bin_loc('test.bin')
Run Code Online (Sandbox Code Playgroud)

这有效!但是,当我为googlenews2.txt执行相同的过程时,我收到以下错误:

lib/python3.6/site-packages/spacy/cfile.pyx in spacy.cfile.CFile.read_into (spacy/cfile.cpp:1279)()

OSError: 
Run Code Online (Sandbox Code Playgroud)

python nlp word2vec spacy

19
推荐指数
2
解决办法
9117
查看次数

加载预先计算的向量Gensim

我使用Gensim Python包来学习神经语言模型,我知道你可以提供一个训练语料库来学习模型.然而,已经存在许多以文本格式可用的预计算单词向量(例如http://www-nlp.stanford.edu/projects/glove/).有没有办法初始化一个只使用一些预先计算的向量的Gensim Word2Vec模型,而不是从头开始学习向量?

谢谢!

python nlp gensim word2vec

18
推荐指数
2
解决办法
1万
查看次数

如何在非常大的数据集上训练Word2vec?

我正在考虑在Web爬行转储上大量超过10 TB +的大规模数据上训练word2vec.

我个人训练c实施GoogleNews-2012转储(1.5gb)在我的iMac上花了大约3个小时来训练和生成向量(对速度印象深刻).我没有尝试python实现虽然:(我读到某处,在300向量长度的wiki转储(11gb)上生成向量大约需要9天生成.

  1. 如何加速word2vec?我是否需要在2-3天内使用分布式模型或我需要哪种类型的硬件?我有8gb内存的iMac.

  2. 哪一个更快?Gensim python或C实现?

我看到word2vec实现不支持GPU培训.

c python machine-learning word2vec

18
推荐指数
1
解决办法
1万
查看次数

Word2vec向量的长度有什么意义?

我正在使用Word2vec通过gensim与Google在Google新闻上训练的预训练矢量.我注意到我可以通过对Word2Vec对象进行直接索引查找来访问的单词vector 不是单位向量:

>>> import numpy
>>> from gensim.models import Word2Vec
>>> w2v = Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)
>>> king_vector = w2v['king']
>>> numpy.linalg.norm(king_vector)
2.9022589
Run Code Online (Sandbox Code Playgroud)

但是,在该most_similar方法中,不使用这些非单位矢量; 相反,从未记录的.syn0norm属性中使用规范化版本,该属性仅包含单位向量:

>>> w2v.init_sims()
>>> unit_king_vector = w2v.syn0norm[w2v.vocab['king'].index]
>>> numpy.linalg.norm(unit_king_vector)
0.99999994
Run Code Online (Sandbox Code Playgroud)

较大的向量只是单位向量的放大版本:

>>> king_vector - numpy.linalg.norm(king_vector) * unit_king_vector
array([  0.00000000e+00,  -1.86264515e-09,   0.00000000e+00,
         0.00000000e+00,  -1.86264515e-09,   0.00000000e+00,
        -7.45058060e-09,   0.00000000e+00,   3.72529030e-09,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
        ... (some lines omitted) ...
        -1.86264515e-09,  -3.72529030e-09,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00, …
Run Code Online (Sandbox Code Playgroud)

python nlp gensim word2vec

18
推荐指数
1
解决办法
6132
查看次数

在gensim Word2Vec模型中匹配单词和向量

我有gensim Word2Vec实现为我计算一些单词嵌入.据我所知,一切都非常奇妙; 现在我正在聚集创建的单词vector,希望得到一些语义分组.

下一步,我想看一下每个集群中包含的单词(而不是向量).即如果我有嵌入的向量[x, y, z],我想找出这个向量代表的实际单词.我可以通过调用model.vocab和单词向量来获得单词/ Vocab项目model.syn0.但我找不到这些明确匹配的位置.

这比我想象的要复杂得多,我觉得我可能会错过这种明显的做法.任何帮助表示赞赏!

问题:

将单词与嵌入向量相匹配Word2Vec ()- 如何进行?

我的方法:

在创建模型(下面的代码*)之后,我现在想要将分配给每个单词的索引(在build_vocab()阶段期间)与输出的向量矩阵相匹配model.syn0.从而

for i in range (0, newmod.syn0.shape[0]): #iterate over all words in model
    print i
    word= [k for k in newmod.vocab if newmod.vocab[k].__dict__['index']==i] #get the word out of the internal dicationary by its index
    wordvector= newmod.syn0[i] #get the vector with the corresponding index
    print wordvector == newmod[word] #testing: compare result of looking up …
Run Code Online (Sandbox Code Playgroud)

python vector machine-learning gensim word2vec

18
推荐指数
3
解决办法
1万
查看次数

Python:gensim:RuntimeError:在训练模型之前必须首先构建词汇表

我知道这问题已经被提出,但我仍然无法找到解决方案.

我想word2vec在自定义数据集上使用gensim ,但现在我仍然在弄清楚数据集必须采用的格式.我看了一下这篇文章,其中输入基本上是一个列表列表(一个包含其他列表的大列表,这些列表是来自NLTK Brown语料库的标记化句子).所以我认为这是我必须用于命令的输入格式word2vec.Word2Vec().但是,它不适用于我的小测试集,我不明白为什么.

我尝试过的:

这有效:

from gensim.models import word2vec
from nltk.corpus import brown
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

brown_vecs = word2vec.Word2Vec(brown.sents())
Run Code Online (Sandbox Code Playgroud)

这不起作用:

sentences = [ "the quick brown fox jumps over the lazy dogs","yoyoyo you go home now to sleep"]
vocab = [s.encode('utf-8').split() for s in sentences]
voc_vec = word2vec.Word2Vec(vocab)
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它不适用于"模拟"数据,即使它具有与布朗语料库中的句子相同的数据结构:

词汇:

[['the', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dogs'], ['yoyoyo', 'you', 'go', 'home', 'now', 'to', …
Run Code Online (Sandbox Code Playgroud)

python gensim word2vec

17
推荐指数
2
解决办法
2万
查看次数

标签 统计

word2vec ×10

python ×9

gensim ×7

nlp ×4

machine-learning ×3

c ×1

linux ×1

spacy ×1

vector ×1