【问题标题】:how does lucene build VSM?lucene如何构建VSM?
【发布时间】:2014-03-14 00:58:12
【问题描述】:

我了解 VSM、TFIDF 和余弦相似度的概念,但是,在阅读 lucene 网站后,我仍然对 lucene 如何构建 VSM 和计算每个查询的相似度感到困惑。

据我了解,VSM 是一个矩阵,其中填充了每个术语的 TFIDF 值。当我尝试从一组文档中构建 VSM 时,这个工具花了很长时间 http://sourceforge.net/projects/wvtool/ 这与编码并没有真正的关系,因为直观地构建大数据的 VSM 矩阵非常耗时,但对于 lucene 似乎并非如此。

此外,通过预先构建的 VSM,找到最相似的文档,这基本上是计算两个文档之间的相似度,或者查询与文档之间的相似度通常很耗时(假设有数百万个文档,因为必须计算与其他所有人的相似度),但 lucene 似乎真的很快。我想这也与它如何在内部构建 VSM 有关。如果可能的话,有人也可以解释一下吗?

所以请帮助我理解这里的两点: 1. lucene是如何快速构建VSM的,可以用来计算相似度。 2. 百万文档之间的lucene相似度计算怎么这么快。

如果能给出一个真实的例子,我将不胜感激。 谢谢

【问题讨论】:

    标签: lucene indexing data-mining similarity tf-idf


    【解决方案1】:

    据我了解,VSM 是一个矩阵,其中填充了每个术语的 TFIDF 值。

    这更恰当地称为术语文档矩阵。 VSM 更像是一个概念框架,这个矩阵和余弦相似度的概念由此产生。

    Lucene 存储词频和文档频率,可用于获取文档和查询词的 tf-idf 权重。它使用这些来计算here 概述的余弦相似度的变体。因此,术语-文档矩阵的行在索引中表示,这是一个将术语映射到 (document, tf) 对的哈希表,以及一个将术语映射到它们的 df 值的单独表。

    一个人必须计算与其他人的相似度

    那不是真的。如果您查看余弦相似度的教科书定义,您会发现它是查询和文档中相应术语权重的乘积之和,已归一化。出现在文档中但未出现在查询中的术语(反之亦然)对相似度没有影响。因此,要计算余弦相似度,您只需要考虑那些与查询有一些共同术语的文档。这就是 Lucene 获得速度的原因:它对查询词进行哈希表查找,并仅计算与查询词袋非零交集的文档的相似度。

    【讨论】:

    • 即使 VSM 隐含在 lucene 中,它是否仍会构建一个临时 VSM 来比较一个到所有文档之间的相似性?我的理解是这样的计算很耗时
    • @ikel 如果“VSM”是指术语文档矩阵,那么不是。为什么会这样?
    • sow 那么 lucene 究竟是如何构建隐式 VSM 的呢? (通过 VSM,我的意思是具有 TFIDF 值的术语文档矩阵)
    • 给定一个查询,它会查找哪些文档包含查询词。然后它可以仅计算这些术语的 tf-idf 值并计算余弦相似度;所有其他术语都无关紧要,因为它们根本不会导致相似性。
    • @ikel 相应地更新了答案。
    猜你喜欢
    • 2014-06-04
    • 2023-03-22
    • 1970-01-01
    • 2016-01-31
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多