[英]gensim word2vec accessing in/out vectors
在word2vec模型中,有两个线性变换,它们将词汇空间中的单词带到隐藏层(“in”向量),然后返回到词汇空间(“out”向量)。 通常这个out向量在训练后被丢弃。 我想知道是否有一种简单的方法来访问gensim python中的out向量? 同样,我如何访问out矩阵?
动机:我想实现最近这篇论文中提出的想法: 文档排名的双嵌入空间模型
这里有更多细节。 从上面的参考文献中我们得到以下word2vec模型:
这里,输入层的大小为$ V $,词汇量大小,隐藏层大小为$ d $,输出层大小为$ V $。 两个矩阵是W_ {IN}和W_ {OUT}。 通常 ,word2vec模型仅保留W_IN矩阵。 这是返回的地方,在gensim中训练word2vec模型后,你会得到如下内容:
模型[ '土豆'] = [ - 0.2,0.5,2,...]
如何访问或保留W_ {OUT}? 这可能在计算上非常昂贵,而且我真的希望在gensim中使用一些内置方法来执行此操作,因为我担心如果我从头开始编写代码,它就不会提供良好的性能。
下面的代码将启用保存/加载模型。 它内部使用pickle,可选择将模型的内部大型NumPy矩阵直接从磁盘文件映射到虚拟内存中,以进行进程间内存共享。
model.save('/tmp/mymodel.model')
new_model = gensim.models.Word2Vec.load('/tmp/mymodel')
一些背景信息 Gensim是一个免费的Python库,用于处理原始的非结构化数字文本(“纯文本”)。 gensim中的算法,例如潜在语义分析,潜在Dirichlet分配和随机预测,通过检查训练文档语料库中单词的统计共现模式来发现文档的语义结构。
一些很好的博客描述了使用和示例代码库来启动项目
这里安装参考
希望这可以帮助!!!
在word2vec.py文件中,您需要进行此更改在以下函数中,它当前返回“in”向量。 因为你想要“出”矢量。 “in”保存在syn0对象中,“out”保存在syn1neg对象变量中。
def save_word2vec_format(self, fname, fvocab=None, binary=False):
....
....
row = self.syn1neg[vocab.index]
要获得任何单词的syn1,这可能会有效。
model.syn1[model.wv.vocab['potato'].point]
model是你训练过的word2vec模型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.