对于一个我使用(来自word2vec-google-news-300
模型)的项目,我需要添加和减去单词向量。
不幸的是,我试过了,但做不到。
让我们看看禽兽的例子,皇后~=国王-男人+女人。
当我想从国王那里减掉男人并增加女人时,
我可以用天才来做这个
# model is loaded using gensim.models.KeyedVectors.load()
model.wv.most_similar(positive=["king", "woman"], negative=["man"])[0]
如预期的那样,返回我使用的模型的('queen', 0.7118192911148071)
。
现在,为了实现添加和减法向量(它们都是单元赋范),我尝试了以下代码:
vec_king, vec_man, vec_woman = model.wv["king"], model.wv["man"], model.wv["woman"]
result = model.similar_by_vector(vec_king - vec_man + vec_woman)[0]
上面的代码中的result
是('king', 0.7992597222328186)
,这不是我所期望的。
我犯了什么错?
发布于 2021-01-07 18:06:35
你做的一般都是对的,但请注意:
most_similar()
方法还从其结果中取消了所提供的任何命名单词的资格--因此,即使'king'
仍然是与结果最接近的单词,它也将被忽略。在忽略输入词之后,您的公式很可能将'queen'
作为下一个最接近的单词,这就是“类推”测试所需要的全部内容。most_similar()
方法还对归一化为单位长度的向量的版本执行向量算法,这可能导致略有不同的答案。如果您将model.wv['king']
的用法改为model.get_vector('king', norm=True)
,您将得到单元赋范向量。https://stackoverflow.com/questions/65612062
复制相似问题