2016-12-02 5 views
0

私のgensim Word2Vecモデルの単語をマッピングに置き換えたいと思います。マッピングのあるgensim Word2Vec単語の名前変更

私の現在のモデルは、ベクトルにマップする単語'foo'あり

:どのように私は、この新しいでモデルを再構築することができd = {'foo': 'bar', ...}

>>> model['foo'] 
[1.0 0.0] 

私はマッピングを持っているがそのようなマッピング

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

答えて

0

1つの解決策は、モデルを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') 
関連する問題