LSA学习笔记1

来源:互联网 发布:mac怎么打开显示包内容 编辑:程序博客网 时间:2024/06/05 06:55

       这几天开始文本分类方面的研究,写点学习笔记。

       潜在语义分析(Latent Semantic Analysis)是一种用奇异值分解方法获得文本中术语(一般是单词或单词的集合,用“术语”来指代感觉很高端的样子)和概念主题之间潜在关系的方法。该方法的主要依据是在相同文章中的词语一般有类似的含义。当两个词或一组词大量出现在一个文档中时,这些词之间就可以被认为是语义相关的。

        LSA 分析得到的词汇之间的关系特点是它们不一定是同义词(甚至词性都可能不同),但它们往往出现在同类情景下(比如“魔兽”和“英雄联盟”,“爱”和“你”)。

        利用奇异值分解SVD(Singular Value Decomposition)求一个矩阵的只有K个正交因子的降秩矩阵,该过程就是降维的过程。SVD的重要作用是把术语和文档映射到同一个语义空间中,将词和文档表示为K个因子的形式,该过程解决了同义和多义现象。可以看出,K的取值对整个分类结果的影响很大。因为,K过小,则丢失信息就越多;K过大,信息虽然多,但可能有冗余且计算消耗大。

        所以矩阵的奇异值分解就是LSA的最关键步骤。


        以术语或单词(terms)为行, 文件(documents)为列做一个矩阵。设一共有t行d列,矩阵名为X。矩阵的元素为术语在文件中的出现频度(或其他特征值)。 X可以分解为三个矩阵T0,S0,D0^T (D0 的转置) 的积。其中T0和D0的列向量都是正交归一化的:

        T0是t*m矩阵,代表“词——-类别”矩阵;

        S0是m*m对角矩阵,代表奇异值矩阵,表示“类——文档”矩阵;

        D0是d*m矩阵,代表“文档——主题”矩阵。

        m是X的秩。这种分解即是矩阵的奇异值分解。


        还不会编辑公式,只能上图,君莫笑


       

        把S0的m个对角元素进行了排序,值的前k个保留,后m-k个置0,我们可以得到一个新的近似的分解:

 

      

        X’在最小二乘意义下是X的最佳近似。通过这一步,达到了矩阵降维的效果。


        LSA文本分类的步骤

       1.分析文档集合,建立Term-Document矩阵;
       2. 对Term-Document矩阵进行奇异值分解;
       3.对奇异值分解后的矩阵进行降维——即对奇异值矩阵的对角元素排序,选取前k个,其余对角元素置0;
       4.使用降维后的矩阵构建潜在语义空间,或重建Term-Document矩阵;
       5.根据所有文档和单词在潜在语义空间的坐标,通过向量间的夹角来判断两个文本的相似程度,根据相似程度大小来分类,方法和传统向量空间模型相同。

        LSA的示例参考:http://pan.baidu.com/share/link?shareid=366931350&uk=3040079072

        矩阵的奇异值分解在代数上已经是被证明了的,但是在计算及实际应用中却往往没有那么简单——对于人工计算来说尤其如此。关于矩阵的运算总让人感觉如此无力,有的时候光让你手算个4*4的整数矩阵的逆矩阵,就算个半死。现在要将一个大矩阵分解为3个矩阵,人工手算怎么办!肯定不行!使我感到遗憾的并不是因为这个计算量很大,而是一般人根本没有这个计算的思路!

        MATLAB里有一个svd函数,可计算矩阵的奇异值分解,用法如[U,S,V]=svd(X)。当然,对于大矩阵的分解,这个函数也是望尘莫及的。由于矩阵的奇异值分解很难分解为彼此独立的子运算,所以传统的MapReduce分布并行框架无法直接套用,这个比较犯难的问题直到2007年才被Google中国(现在已成为历史了)的张智威博士团队攻破,至此,矩阵的奇异值分解的高效的分布并行算法华丽登场。