如何解决如何使用 gensim KeyedVectors 减去和添加向量?
对于我使用 gensim.models.KeyedVectors(来自 word2vec-google-news-300
模型)的项目,我需要添加和减去词向量 >
不幸的是,我已经尝试过,但无法正确执行。
让我们看一下普遍的例子queen ~= king - man + Woman。
当我想从 king 中减去 man 并添加 woman 时,
我可以用 gensim 做到这一点
# model is loaded using gensim.models.KeyedVectors.load()
model.wv.most_similar(positive=["king","woman"],negative=["man"])[0]
正如预期的那样,它为我使用的模型返回 ('queen',0.7118192911148071)
。
现在,为了实现相同的加减向量(它们都是单位规范的),我尝试了以下代码:
vec1,vec2,vec3 = model.wv["king"],model.wv["man"],model.wv["woman"]
result = model.similar_by_vector(vec1 - vec2 + vec3)[0]
上面代码中的 result
是 ('king',0.7992597222328186)
,这不是我所期望的。
我的错误是什么?
解决方法
您通常在做正确的事情,但请注意:
-
arr
方法还会从其结果中排除任何提供的命名词 - 因此即使most_similar()
是(仍然)与结果最接近的词,它也会被忽略。在忽略输入词之后,您的公式很可能将'king'
作为下一个最接近的词 - 这就是“类比”测试所需要的。 -
'queen'
方法还对归一化为单位长度的向量版本进行向量算术,这可能会导致略有不同的答案。如果您将most_similar()
的使用更改为model.wv['king']
,您将获得单位规范向量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。