我理解了VSM,TFIDF和余弦相似的概念,但是,在阅读lucene网站之后,我仍然对lucene如何构建VSM和计算每个查询的相似度感到困惑。
据我所知,VSM是一个矩阵,每个术语的TFIDF值都被填充。当我尝试从一组文档构建VSM时,使用这个工具http://sourceforge.net/projects/wvtool/花了很长时间--这实际上与编码无关,因为直观地构建一个包含大量数据的VSM矩阵很费时,但对于lucene来说似乎并非如此。
另外,使用预先构建的VSM,查找最相似的文档(基本上是计算两个文档或查询与文档之间的相似性)通常很耗时(假设有数百万个文档,因为必须计算每个人的相似度),但是lucene似乎真的很快。我想这也与它如何在内部构建VSM有关。如果可能的话,有人也能解释一下吗?
因此,请在这里帮助我理解两点: 1. lucene如何如此快速地构建VSM,可以用来计算相似度。2.为什么lucene的相似度计算在数百万份文档中如此之快。
如果给出一个真实的例子,我会很感激的。谢谢
发布于 2014-02-14 15:43:12
据我所知,VSM是一个矩阵,每个术语的TFIDF值都被填充。
这更恰当地称为术语-文档矩阵。VSM更像是一个概念框架,由此产生了余弦相似的概念。
Lucene存储术语频率和文档频率,这些频率可用于获取文档和查询项的tf-以色列国防军权重。它使用这些来计算一个余弦相似度的变体概述的这里。因此,术语文档矩阵的行在索引中表示,这是一个哈希表映射项到(document,tf)对,再加上一个单独的表映射项到它们的df值。
一个人必须计算出与其他人相似的情况。
那是胡说。如果您回顾余弦相似性的教科书定义,您会发现它是查询和文档中相应术语权重的乘积之和。发生在文档中而不是查询中的术语(反之亦然)对相似性没有影响。因此,要计算余弦相似度,只需考虑那些与查询有一些共同术语的文档。Lucene就是这样获得它的速度的:它对查询项进行哈希表查找,并且只计算与查询的单词包具有非零交集的文档的相似之处。
https://stackoverflow.com/questions/21783193
复制相似问题