【发布时间】:2019-06-15 00:06:36
【问题描述】:
我想看看我是否可以简单地为 gensim 的 Word2Vec 设置新的权重而无需训练。我从 scikit-learn(来自 sklearn.datasets import fetch_20newsgroups)获得了 20 个新闻组数据集,并在其上训练了一个 Word2Vec 实例:
model_w2v = models.Word2Vec(sg = 1, size=300)
model_w2v.build_vocab(all_tokens)
model_w2v.train(all_tokens, total_examples=model_w2v.corpus_count, epochs = 30)
这里的 all_tokens 是标记化的数据集。 然后我在没有训练的情况下创建了一个新的 Word2Vec 实例
model_w2v_new = models.Word2Vec(sg = 1, size=300)
model_w2v_new.build_vocab(all_tokens)
并将新 Word2Vec 的嵌入设置为等于第一个
model_w2v_new.wv.vectors = model_w2v.wv.vectors
大部分功能都按预期工作,例如
model_w2v.wv.similarity( w1='religion', w2 = 'religions')
> 0.4796233
model_w2v_new.wv.similarity( w1='religion', w2 = 'religions')
> 0.4796233
和
model_w2v.wv.words_closer_than(w1='religion', w2 = 'judaism')
> ['religions']
model_w2v_new.wv.words_closer_than(w1='religion', w2 = 'judaism')
> ['religions']
和
entities_list = list(model_w2v.wv.vocab.keys()).remove('religion')
model_w2v.wv.most_similar_to_given(entity1='religion',entities_list = entities_list)
> 'religions'
model_w2v_new.wv.most_similar_to_given(entity1='religion',entities_list = entities_list)
> 'religions'
但是,most_similar 不起作用:
model_w2v.wv.most_similar(positive=['religion'], topn=3)
[('religions', 0.4796232581138611),
('judaism', 0.4426296651363373),
('theists', 0.43141329288482666)]
model_w2v_new.wv.most_similar(positive=['religion'], topn=3)
>[('roderick', 0.22643062472343445),
> ('nci', 0.21744996309280396),
> ('soviet', 0.20012077689170837)]
我错过了什么?
免责声明。我在datascience.stackexchange 上发布了这个问题,但没有得到回应,希望在这里有更好的运气。
【问题讨论】:
-
令人惊讶的问题。这可能是距离计算方式的问题。你能分享
model_w2v_new.wv.most_similar_cosmul(positive=['religion'], topn=3)的输出吗?也许其中一个模型默认计算余弦距离而不是欧几里得 -
model_w2v_new.wv.most_similar_cosmul(positive=['religion'], topn=3)与model_w2v_new.wv.most_similar(positive=['religion'], topn=3)具有相同的效果和相同的结果。 gojomo在下面给出了答案。
标签: gensim word2vec word-embedding