用Jaccard系数测量字符串相似度



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

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

TOPIC - 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系数

如何执行此任务?谁能告诉我我可以使用的方法?

Jaccard相似性是度量两个集合(在您的例子中是n个grams)的相似性。这里没有"调优"要做,除了您决定两个字符串是否相似的阈值。

例如,如果你有两个字符串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)来计算

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

最新更新