当我使用 GloVe 词向量在 python 3.6 中测试“ally”和“friend”这两个词的余弦相似度(使用验证为正确实现的函数)时,余弦相似度为
0.6274969008615137
. 然而,当我测试“盟友”和“朋友”时,结果是0.4700224263147646
.
似乎“ally”和“friend”这两个名词作为同义词给出,应该比“ally”和“powerful”这两个名词和一个几乎不相关的词具有更大的余弦相似度。
我是否误解了词向量或余弦相似度的概念?
当我使用 GloVe 词向量在 python 3.6 中测试“ally”和“friend”这两个词的余弦相似度(使用验证为正确实现的函数)时,余弦相似度为
0.6274969008615137
. 然而,当我测试“盟友”和“朋友”时,结果是0.4700224263147646
.
似乎“ally”和“friend”这两个名词作为同义词给出,应该比“ally”和“powerful”这两个名词和一个几乎不相关的词具有更大的余弦相似度。
我是否误解了词向量或余弦相似度的概念?
欢迎来到学习嵌入的精彩词。以及它的陷阱。
我试图在更高的层次上解释这一点,但请随意阅读这个主题,因为似乎有很多关于这个问题的文献。神经网络通常会遇到这样一个问题,即结果对人类来说不是自然直观的——它们通常只是在你的训练数据中发现统计上显着的相似性,无论它们是否需要
以您的具体示例(GloVe)并分析其中的一些问题,让我们引用其官方文档:
GloVe 是一种用于获取单词向量表示的无监督学习算法。对来自语料库的聚合全局词-词共现统计进行训练,得到的表示展示了词向量空间的有趣的线性子结构。
这告诉我们的是,学习的表示通常取决于特定单词的上下文。想象一下,如果我们(例如)有一个由许多新闻文章组成的训练集,则更有可能遇到在同一上下文中谈论“盟友”/“盟友”和“强大”的文章(想想政治新闻文章),与在同义语上下文中同时提及“盟友”和“朋友”的文章相比。
除非您实际上遇到大量示例,其中两个单词的上下文非常相似(因此学习的表达方式相似),否则您学习的表示不太可能接近/相似。
关于嵌入的问题是,虽然我们当然可以在我们的数据中找到这样的反例,但总的来说,它们为我们的词汇提供了非常好的数字解释,至少对于研究中最常见的语言(英语、西班牙语、法语可能是最受欢迎的)。
所以问题就变成了你是否想花时间手动注释大量的单词,可能会忘记它们各自上下文中的关联(例如,Apple 可能是水果和公司的一个很好的例子,但不是每个听到的人丰田的也认为它是一个非常常见的日本姓氏)。
这一点,再加上词嵌入的明显自动化处理,使得它们在当前非常有吸引力。我确定我可能遗漏了一些明显的观点,我想补充一点,不同研究领域对嵌入的接受范围很广,所以请谨慎对待。