ike*_*kel 1 lucene indexing similarity data-mining tf-idf
我理解了 VSM、TFIDF 和余弦相似度的概念,但是,在阅读 lucene 网站后,我仍然对 lucene 如何构建 VSM 并计算每个查询的相似度感到困惑。
据我了解,VSM 是一个矩阵,其中填充了每个术语的 TFIDF 值。当我尝试从一组文档构建 VSM 时,这个工具花了很长时间http://sourceforge.net/projects/wvtool/ 这与编码没有真正的关系,因为直观地构建大数据的 VSM 矩阵是耗时,但 lucene 似乎并非如此。
此外,使用预构建的 VSM,找到最相似的文档,这基本上是计算两个文档之间的相似度或查询与文档之间的相似度,通常很耗时(假设有数百万个文档,因为必须计算与其他人的相似度),但 lucene 似乎它真的很快。我想这也与它如何在内部构建 VSM 有关。如果可能,有人也可以解释一下吗?
所以请帮助我理解这里的两点:1. lucene 如何如此快速地构建 VSM,可用于计算相似度。2.为什么百万文档之间的lucene相似度计算这么快?
如果给出一个真实的例子,我将不胜感激。谢谢
据我了解,VSM 是一个矩阵,其中填充了每个术语的 TFIDF 值。
这更恰当地称为术语文档矩阵。VSM 更像是一个概念框架,该矩阵和余弦相似度的概念源自该框架。
Lucene 存储术语频率和文档频率,可用于获取文档和查询术语的 tf-idf 权重。它使用这些来计算此处概述的余弦相似度的变体。因此,术语-文档矩阵的行在索引中表示,索引是将术语映射到 (document, tf) 对的哈希表,以及将术语映射到它们的 df 值的单独表。
一个人必须计算与其他人的相似度
这不是真的。如果您查看余弦相似度的教科书定义,您会发现它是查询和文档中相应术语权重的乘积之和,归一化。出现在文档中但未出现在查询中的术语(反之亦然)对相似性没有影响。因此,要计算余弦相似度,您只需要考虑那些与查询具有某些共同术语的文档。这就是 Lucene 获得速度的方式:它对查询词进行哈希表查找,并仅计算与查询词袋具有非零交集的文档的相似度。
归档时间: |
|
查看次数: |
738 次 |
最近记录: |