如何通过MinHash计算两个文本与两个包的Jaccard相似度的相似度?

时间:2017-08-31 05:13:03

标签: similarity minhash

我有以下两个文字:

text0 =“AAAAAAAAAAAA”;

text1 =“AAAAABAAAAAA”;

我使用4片。因此,text0 = {AAAA},text1 = {AAAA,AAAB,AABA,ABAA,BAAA}。

然后,Jaccard相似度为sim = 1/5 = 0.2。

我不想要这个结果。因为这两个文本似乎有很高的相似性。

我想使用包相似性如下:

text0 = {AAAA,AAAA,AAAA,AAAA,AAAA,AAAA,AAAA,AAAA,AAAA},

text1 = {AAAA,AAAA,AAAB,AABA,ABAA,BAAA,AAAA,AAAA,AAAA}。

如果使用这两个袋子,它的相似之处是sim = 5/9。这远高于0.2。

MinHash可以做到这一点吗?

2 个答案:

答案 0 :(得分:1)

对于行李,您可以使用加权minwise散列,请参阅

S. Ioffe, Improved consistent sampling, weighted minhash and l1 sketching, 2010

A. Shrivastava, Simple and Efficient Weighted Minwise Hashing, 2016

如果多重性总是小的整数,您还可以通过使条目唯一来使用未加权的最小值散列,例如:通过编号:

text0 = {AAAA1,AAAA2,AAAA3,AAAA4,AAAA5,AAAA6,AAAA7,AAAA8,AAAA9},

text1 = {AAAA1,AAAA2,AAAB1,AABA1,ABAA1,BAAA1,AAAA3,AAAA4,AAAA5}。

答案 1 :(得分:0)

提高非常短文本的相似性得分的另一种简单方法是,使用特殊字符指示开始/结束位置,也可以在文档的开头和结尾处生成较短的带状疱疹。

在这种情况下,从text0生成的带状疱疹为: {@A,@AA,@AAA,AAAA,AAA @,AA @,A @}

和text1中的那些是:{@ A,@ AA,@ AAA,AAAA,AAAB,AABA,ABAA,BAAA,AAA @,AA @,A @}。

Jaccard相似度现在为7/11 = 0.64

这确实归结为一个哲学问题,即“相似性”对您意味着什么:您认为哪些功能不重要?