我正在使用手套(Gensim-word2vec)模块,并且可以使用它返回诸如Inconvertible types; cannot cast 'android.content.Context' to 'com.example.johny.test.Tab1Values'
之类的实体之间的相似性得分,而'man'
将返回'woman'
。但是,有没有一种方法可以返回两个实体之间的语义关系?例如,给定单词0.89034
和一个'people'
,结果应该是关系'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)]
答案 0 :(得分:1)
并非如此,因为单词向量实际上并不真正了解这种关系。
相反,这只是训练过程中一个有用的快乐结果,即单词以反映成对相似性以及在某些相对方向上模糊地与我们的关系类型心理模型一致的方式排列自己。
与这些方向一样有用,即使关系像“ part_of”(代称)或“ more_specific_example_of”(同义)一样尖锐,在向量空间中也可能没有强而一致的方向。
以您的“男人” X“女人”为例,并建议X =“ similar_to”将是一个合适的答案,这在我看来似乎很困惑。通常将“男人”与“女人”放在一起以强调一些与性别相关的差异/方向。他们是-------------------------------
| time | value |
-------------------------------
| 2014-12-01 02:54:00 | 2 |
| 2014-12-02 02:54:00 | 6 |
| 2014-12-03 02:54:00 | 8 |
-------------------------------
的说法,有趣的是,一个单词是similar
的10个最近邻居,100个最近邻居或10,000个最近邻居(与模型中所有其他单词相比)。您可以轻松地从模型中读取许多similar_to
关系,但是显着隔离人类感知方面的对可能更难标记/识别。 (例如,“热”和“冷”是相当相似的,因为它们在相似的上下文中使用,但在语义上又是反义词,因为与某些框架相比,它们专门用于突出显示排他的和相反的温度水平)参考。)
还有一些更高级的工作明确地尝试创建字向量集,这些字向量集更能回答问题,尤其是与财产有关的问题-但是标准的字向量在这种情况下效果不佳。
答案 1 :(得分: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'])