我正在寻找一种方法来将预先训练过的单词向量添加到word2vec gensim模型中。
我在txt(单词及其嵌入)中有一个预先训练过的word2vec模型,我需要在特定语料库中的文档之间获取Word Mover的距离(例如通过gensim.models.Word2Vec.wmdistance)新文件。
为了防止需要加载整个词汇表,我想只加载在语料库中找到的预训练模型的单词的子集。但是,如果新文档中的单词在语料库中找不到,但它们在原始模型中,则将它们添加到模型中,以便在计算中考虑它们。
我想要的是节省内存,以及可能对我有帮助的事情:
提前致谢。
答案 0 :(得分:2)
您可以只使用gensim.models.keyedvectors
中的keyedvectors。它们非常易于使用。
from gensim.models.keyedvectors import WordEmbeddingsKeyedVectors
w2v = WordEmbeddingsKeyedVectors(50) # 50 = vec length
w2v.add(new_words, their_new_vecs)
AND (如果您已经使用gensim.models.Word2Vec
建立了模型,则可以执行此操作。假设我想添加带有随机向量的令牌<UKN>
。
model.wv["<UNK>"] = np.random.rand(100) # 100 is the vectors length
完整的示例如下:
import numpy as np
import gensim.downloader as api
from gensim.models import Word2Vec
dataset = api.load("text8") # load dataset as iterable
model = Word2Vec(dataset)
model.wv["<UNK>"] = np.random.rand(100)