GloVe 词向量余弦相似度 - "Ally" 比“朋友”更接近 "powerful"

GloVe Word Vectors Cosine Similarity - "Ally" closer to "powerful" than 'friend"

当我在 python 3.6 中使用 GloVe 词向量测试 "ally" 和 "friend" 这两个词的余弦相似度(使用经过验证是正确实现的函数)时,余弦相似度为 0.6274969008615137。然而,当我测试 "ally" 和 "friend" 时,结果是 0.4700224263147646

似乎"ally"和"friend"这两个作为同义词给出的名词的余弦相似度应该比"ally"和"powerful"一个名词和一个勉强的余弦相似度大相关词。

我是不是误解了词向量或余弦相似度的概念?

欢迎来到学习嵌入这个美妙的词。以及它的陷阱。
我试图在更高层次上解释这一点,但请随时阅读该主题,因为有 seems to be 相当多关于该问题的文献。 神经网络通常会遇到这样的问题,即结果对人类来说不是自然直观的——它们通常只是在你的训练数据中发现统计上显着的相似性,无论它们是否需要 or not

以你的具体例子(GloVe)来分析其中的一些问题,让我们引用它official documentation:

GloVe is an unsupervised learning algorithm for obtaining vector representations for words. Training is performed on aggregated global word-word co-occurrence statistics from a corpus, and the resulting representations showcase interesting linear substructures of the word vector space.

这告诉我们,学习到的表示通常取决于特定单词的上下文。想象一下,如果我们(例如)有一个由许多新闻文章组成的训练集,它更有可能遇到在同一篇文章中谈论 "allies"/"ally" 和 "powerful" 的文章上下文(想想政治新闻文章),与在同义上下文中同时提到 "ally" 和 "friend" 的文章相比。

除非你真的遇到很多例子,其中两个词的上下文非常相似(因此学习到的表达相似),否则你学习到的表示不太可能是 close/similar.

关于嵌入的事情是,虽然我们当然可以在我们的数据中找到这样的反例,但总的来说它们提供了我们词汇表的非常好的数值解释,至少对于研究中最常用的语言(英语、西班牙语、法语可能是最受欢迎的语言)。
所以问题就变成了你是否想花时间手动注释整个单词,可能会忘记它们各自上下文中的关联(例如,Apple 可能是水果和公司的好例子,但不是每个听到的人丰田的也认为它是一个非常常见的日本姓氏)。

这一点,加上明显的词嵌入自动化处理,使它们在当前非常有吸引力。我确定我可能遗漏了一些明显的要点,我想补充一点,不同研究领域对嵌入的接受程度很大,所以请对此持保留态度。