[英]Rename gensim Word2Vec words with mapping
我想用映射替換我的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')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.