簡體   English   中英

使用映射重命名gensim Word2Vec單詞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM