假设我有两个字符串:
string A: 'I went to the cafeteria and bought a sandwich.'
string B: 'I heard the cafeteria is serving roast-beef sandwiches today'.
公式:
Levenshtein 距离:将字符串 a 转换为字符串 b 所需的最小插入、删除或替换次数
N-gram 距离:两个字符串之间出现 n-gram 向量的绝对差的总和。例如,字符串 A 和 B 的二元向量的前 3 个元素将分别为 (1, 1, 1) 和 (0, 0, 0)。
余弦相似度:
杰卡德相似度:
例句中单词粒度的度量:
Levenshtein distance = 7 (if you consider sandwich and sandwiches as a different word)
Bigram distance = 14
Cosine similarity = 0.33
Jaccard similarity = 0.2
我想了解使用这些(不)相似性度量中的每一个的利弊。如果可能的话,最好在例句中理解这些优点/缺点,但如果你有一个更好地说明差异的例子,请告诉我。另外,我意识到我可以通过文本中的单词数来缩放 Levenshtein 距离,但这不适用于二元距离,因为它会大于 1。
首先,余弦和 Jaccard 似乎提供了相似的结果。Jaccard 实际上的计算量要小得多,而且(有点)更容易向外行解释。