文本分布式表示(SVD奇异值分解)

奇异值分解(SVD)

概念

奇异值分解(Singular Value Decomposition / SVD)主要是用了线性代数的知识,利用共线矩阵解决共线频次无法解决高阶词语关系和降低维度

假设有大小为m×n的共线矩阵M,U和V的注释如下。正交矩阵的概念在基础知识有提及,矩阵各列向量为单位向量,而且两两相交。(垂直向量)

推导

推导过程如下。

U由m个特征向量展开为m阶矩阵,为n个特征向量展开的n阶矩阵,而且为m×n的奇异值矩阵,(对角线有d个不为0的数成为奇异值,其他元素都为0)而且这里推导知识有特征值和特征向量。具体请看另外一篇博客(特征值和特征向量),推导图所示。

截断奇异值分解(Truncated Singular Value Decomposition)

截断奇异值其实是在奇异值分解中保留d个最大的奇异值,而且同步保留U和V的维度,(因为如果不截断,可能后续的d-n的奇异值都为0)这样能够获得连续,低维,稠密的向量,而且U中各列互相正交,所以可以看为每一个维度都代表了一个独立的潜在语义,所以又称为潜在语义分析(Latent Semantic Analysis, LSA),而且的每一列都可表示相对应的上下文表示。

基础知识

正交的不严格定义:对于任意的i和j,都满足下列式子,则称这个矩阵为正交矩阵。而且正交矩阵有一个性质,即为可以进行矩阵对角化。(将矩阵转化为只有对角线不为0,其他都为0)

代码

在numpy的linalg中有单独的svd(奇异值分解的代码)进行处理。

U, s, vh = np.linalg.svd(M_pmi)
# M_pmi的大小一般为(M, N)
'''U大小为(M,M),s大小为(M,N),vh大小为(N,N)。
    M_pmi = U * s * vh
    其中s是对矩阵M_pmi的奇异值分解。s除了对角元素不为0,其他元素都为0,并且对角元素从大到小排列。
    vh中有n个奇异值,一般排在后面的比较接近0,所以仅保留比较大的r个奇异值。'''

缺点

  • 共现矩阵规模较大的时候,奇异值分解的速度较慢

  • 增加语料库的数据的时候,需重新计算

  • 分布式只能用于表示较短的词语,如果为表示为较长的句子,无法获得有效的分布式表示

  • 奇异值分解计算后为一个定值,无法进行修改

参考

https://zhuanlan.zhihu.com/p/95836870

https://zhuanlan.zhihu.com/p/29846048

猜你喜欢

转载自blog.csdn.net/xiaziqiqi/article/details/129207529