非常快速的文档相似度
Posted
技术标签:
【中文标题】非常快速的文档相似度【英文标题】:Very fast document similarity 【发布时间】:2010-05-13 18:23:30 【问题描述】:我正在尝试尽快确定单个文档与大量文档(n ~= 100 万)中的每个文档之间的文档相似性。更具体地说,我正在比较的文件是电子邮件;它们被分组(即有文件夹或标签),我想确定哪个组最适合新电子邮件。快速的性能至关重要。
我的先验假设是术语向量之间的余弦相似度适合此应用程序;请评论这是否是一个很好的措施!
我已经考虑了以下提高性能的可能性:
对所有词向量进行预归一化
为每组 (n ~= 10,000) 而不是每封电子邮件 (n ~= 1,000,000) 计算一个术语向量;这对我的申请来说可能是可以接受的,但如果你能想到不这样做的理由,请告诉我!
我有几个问题:
如果一封新电子邮件包含以前任何电子邮件中从未见过的新术语,这是否意味着我需要重新计算我的 所有 术语向量?这似乎很昂贵。
是否有一些聪明的方法来只考虑可能接近查询文档的向量?
有没有什么方法可以让我为所有这些向量使用的内存量更加节俭?
谢谢!
【问题讨论】:
【参考方案1】:使用Bayesian filtering。提供的链接是指垃圾邮件过滤,但您可以很容易地将算法调整到多个类别/标签。
还有很多不错的SO question about Bayesian filtering。
【讨论】:
感谢您的推荐。贝叶斯过滤是一个有趣的想法。我有几个问题: 1. 为什么你认为 BF 在这个例子中比余弦相似度更好? 2. 我可能遗漏了一些东西,但是对于 n=number of categories,我的分类时间是否仍然是 O(n),就像余弦相似度一样?我认为我需要一个 O(log n) 或 O(1) 查找表来对可能的分类候选者进行排名。 回到这个问题——我现在正在尝试使用贝叶斯过滤来解决这个问题——似乎是个好主意,所以接受这个答案。以上是关于非常快速的文档相似度的主要内容,如果未能解决你的问题,请参考以下文章