Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用映射重命名gensim Word2Vec单词_Python_Gensim_Word2vec - Fatal编程技术网

Python 使用映射重命名gensim Word2Vec单词

Python 使用映射重命名gensim Word2Vec单词,python,gensim,word2vec,Python,Gensim,Word2vec,我想用映射替换gensim Word2Vec模型中的单词 示例 我当前的模型有一个单词'foo',它映射到一个向量: >>> model['foo'] [1.0 0.0] 我有映射:d={'foo':'bar',…} 如何使用此新映射重建模型,以便 >>> model['bar'] # in place of 'foo' [1.0 0.0] 一种解决方案是以基于C的word2vec格式保存模型,并使用awk将原始单词替换为新词的映射 假设我们有表单的文件

我想用映射替换gensim Word2Vec模型中的单词

示例

我当前的模型有一个单词
'foo'
,它映射到一个向量:

>>> model['foo']
[1.0 0.0]
我有映射:
d={'foo':'bar',…}

如何使用此新映射重建模型,以便

>>> model['bar']  # in place of 'foo'
[1.0 0.0]

一种解决方案是以基于C的word2vec格式保存模型,并使用
awk
将原始单词替换为新词的映射

假设我们有表单的文件映射:

$ cat map.txt
foo:bar
...
我们可以通过以下方式重新创建模型:

import subprocess as sp
import shlex

from gensim.models import Word2Vec

model.save_word2vec_format('embeddings.txt', binary=False)

CMD = r"""
awk -F'[ ]|:' 'FNR==NR {a[$1]=$2; next} FNR==1{print $0} FNR!=1{$1=a[$1]; print $0}' map.txt embeddings.txt
"""

with open('new_embeddings.txt', 'w') as f:
    p = sp.Popen(shlex.split(CMD), stdout=f)

new_model = Word2Vec.load_word2vec_format('new_embeddings.txt')

new_model.create_binary_tree()
另一方面,我的映射实际上是一个数组,我在数组中训练单词的索引
arr
。我使用numpy创建了地图文件:

import numpy as np

np.savetxt('map.txt', np.c_[np.arange(arr.size), arr], '%d:%s')