使用Jaccard Coefficient测量字符串相似度

时间:2016-09-13 03:32:43

标签: similarity information-retrieval

我有一个测试和一个训练数据集,应该用于字符串相似性测量。这里我给出了几行数据集,

Brandon Bass ||| what the hell is Brandon bass thinking ||| Brandon Bass Has 5 Personal Fouls ||| False
Sac ||| Congrats to Sac Kings fans ||| why yall forcing the kings to stay in sac town smh ||| False
Stella ||| hello Stella can you follow me please ||| STELLA DO U HATE ME ||| False


The data file has 50 entries of the form 
TOPIC ||| TWEET_SENT_1 ||| TWEET_SENT_2 ||| HAVE_SIMILAR_MEANING

主题 - Twitter话题

TWEET_SENT_1 – Tweet sentence 1
TWEET_SENT_2 – Tweet sentence 2
HAVE_SIMILAR_MEANING – a binary label (True – two sentences are similar, false – two sentences are not similar) assigned by a human annotator

我们需要将数据集分成两部分:训练集(35个样本)和测试集(15个样本),并且必须使用训练集进行算法的参数调整。并使用最佳调整参数测试测试集。

如果算法是Jaccard Coefficient

我该如何执行此任务?有人可以让我知道我可以使用的方法。

1 个答案:

答案 0 :(得分:0)

Jaccard相似度衡量两组(在您的情况下为n-gram)是如何相似的。没有"调整"在这里完成,除了你决定两个字符串是否相似的阈值。

例如,如果您有2个字符串abcdeabdcde,则其工作原理如下:

ngrams (n=2) :  'abcde' & 'abdcde'
   ab bc cd de dc bd
A  1  1  1  1  0  0
B  1  0  1  1  1  1

J(A,B)=(A∩B)/(A∪B)

J(A,B)=(3/6)= 0.5

还有Jaccard距离捕捉两组之间的差异,并通过取one减去Jaccard系数(在这种情况下,1 - 0.5 = 0.5

来计算

所以,对于你的问题,我会使用带有标签的训练集来定义你的字符串被认为相似/不相似的正确阈值。