1

我正在使用 Glove、Gensim-word2vec模块,我可以使用它来返回实体之间的相似度分数,例如'man'and 'woman'will return 0.89034。但是有没有办法返回两个实体之间的语义关系呢?比如给定word'people'和a 'location',结果应该是关系'lives_in'

我可以做类似的事情:

print(model.most_similar(positive=['king', 'woman'], negative=['man']))

输出是:

[('queen', 0.775162398815155), ('prince', 0.6123066544532776), ('princess', 0.6016970872879028), ('kings', 0.5996100902557373), ('queens', 0.565579891204834), ('royal', 0.5646308660507202), ('throne', 0.5580971240997314), ('Queen', 0.5569202899932861), ('monarch', 0.5499411821365356), ('empress', 0.5295248627662659)]

期望的输出:

[(is_a, 0.3223), (same_as, 0349230), (people, 0302432) ...]
4

2 回答 2

1

不是真的,因为词向量并不真正知道这种关系的名称。

相反,这只是训练过程的一个有用、快乐的结果,单词以反映成对相似性的方式排列自己,并且在某些相对方向上,与我们的关系类型的心理模型模糊一致。

尽管这些方向很有用,但即使是像“part_of”(meronymy)或“more_specific_example_of”(hyponymy)这样尖锐的关系,在向量空间中也可能没有强大、一致的方向。

对于你的“男人”X“女人”的例子,并建议 X='similar_to' 将是一个合适的答案,这对我来说似乎很混乱。通常将“男人”到“女人”放在对比中,以强调一些与性别相关的差异/方向。说similar一个词是similar_to它的 10 个最近邻,或 100 个最近邻,或 10,000 个最近邻(与模型中的所有其他词相比)更有趣一点。您可以轻松阅读许多similar_to模型之外的关系,但是显着隔离人类感知方面的对可能更难标记/识别。(例如,“热”和“冷”非常相似,因为它们在相似的上下文中使用,但在语义上也是反义词,因为与某些框架相比,它们专门用于突出独特和相反的温度水平——参考。)

有更高级的工作明确地尝试创建更有能力回答问题的词向量集,尤其是与属性相关的问题——但标准词向量在这些事情上表现不佳。

于 2018-11-13T18:41:23.920 回答
0

首先,您可以确定人员和位置的理想示例。

前人Trumph和地点whitehouse

然后,对于一个新的人和George地点California

您可以进行以下数学计算来计算实时 _in 分数,

(A-B+C) 和 D 之间的余弦相似

执行:

from scipy.spatial.distance import cosine
cosine(model.wv['Trump']-model.wv['whitehouse']+model.wv['George'],model.wv['California'])
于 2018-11-13T17:43:59.303 回答