【问题标题】:How to compare a search query to SVD resulting 'w' matrix如何将搜索查询与 SVD 生成的“w”矩阵进行比较
【发布时间】:2017-09-07 12:39:14
【问题描述】:

我正在开发一种搜索算法,我正在努力了解如何在术语文档矩阵上实际使用奇异值分解 ( u,w,vt = svd(a) ) 的结果。

例如,假设我有一个 M x N 矩阵,如下所示,其中每一列代表一个文档向量(每个文档中的术语数)

a = [[ 0, 0, 1 ],
     [ 0, 1, 2 ],
     [ 1, 1, 1 ],
     [ 0, 2, 3 ]]

现在,我可以在这个矩阵上运行一个 tf-idf 函数来为每个术语/文档值生成一个分数,但为了清楚起见,我将忽略它。

SVD 结果

在这个矩阵上运行 SVD 后,我最终得到了 'w' 的以下对角向量

import svd

u,w,vt = svd.svd(a)
print w

// [4.545183973611469, 1.0343228430392626, 0.5210363733873331]

我或多或少了解这代表什么(感谢大量阅读,尤其是这篇文章https://simonpaarlberg.com/post/latent-semantic-analyses/),但是我不知道如何将这个产生的“近似”矩阵与原始文档联系起来?这些权重代表什么?如何在我的代码中使用此结果来查找与术语查询相关的文档?

基本上...我该如何使用它?

【问题讨论】:

    标签: python vector vectorization tf-idf svd


    【解决方案1】:

    秩-r SVD 约简一个秩-R MxN 矩阵A 成 r 正交秩 1 MxN 矩阵 (u_n * s_n em> * v_n')。如果你使用这些奇异值和向量来重构原始矩阵,你将获得A的最佳秩-r近似。

    您只需存储 u_n、s_n 和 v_n,而不是存储完整的矩阵 A。 (A 是 MxN,但 U 是 Mx r,S可以一维存储为r元素,V'就是r xN)。

    要近似 A * x,您只需计算 (U * (S * ( V' * x))) [Mxr x rxr x rxN x Nx1]。您可以通过分别存储 (U * S) 而不是 U 和 S 来进一步加快速度。 p>

    那么奇异值代表什么?在某种程度上,它们代表了每个 rank-1 矩阵的能量。奇异值越高,其关联的 rank-1 矩阵对原始矩阵的贡献就越大,如果截断不包括在内,您的重建将越差。

    请注意,此过程与Principal Component Analysis 密切相关,Principal Component Analysis 是在协方差矩阵上执行的,通常用于机器学习中以降低测量的 N 维变量的维数。

    此外,应该注意的是,SVD 对于信号处理中的许多其他应用程序很有用。

    更多信息请访问Wikipedia article。

    【讨论】:

    • 谢谢@rlbond,我认为这开始有些意义了。我正在使用 gensim,它确实为我完成了所有工作,但我也真的很想了解底层数学。我想我只是需要更多的时间来研究这个话题来理解它。
    猜你喜欢
    • 2017-08-05
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    相关资源
    最近更新 更多