首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用gensim KeyedVectors减去和添加向量?

如何用gensim KeyedVectors减去和添加向量?
EN

Stack Overflow用户
提问于 2021-01-07 12:03:11
回答 1查看 714关注 0票数 2

对于一个我使用(来自word2vec-google-news-300模型)的项目,我需要添加和减去单词向量

不幸的是,我试过了,但做不到。

让我们看看禽兽的例子,皇后~=国王-男人+女人。

当我想从国王那里减掉男人并增加女人时,

我可以用天才来做这个

代码语言:javascript
运行
复制
# model is loaded using gensim.models.KeyedVectors.load()
model.wv.most_similar(positive=["king", "woman"], negative=["man"])[0]

如预期的那样,返回我使用的模型的('queen', 0.7118192911148071)

现在,为了实现添加和减法向量(它们都是单元赋范),我尝试了以下代码:

代码语言:javascript
运行
复制
 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),这不是我所期望的。

我犯了什么错?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-07 18:06:35

你做的一般都是对的,但请注意:

  • most_similar()方法还从其结果中取消了所提供的任何命名单词的资格--因此,即使'king'仍然是与结果最接近的单词,它也将被忽略。在忽略输入词之后,您的公式很可能将'queen'作为下一个最接近的单词,这就是“类推”测试所需要的全部内容。
  • most_similar()方法还对归一化为单位长度的向量的版本执行向量算法,这可能导致略有不同的答案。如果您将model.wv['king']的用法改为model.get_vector('king', norm=True),您将得到单元赋范向量。

也见前面类似的答案:https://stackoverflow.com/a/65065084/130288

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65612062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档