文本处理中的两个分类问题和矩阵运算SVD

来源:互联网 发布:json解析html标签 编辑:程序博客网 时间:2024/06/08 15:43

        部分内容摘自吴军老师著《数学之美》,本文章主要详细说明一下其中的矩阵运算奇异值分解SVD的意义。刚刚学完矩阵分析,里面有讲到奇异值分解,我觉得讲得还不错,理解起来很简单。矩阵书籍参考Matrix Analysis and Applied Linear Algebra。

        在引入吴军老师《数学之美》的内容之前,先来看看奇异值分解吧。首先来看看奇异值分解应用的一个实例。


Filtering Noisy Data(滤波)


        假设矩阵Am×n包含了一定的噪声,不妨假定噪声是高斯白噪声。通过SVD可以分解矩阵A得到r个相互正交的子矩阵:



        其中r是矩阵A的秩,也是对角矩阵D的对角元素个数,啰嗦一句,这里的对角矩阵D中对角线上的元素是矩阵A的奇异值(也叫特征值),且按奇异值大小的降序排列,U和V都是酉矩阵。
        Z1,Z2...Zr组成了一组标准正交集合(orthonormal set),即任意不同的两个元素的内积为0,相同元素的内积为1(<>表示内积操作):


        到这里,可以引入一个大家很熟悉的概念了——傅里叶级数。SVD就可以看做是讲矩阵A写成傅里叶级数形式。


        上式可以理解为是矩阵A投影到“方向”Zi上面分量的大小。由于假定了噪声是高斯白噪声,那么在每一个“方向”上的噪声的分量大小应该是一样的。由于每一个分量的大小不一样,但是包含的噪声信号是一样的,那么就可以比较每个分量的SNR信噪比大小:


        如果有一些奇异值的大小相对于总的噪声来说比较小,那么这些奇异值对应的分量的大小就会有很小的信噪比。因此将这些信噪比较小的分量从原信号中删掉对原来的信号的有效成分造成的损失很小,但同时却去掉了相对来说比重较大的一部分的噪声。

        看完了这个例子,我们再来看看吴军老师《数学之美》中的内容。
        在自然语言处理中,最常见的两类的分类问题分别是,将文本按主题归类(比如将所有介绍亚运会的新闻归到体育类)和将词汇表中的字词按意思归类(比如将各种体育运动的名称个归成一类)。分类的关键是计算相关性。我们首先对两个文本计算出它们的内容词,或者说实词的向量,然后求这两个向量的夹角。当这两个向量夹角为零时,新闻就相关;当它们垂直或者说正交时,新闻则无关。当然,夹角的余弦等同于向量的内积。从理论上讲,这种算法非常好。但是计算时间特别长。通常,我们要处理的文章的数量都很大,至少在百万篇以上,二次回标有非常长,比如说有五十万个词(包括人名地名产品名称等等)。如果想通过对一百万篇文章两篇两篇地成对比较,来找出所有共同主题的文章,就要比较五千亿对文章。现在的计算机一秒钟最多可以比较一千对文章,完成这一百万篇文章相关性比较就需要十五年时间。注意,要真正完成文章的分类还要反复重复上述计算。
在文本分类中,另一种办法是利用矩阵运算中的奇异值分解。首先,我们可以用一个大矩阵A来描述这一百万篇文章和五十万词的关联性。这个矩阵中,每一行对应一个词,每一列对应一篇文章
 

        在上面的图中,M=1,000,000,N=500,000。第i 行,第 j 列的元素,是字典中第 i个词在第j 篇文章中出现的加权词频(比如,TF/IDF)。读者可能已经注意到了,这个矩阵非常大,有一百万乘以五十万,即五千亿个元素。
        奇异值分解就是把上面这样一个大矩阵,分解成三个小矩阵相乘,如下图所示。比如把上面的例子中的矩阵分解成一个一百万乘以一百的矩阵X,一个一百乘以一百的矩阵B,和一个一百乘以五十万的矩阵Y。这三个矩阵的元素总数加起来也不过1.5亿,仅仅是原来的三千分之一。相应的存储量和计算量都会小三个数量级以上。

        三个矩阵有非常清楚的物理含义。第一个矩阵X中的每一行表示意思相关的一类词,其中的每个非零元素表示这类词中每个词的重要性(或者说相关性),数值越大越相关。最后一个矩阵Y中的每一行表示同一主题一类文章,其中每个元素表示这类文章中每篇文章的相关性。中间的矩阵则表示类词和文章雷之间的相关性。因此,我们只要对关联矩阵A进行一次奇异值分解,就可以同时完成了近义词分类和文章的分类。(同时得到每类文章和每类词的相关性)。
现在剩下的唯一问题,就是如何用计算机进行奇异值分解。
 
       现在让我们开始来用上面刚学习到的SVD的意义来对分解后的X、B、Y矩阵进行解读,这样可以有更清楚的认识和理解。为了方便讲解,下面用较小的矩阵来说明。


        为了进一步揭示三个矩阵和原矩阵的关系,写成下面的形式。


         
矩阵A每一行对应一个词,每一列对应一篇文章。矩阵X表示词和“语义词”的关系。X的的每一行表示意思相关的一类词,其中的每个非零元素表示这类词中每个词的相关性,数值越大越相关。矩阵Y表示主题”和文章的关系。Y中的每一行表示同一主题的一类文章,其中每个元素表示这类文章中每篇文章的相关性。中间的矩阵则表示类词和文章雷之间的相关性。矩阵B可以理解为是“语义词”和文章主题的相关系数。因此,我们只要对关联矩阵A进行一次奇异值分解,就可以同时完成了近义词分类和文章的分类。(得到每类文章和每类词的相关性)。



0 0
原创粉丝点击