假设您有两个用户具有如下所示的属性集:
userA = {"happy", "excited"}
userB = {"sad", "anxious"}
现在,如果我们计算Jaccard的相似性,那么它就是0.但是,我们想要定义excited
与anxious
非常相似。
我的问题是,这如何构建?
我会定义另一组与excited
同义的单词吗?那么我如何将其纳入Jaccard指数计算?
答案 0 :(得分:0)
我建议使用某种词库制作同义词群集。每个单词最多只属于一个集群 对于每个群集,请选择“规范”代表 现在,当您必须计算Jaccard相似性时,用其簇中的代表替换每个单词。然后照常进行。
示例群集(代表粗体的代表):
1. 良好,伟大,优秀,积极,有价值
2. 糟糕,贫穷,悲伤,可怕
假设你想要计算两个用户的相似度:
userA = {“positive”}
userB = {“good”}
然后将它们转换为
userA'= {“good”}(因为“good”是群集的代表,“积极”属于)
userB'= {“good”}
相似度= 1/1 = 1。
答案 1 :(得分:0)
你不能用文字来做这件事,因为它们可能含糊不清,但是如果你能够得出WordNet所谓的“词义”,你可以从那里映射到同义词,它将编码所有具有词义的同义词。哪个匹配。
例如,参见Word Sense Disambiguation的Python NLTK示例:http://www.nltk.org/howto/wsd.html
对synset ID进行聚类会得到您想要的结果(假设anxious
和excited
在您用于消除歧义的数据库中实际上至少有一个同义词义。