如何有效地计算数百万字符串之间的余弦相似度

时间:2013-02-23 14:34:49

标签: java python algorithm divide-and-conquer cosine-similarity

我需要计算列表中字符串之间的余弦相似度。例如,我有一个超过1000万个字符串的列表,每个字符串必须确定它自己与列表中的每个其他字符串之间的相似性。什么是我可以用来有效和快速完成这项任务的最佳算法?分而治之算法是否适用?

修改

我想确定哪些字符串与给定字符串最相似,并且能够获得与相似性相关的度量/分数。我认为我想做的事情与群集相符合,群集的数量最初并不为人所知。

2 个答案:

答案 0 :(得分:0)

使用转置矩阵。这就是Mahout在Hadoop上做的快速完成这种任务(或者只是使用Mahout)。

基本上,计算余弦相似性的天真方式是不好的。因为你最终计算了很多0 *的东西。相反,你最好在中工作,在那里留下所有0

答案 1 :(得分:0)

您可以尝试SimString

它是一个用于近似字符串匹配的C ++库(使用Python或Ruby绑定)。

它声称在一个1300万字符串的数据库中,在1毫秒内找到具有高余弦相似性的字符串。

使用的算法基于倒置列表的修剪来描述here