gensim most_similar 有positive和negative,怎么用?
gensim most_similar with positive and negative, how does it work?
我正在阅读 关于 Gensim 的内容 most_similar
:
it performs vector arithmetic: adding the positive vectors,
subtracting the negative, then from that resulting position, listing
the known-vectors closest to that angle.
但是我测试的时候,并不是这样的。我用 Gensim "text8"
数据集训练了一个 Word2Vec 并测试了这两个:
model.most_similar(positive=['woman', 'king'], negative=['man'])
>>> [('queen', 0.7131118178367615), ('prince', 0.6359186768531799),...]
model.wv.most_similar([model["king"] + model["woman"] - model["man"]])
>>> [('king', 0.84305739402771), ('queen', 0.7326322793960571),...]
它们显然不一样。即使是第一个中的女王分数是 0.713
而第二个中的 0.732
也不相同。
所以我再问一遍,Gensim most_similar
是如何工作的?为什么上面两个的结果不一样?
加法和减法不是所有它做的;具体描述请看源码:
你会看到加法和减法是在每个向量的 unit-normed 版本上,通过 get_vector(key, use_norm=True)
访问器。
如果您将 model[key]
的使用更改为 model.get_vector(key, use_norm=True)
,您应该会看到目标向量的方法外计算给出与让该方法结合 [=13] 相同的结果=] 和 negative
向量。
我正在阅读 most_similar
:
it performs vector arithmetic: adding the positive vectors, subtracting the negative, then from that resulting position, listing the known-vectors closest to that angle.
但是我测试的时候,并不是这样的。我用 Gensim "text8"
数据集训练了一个 Word2Vec 并测试了这两个:
model.most_similar(positive=['woman', 'king'], negative=['man'])
>>> [('queen', 0.7131118178367615), ('prince', 0.6359186768531799),...]
model.wv.most_similar([model["king"] + model["woman"] - model["man"]])
>>> [('king', 0.84305739402771), ('queen', 0.7326322793960571),...]
它们显然不一样。即使是第一个中的女王分数是 0.713
而第二个中的 0.732
也不相同。
所以我再问一遍,Gensim most_similar
是如何工作的?为什么上面两个的结果不一样?
加法和减法不是所有它做的;具体描述请看源码:
你会看到加法和减法是在每个向量的 unit-normed 版本上,通过 get_vector(key, use_norm=True)
访问器。
如果您将 model[key]
的使用更改为 model.get_vector(key, use_norm=True)
,您应该会看到目标向量的方法外计算给出与让该方法结合 [=13] 相同的结果=] 和 negative
向量。