gensim word2vec访问/传出向量

时间:2016-11-07 06:03:01

标签: python gensim

在word2vec模型中,有两个线性变换将词汇空间中的单词转换为隐藏层(“in”向量),然后返回词汇空间(“out”向量)。通常这个out向量在训练后被丢弃。我想知道是否有一种简单的方法来访问gensim python中的out向量?同样,我如何访问out矩阵?

动机:我想实现最近这篇论文中提出的想法:A Dual Embedding Space Model for Document Ranking

以下是更多详情。从上面的参考文献中我们得到以下word2vec模型:

enter image description here

此处,输入图层的大小为$ V $,词汇量大小,隐藏图层的大小为$ d $,输出图层的大小为$ V $。两个矩阵是W_ {IN}和W_ {OUT}。 通常,word2vec模型仅保留W_IN矩阵。这是返回的内容,在gensim中训练word2vec模型之后,你会得到类似的东西:

  

model ['potato'] = [ - 0.2,0.5,2,...]

如何访问或保留W_ {OUT}?这可能在计算上非常昂贵,我真的希望在gensim中使用一些内置的方法来做到这一点,因为我担心如果我从头开始编写代码,它就不会提供良好的性能。

4 个答案:

答案 0 :(得分:6)

虽然这可能不是一个正确的答案(暂时还没有评论)并且没有人指出这一点,但请看一下here。创作者似乎回答了类似的问题。这也是你有更高机会获得有效答案的地方。

在word2vec源代码中发布的link中,您可以更改syn1删除以满足您的需求。只要记得在你完成后删除它,因为它被证明是一个记忆猪。

答案 1 :(得分:0)

下面的代码将启用保存/加载模型。它内部使用pickle,可选择将模型的内部大型NumPy矩阵直接从磁盘文件映射到虚拟内存中,以进行进程间内存共享。

model.save('/tmp/mymodel.model')
new_model = gensim.models.Word2Vec.load('/tmp/mymodel')

一些背景信息 Gensim是一个免费的Python库,用于处理原始的非结构化数字文本(“纯文本”)。 gensim中的算法,如潜在语义分析,潜在Dirichlet分配和随机预测,通过检查培训文档语料库中单词的统计共现模式,发现文档的语义结构。

一些很好的博客描述了项目的使用和示例代码库

安装参考here

希望这有帮助!!!

答案 2 :(得分:0)

在word2vec.py文件中,您需要进行此更改 在以下函数中,它当前返回“in”向量。因为你想要“出”矢量。 “in”保存在syn0对象中,“out”保存在syn1neg对象变量中。

def save_word2vec_format(self, fname, fvocab=None, binary=False):
  ....
  ....
  row = self.syn1neg[vocab.index]

答案 3 :(得分:0)

要获取任何单词的syn1,这可能会起作用。

model.syn1[model.wv.vocab['potato'].point]

模型是您训练有素的word2vec模型。