2016-12-02 2 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

한 가지 해결책은 모델을 C 기반 word2vec 형식으로 저장하고 원래 단어를 awk을 사용하여 새 단어의 매핑으로 바꾸는 것입니다. 옆으로 내 매핑이 실제로 배열했다로서 내가 훈련이에 어디에

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() 

: 우리를 통해 모델을 다시 만들 수 있습니다

$ cat map.txt 
foo:bar 
... 

:

우리는 형식의 파일 매핑이 있다고 가정 어떤 배열에있는 단어의 색인 arr. numpy를 사용하여 맵 파일을 만들었습니다.

import numpy as np 

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