美文网首页机器学习
03 主题模型 - LSA案例

03 主题模型 - LSA案例

作者: 白尔摩斯 | 来源:发表于2018-12-23 15:01 被阅读124次

    02 主题模型 - SVD矩阵分解、LSA模型

    LSA案例

    假设有10个词、3个文本对应的词频TF矩阵如下:

    1、只需要numpy就可以完成LSA的操作
    import numpy as np
    
    2、录入数据
    a = np.array([
            [1,1,1],
            [0,1,1],
            [1,0,0],
            [0,1,0],
            [1,0,0],
            [1,0,1],
            [1,1,1],
            [1,1,1],
            [1,0,1],
            [0,2,0],
            [0,1,1]
        ]
    )
    
    3、SVD分解

    numpy中的linalg库中,有专门的svd分解的函数。
    能够直接得到 U Σ V 矩阵的值。
    注意:这里分解出来的不是近似值,而是完整的值。

    u,sigma,v = np.linalg.svd(a)
    

    Uil 对应第i个文本和第l个主题的相关度。
    Vjm 对应第j个词和第m个词义的相关度
    Σlm 对应第l个主题和第m个词义的相关度


    4、文档和主题之间的关系

    假定现在3篇文本对应2个主题。现在就该获取前两列。

    u[:,:2]
    
    文档和主题之间的关系
    5、词语和词义之间的关系
    v[:,:2].T
    
    词语和词义之间的关系
    6、主题和词义之间的关系
    sigma
    
    s = [[sigma[0],0],[0,sigma[1]]]
    s
    
    主题和词义之间的关系
    7、将我们上面得到的矩阵相乘,能够近似回复最初文档和词语的矩阵
    np.dot(np.dot(u[:,:2],s),v[:,:2].T)
    
    对比输出结果和原矩阵,虽然不是100%相等,但也能体现近似值

    最后将结论描述成报告:

    假定主题数为2,通过SVD降维后的三个矩阵分布为:

    本例中计算的是V≈VK矩阵,但是也可以进一步计算ΣV即主题-词义关系矩阵

    通过SVD矩阵分解我们可以得到文本、词与主题、语义之间的相关性,但是这个时候计算出来的内容存在负数,我们比较难解释,所以我们可以对LSI得到文本主题矩阵使用余弦相似度计算文本的相似度的计算。

    最终我们得到第一个和第三个文档比较相似,和第二个文档不太相似。
    备注:这个时候直接在文本主题矩阵的基础上直接应用聚类算法即可

    本例中计算的是V≈VK矩阵,但是也可以进一步计算ΣV即主题-词义关系矩阵

    04 主题模型 - NMF
    06 主题模型 - pLSA又称pLSI - 基于概率的潜在语义分析模型

    相关文章

      网友评论

        本文标题:03 主题模型 - LSA案例

        本文链接:https://www.haomeiwen.com/subject/uurnkqtx.html