word2vec 单词到颜色关联?

word2vec word to color association?

我正在尝试像这样获得颜色关联:

apple -> red

banana -> yellow

grass -> green

sky -> blue

使用 GoogleNews-vectors-negative300.bin 向量,我第一次尝试

wv.similarity('apple',color)

其中颜色是原色,例如'red'、'yellow'、'blue'等

与水果 'orange' 始终是最高的颜色关联,可能是因为它将颜色和水果混为一谈。当我删除橙色时,结果仍然很奇怪:

apple:

[('violet', 0.24978276994901127), ('green', 0.20656763297902447), ('red', 0.19834849929308024), ('yellow', 0.18963902211016806), ('cyan', 0.17945308073294569), ('blue', 0.13687176308102386)]

cherry:
[('violet', 0.27348741504236473), ('red', 0.25540695681746473), ('yellow', 0.24285150471329794), ('blue', 0.20400566489159569), ('green', 0.18741563150077917), ('cyan', 0.12736182067644364)]

banana:
[('yellow', 0.27708333668133234), ('green', 0.25977272141145935), ('red', 0.24736077659820707), ('violet', 0.23909913025940599), ('cyan', 0.16519069493338848), ('blue', 0.15660144725154587)]

显然 'violet' 与 'apple' 和 'cherry' 在其他维度上对齐(也许它们是植物?)。

我试着用它来打个比方。这适用于某些对象,但不能很好地概括:

wv.most_similar(restrict_vocab=100000, positive=['apple','yellow'], negative=['banana'])
[(u'red', 0.5296207666397095), (u'orange', 0.501822829246521), (u'bright_yellow', 0.49562686681747437), (u'purple', 0.4909234642982483), (u'blue', 0.465557336807251), (u'pink', 0.43768370151519775), (u'colored', 0.4296746551990509), (u'brown', 0.4290006756782532), (u'bright_orange', 0.4261433482170105), (u'yellows', 0.4199957549571991)]

wv.most_similar(restrict_vocab=100000, positive=['grass','yellow'], negative=['banana'])
[(u'bright_yellow', 0.4722655713558197), (u'blue', 0.45448029041290283), (u'red', 0.43442922830581665), (u'lawns', 0.4275570809841156), (u'maroon', 0.4197036325931549), (u'bright_orange', 0.41167205572128296), (u'brown', 0.4110153317451477), (u'purple', 0.4074830412864685), (u'grassy', 0.4017237722873688), (u'striped', 0.40009182691574097)]

我也尝试了 facebook fasttext 嵌入,但结果更糟。我应该如何处理这个问题并隔离 "common color of object"?

的向量

这是一个有趣的尝试,但词向量是否能成功编码这些关系在我看来是一个悬而未决的问题,任何程度的成功都将取决于许多特定的训练选择,包括语料库和参数。

特别是,GoogleNews 向量集,根据已发布的新闻故事进行训练,在将水果与颜色相关联方面可能不如其他选择那么强大。 (例如,我猜想儿童读物的文本或教育计划的成绩单会为此目的引发更强的向量排列。)

A violet 也是一朵花,所以这部分解释了它与其他水果的亲近性。正如您所注意到的 'orange' 作为水果和颜色的重要性,当它被涉及时会产生问题。普通 Word2Vec 或 GoogleNews 向量中的多个词义之间没有消歧,尽管有一些研究使用或创建词向量来区分替代词义。 (甚至像 'blue'、'green'、'yellow'、'cherry' 和 'grass' 这样的词也有可能影响矢量定位的替代含义。)

我怀疑 analogy/directional 方法可能比纯粹的相似性更幸运。 (也就是问"which colorword is in the direction learned from these other objectword->colorword examples?",而不是"which colorword is absolutely closest to this objectword?")

您可能想尝试来自更大域的 objectword->colorword 示例对,或者尝试其他矢量数学以查看其他 definitions/composites 是否更符合您的预期答案。

例如。也许您的 "learn-the-direction" 示例应该包括非水果 – 天空-> 蓝色、煤炭-> 黑色等。

我记得曾经看到过这样的建议,即如果将同一关系的许多已知良好的类比一起使用,而不是仅使用一个,则可以改进类比解决。 (也就是说,在探测 "Germany:?" 之前,从 "England:London"、"Russia:Moscow"、"France:Paris" 的所有方向组成一个方向,而不是仅仅一个方向。我不确定是否添加更多向量到gensim most_similar() positive/negative 列表具有相同的效果,或者你需要自己做 differencing/averaging/norming。)

一篇关于类比结果的解释和改进的有趣论文是 Levy & Goldberg 的“Linguistic Regularities in Sparse and Explicit Word Representations”。

还有其他工作试图训练或倾斜单词(或 concept/entity)向量以更好地回答问题,这可能是相关的,但除了建议将其作为搜索词外,我不不知道在可用库中有什么特别合适或现成可用的技术。