我想为语料库中的单词获取单词嵌入。我决定通过gensim库在GoogleNews中使用预训练的词向量。但我的语料库包含一些不在 GoogleNews 单词中的单词。对于这些缺失的单词,我想在 GoggoleNews 单词中使用 n 个最相似单词的算术平均值。首先,我加载 GoogleNews 并检查其中是否包含“to”一词?
#Load GoogleNews pretrained word2vec model
model=word2vec.KeyedVectors.Load_word2vec_format("GoogleNews-vectors-negative33.bin",binary=True)
print(model["to"])
我收到一个错误:keyError: "word 'to' not in vocabulary"
这么大的数据集可能没有这个词吗?对于像“a”这样的其他常用词也是如此!
为了向 word2vec 模型添加缺失的单词,首先我想获取 GoogleNews 中的单词索引。对于缺少的单词,我使用了索引 0。
#obtain index of words
word_to_idx=OrderedDict({w:0 for w in corpus_words})
word_to_idx=OrderedDict({w:model.wv.vocab[w].index for w in corpus_words if w in model.wv.vocab})
然后我计算每个缺失词的最相似词的嵌入向量的平均值。
missing_embd={}
for key,value in word_to_idx.items():
if value==0:
similar_words=model.wv.most_similar(key)
similar_embeddings=[model.wv[a[0]] for a in similar_words]
missing_embd[key]=mean(similar_embeddings)
然后我通过以下方式将这些新闻嵌入添加到 word2vec 模型中:
for word,embd in missing_embd.items():
# model.wv.build_vocab(word,update=True)
model.wv.syn0[model.wv.vocab[word].index]=embd
有不一致的地方。当我打印missing_embed 时,它是空的。仿佛没有遗漏的字眼。但是当我通过这个检查它时:
for w in tokens_lower:
if(w in model.wv.vocab)==False:
print(w)
print("***********")
我发现了很多缺失的单词。现在,我有 3 个问题: 1- 为什么missing_embed是空的,而有一些缺失的单词?2- GoogleNews 有没有可能没有像“to”这样的词?3-如何将新嵌入附加到 word2vec 模型?我使用了 build_vocab和syn0。谢谢。