【问题标题】:How do we decide the number of dimensions for Latent semantic analysis ?我们如何决定潜在语义分析的维数?
【发布时间】:2012-03-23 20:21:32
【问题描述】:

我最近一直在研究潜在语义分析。我通过使用 Jama 包在 java 中实现了它。

代码如下:

    Matrix vtranspose ; 
    a = new Matrix(termdoc);  
    termdoc = a.getArray(); 
    a = a.transpose() ; 
    SingularValueDecomposition sv =new SingularValueDecomposition(a) ; 
    u = sv.getU();
    v = sv.getV(); 
    s = sv.getS();
    vtranspose = v.transpose() ; // we obtain this as a result of svd 

    uarray = u.getArray();
    sarray = s.getArray(); 
    varray = vtranspose.getArray(); 
    if(semantics.maketerms.nodoc>50)
    {

        sarray_mod = new double[50][50]; 
        uarray_mod = new double[uarray.length][50];
        varray_mod = new double[50][varray.length]; 
        move(sarray,50,50,sarray_mod); 
        move(uarray,uarray.length,50,uarray_mod); 
        move(varray,50,varray.length,varray_mod); 
        e = new Matrix(uarray_mod); 
        f = new Matrix(sarray_mod);
        g = new Matrix(varray_mod);
        Matrix temp  =e.times(f); 
        result = temp.times(g);  

    }
    else 
    {
        Matrix temp = u.times(s); 
        result = temp.times(vtranspose); 
    }
    result = result.transpose(); 
    results = result.getArray() ; 

    return results ; 

但是我们如何确定维数呢?有没有一种方法来确定系统应该减少到的维数以获得最佳结果?对于 LSA 的有效性能,我们还考虑了哪些其他参数?

【问题讨论】:

    标签: java theory svd lsa latent-semantic-indexing


    【解决方案1】:

    关于维数的选择:

    1)http://en.wikipedia.org/wiki/Latent_semantic_indexing:

    LSI 面临的另一个挑战是据称难以在 确定用于执行 SVD。作为一般规则,较少的维度允许进行更广泛的比较 包含在文本集合中的概念,而更高的 维度的数量使更具体(或更相关) 概念的比较。实际可能的维度数 used 受集合中文档数量的限制。研究 已经证明,大约 300 个维度通常会提供 中等大小的文档集合(数百个 数以千计的文档),对于较大的文档可能有 400 个维度 集合(数百万个文档)。然而,最近的研究表明 根据大小和性质,50-1000 尺寸是合适的 文档集合。

    在计算 SVD 后检查数据的方差量 可用于确定要保留的最佳维数。 数据中包含的方差可以通过绘制 碎石图中的奇异值 (S)。一些 LSI 从业者选择 与作为截止点的曲线拐点相关的维数 要保留的维数的点。其他人则认为,一些 必须保留差异量,而差异量 在数据中应该规定要保留的适当维度。 百分之七十通常被称为 应用于选择最佳维度的数据 重新计算 SVD。



    2)http://www.puffinwarellc.com/index.php/news-and-articles/articles/33-latent-semantic-analysis-tutorial.html?showall=1:

    使用 SVD 的诀窍在于确定有多少维度或 近似矩阵时使用的“概念”。维度太少 和重要的模式被遗漏,太多和噪音造成的 随机的单词选择会重新出现。 SVD算法有点牵强,好在Python有一个 使其易于使用的库函数。通过添加一行 下面的方法到我们的 LSA 类,我们可以将我们的矩阵分解为其他 3 个 矩阵。 U 矩阵为我们提供了每个单词的坐标 “概念”空间,Vt 矩阵给了我们每个的坐标 在我们的“概念”空间中记录,以及奇异值的 S 矩阵 给我们一个关于我们需要多少维度或“概念”的线索 包括。

    def calc(self): self.U, self.S, self.Vt = svd(self.A)

    为了 选择要使用的正确维数,我们可以制作直方图 奇异值的平方。这显示了每个的重要性 奇异值有助于近似我们的矩阵。这里是 我们示例中的直方图。

    对于大型文档集合,使用的维度数为 在 100 到 500 范围内。在我们的小例子中,因为我们要绘制图形 它,我们将使用 3 个维度,丢弃第一个维度,然后绘制图形 第二和第三维度。

    我们抛弃第一个维度的原因很有趣。为了 文档,第一个维度与文档的长度相关 文档。对于单词,它与该单词的次数相关 已在所有文档中使用。如果我们将矩阵居中,则 从每列中减去平均列值,那么我们将 使用第一个维度。作为一个类比,考虑高尔夫分数。我们不 想知道实际分数,我们想知道之后的分数 从 par 中减去它。这告诉我们玩家是否做出了 小鸟、转向架等。



    3) Landauer, T.K., Foltz, P.W., Laham, D., (1998), '潜在语义导论 分析”,话语过程,25、259-284:

    【讨论】:

    • 有人删除了维基百科页面的最后一段。为什么?
    • 2019 年 6 月,一位不再存在的用户。他的评论是“删除了有关在 LSI 中寻找最佳维度的不正确信息”。我不确定引用 70% 数字的任何参考文献是否正确(它们似乎是 PCA)。我在 R 的 lsa 包中看到默认使用 50%。
    猜你喜欢
    • 2014-10-08
    • 2019-02-11
    • 2011-10-26
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多