潜在语义分析(LSA)相关知识


潜在语义分析(latent semantic analysis, LSA)是一种无监督方法,主要用于文本的话题分析。其特点是通过对 单词-文本矩阵进行进行奇异值分解,从而得到 话题向量空间文本在话题向量空间中的表示

单词-文本矩阵

给定 n n n 个文本集合 D = { d 1 , d 2 , … d n } D = \{d_1,d_2,\ldots d_n\} D={d1,d2,dn},以及在所有文本中出现的 m m m 个单词的集合 W = { w 1 , w 2 , … , w m } W = \{w_1,w_2,\ldots,w_m\} W={w1,w2,,wm} 。单词-文本矩阵如下:
X = [ x 11 x 12 ⋯ x 1 n x 21 x 22 ⋯ x 2 n ⋮ ⋮ ⋮ x m 1 x m 2 ⋯ x m n ] X= \left[ \begin{matrix} x_{11}&x_{12}&\cdots&x_{1n}\\ x_{21}&x_{22}&\cdots&x_{2n}\\ \vdots&\vdots&&\vdots\\ x_{m1}&x_{m2}&\cdots&x_{mn} \end{matrix} \right] X=x11x21xm1x12x22xm2x1nx2nxmn
每个列向量 x ⋅ j x_{ \cdot j} xj对应文本 j 的不同单词, x i , j x_{i,j} xi,j表示第 j 个文本中第 i 个单词 w i w_i wi的权值。权值可以是单词的在文本的出现次数,也可以是其他的数值,例如TD-IDF值:
T F I D F i j = t f i j t f ⋅ j log ⁡ d f d f i i = 1 , 2 , ⋯   , m ; j = 1 , 2 , ⋯   , n TFIDF_{ij}=\frac{tf_{ij}}{tf_{\cdot j}}\log\frac{\mathrm{d}f}{\mathrm{d}f_i}\\ i=1,2,\cdots,m;\\ j=1,2,\cdots,n TFIDFij=tfjtfijlogdfidfi=1,2,,m;j=1,2,,n
t f i j tf_{ij} tfij 是单词 w i w_i wi 出现在文本 d j d_j dj 中的频数, t f . j tf_{.j} tf.j 是文本 d j d_j dj 中出现所有单词的频数之和,所以 t f i j t f ⋅ j \frac{tf_{ij}}{tf_{\cdot j}} tfjtfij可以表示单词 w i w_i wi在当前文本的出现次数的占比。一个单词在一个文本中出现的频数越高,这个单词在这个文本中的重要度就越高,即 t f i j t f ⋅ j \frac{tf_{ij}}{tf_{\cdot j}} tfjtfij 越大 ;

d f df df 是文本集合D的全部文本集, d f i df_i dfi 是含有单词 w i w_i wi 的文本数。一个单词在整个文本集合中出现的文本数越少,这个单词就越能表示其所在文本的特点,重要度就越高,即 log ⁡ d f d f i \log\frac{\mathrm{d}f}{\mathrm{d}f_i} logdfidf 越大;

一个单词在一个文本的TF-IDF是两种重要度的积,表示综合重要度。

单词-文本矩阵的每个列向量对应一个文本,两个列向量之间的的余弦相似度表示对应文本之间的语义相似度。

缺点:单词向量通常是稀疏的。没有考虑到在自然语言处理中的一词多义以及多词一义,所以基于词向量的相似度计算不精确。

话题向量空间

两个文本的相似度可以体现在话题的相似度上。一个文本一般包含若干个话题,如果两个文本相似,那么这两个应该有相似的话题。

可以设想定义一种话题向量空间模型,进而可以用话题向量来表示文本。这个向量的每一个分量都对应一个话题,分量的数值大小为该话题在文本中的权值。实际上,潜在语义分析正是构建话题向量空间的方法。

给定 单词-文本矩阵 如下:
X = [ x 11 x 12 ⋯ x 1 n x 21 x 22 ⋯ x 2 n ⋮ ⋮ ⋮ x m 1 x m 2 ⋯ x m n ] X=\left[\begin{matrix}x_{11}&x_{12}&\cdots&x_{1n}\\x_{21}&x_{22}&\cdots&x_{2n}\\\vdots&\vdots&&\vdots\\x_{m1}&x_{m2}&\cdots&x_{mn}\end{matrix}\right] X=x11x21xm1x12x22xm2x1nx2nxmn
X 也可以写作: X = [ x 1      x 2      ⋅ ⋅ ⋅      x n ] X=[x_1 \;\; x_2 \;\; ··· \;\; x_n] X=[x1x2xn]

假设所有文本共含有 k k k 个话题,每个话题由定义在单词集合W的m维向量表示,称为话题向量,即:
t l = [ t 1 l t 2 l ⋮ t m l ] , l = 1 , 2 , . . . k t_l = \left[ \begin{matrix} &t_{1l} \\ &t_{2l} \\ &\vdots \\ &t_{ml} \\ \end{matrix} \right], l=1,2,...k tl=t1lt2ltml,l=1,2,...k
其中, t i l t_{il} til是单词 w i w_i wi在话题 t l t_l tl的权重,权重越大,则该单词在话题中的重要程度越高。k个话题向量 t l t_l tl张成话题向量空间,维度为k。

话题向量空间 T 也可以表示为一个矩阵,称之为单词—话题矩阵 如下:
T = [ t 11 t 12 ⋯ t 1 k t 21 t 22 ⋯ t 2 k ⋮ ⋮ ⋮ t m 1 t 12 ⋯ t m k ] T=\left[ \begin{matrix} &t_{11} &t_{12} &\cdots &t_{1k} \\ &t_{21} &t_{22} &\cdots &t_{2k} \\ &\vdots &\vdots & &\vdots \\ &t_{m1} &t_{12} &\cdots &t_{mk} \\ \end{matrix} \right] T=t11t21tm1t12t22t12t1kt2ktmk
总共有k列,每个列向量 t l t_l tl对应一个话题,每一行的元素 t i l t_{il} til代表单词 w i w_i wi在话题 t l t_l tl中的权值。

文本在话题向量空间中的表示

现在考虑将文本 d j d_j dj单词向量空间的向量投影到话题向量空间,用话题向量空间中的向量 y j y_j yj表示, y j y_j yj是个k维的列向量,表达式为:
y j = [ y 1 j y 2 j ⋮ y k j ] , j = 1 , 2 , . . . , n y_j =\left[ \begin{matrix} &y_{1j} \\ &y_{2j} \\ &\vdots \\ &y_{kj} \\ \end{matrix} \right],j=1,2,...,n yj=y1jy2jykj,j=1,2,...,n
元素 y l j y_{lj} ylj表示文本 d j d_j dj在话题 t l t_l tl的权重,权重越大,说明该话题的重要程度越高。

由n个文本在话题向量空间向量 y j y_{j} yj构成的矩阵,称之为话题—文本矩阵
Y = [ y 11 y 12 ⋯ y 1 n y 21 y 22 ⋯ y 2 n ⋮ ⋮ ⋮ y k 1 y k 2 ⋯ y k n ] Y=\left[ \begin{matrix} &y_{11} &y_{12} &\cdots &y_{1n} \\ &y_{21} &y_{22} &\cdots &y_{2n} \\ &\vdots &\vdots & &\vdots \\ &y_{k1} &y_{k2} &\cdots &y_{kn} \\ \end{matrix} \right] Y=y11y21yk1y12y22yk2y1ny2nykn
每个列向量对应一个文本,每一行对应话题 t l t_l tl ,元素 y l j y_{lj} ylj代表文本 d j d_j dj 在话题 t l t_l tl中出现的权值。也可以记作 Y = [ y 1      y 2      ⋅ ⋅ ⋅      y n ] Y=[y_1 \;\; y_2 \;\; ··· \;\; y_n] Y=[y1y2yn]

从单词向量空间到话题向量空间的线性变换

潜在语义分析的思想,就是单词向量空间变换到话题向量空间,通过矩阵的因子分解,将单词—文本矩阵X近似的用单词—话题矩阵 T T T 与话题—文本矩阵 Y Y Y 的乘积表示,即:
X ≈ T Y X \approx TY XTY
如下图所示:

在这里插入图片描述

在原始的单词向量空间中,两个文本 d i d_i di d j d_j dj的相似度可以由对应的向量的内积表示,即 d i ⋅ d j d_i \cdot d_j didj。经过潜在语义分析之后,在话题向量空间中,两个文本 d 1 d_1 d1 d 2 d_2 d2的相似度可以由对应的向量的内积即 y i ⋅ y j y_i \cdot y_j yiyj表示。简单来说就是从文本单词的相似度的计算,转换为文本主题的相似度的计算。

潜在语义分析算法

矩阵奇异值(SVD)分解算法

给定文本集合 D = { d 1 , d 2 , ⋯   , d n } D=\{d_1, d_2,\cdots,d_n\} D={d1,d2,,dn},单词集合 W = { w 1 , w 2 , ⋯   , w m } W=\{w_1,w_2,\cdots,w_m\} W={w1,w2,,wm},则单词-文本矩阵 X m × n X_{m\times n} Xm×n
X = [ x 11 x 12 ⋯ x 1 n x 21 x 22 ⋯ x 2 n ⋮ ⋮ ⋮ x m 1 x m 2 ⋯ x m n ] X=\left[ \begin{matrix} &x_{11} &x_{12} &\cdots &x_{1n} \\ &x_{21} &x_{22} &\cdots &x_{2n} \\ &\vdots &\vdots & &\vdots\\ &x_{m1} &x_{m2} &\cdots &x_{mn} \\ \end{matrix} \right] X=x11x21xm1x12x22xm2x1nx2nxmn
潜在语义分析根据确定的话题个数k对单词-文本矩阵进行截断奇异值分解
X ≈ U k Σ k V k T = [ u 1 u 2 ⋯ u k ] [ σ 1 0 0 0 0 σ 2 0 0 0 0 ⋱ 0 0 0 0 σ k ] [ v 1 T v 2 T ⋮ v k T ] X\thickapprox U_k{\Sigma_k}V_k^\mathrm{T} \bf =\left[ \begin{matrix} u_1 &u_2 &\cdots &u_k \end{matrix} \right] \left[ \begin{matrix} \sigma_1 &0 &0 &0\\ 0 &\sigma_2 &0 &0 \\ 0 &0 &\ddots &0\\ 0 &0 &0 &\sigma_k \end{matrix} \right] \left[ \begin{matrix} v_1^\mathrm{T}\\ v_2^\mathrm{T}\\ \vdots\\ v_k^\mathrm{T} \end{matrix} \right] XUkΣkVkT=[u1u2uk]σ10000σ200000000σkv1Tv2TvkT
这中间 k ≤ n ≤ m k\le n \le m knm 这里假设了文档数量要比单词数量少。

其中:

(1) U k U_k Uk m × k m\times k m×k 矩阵,由X的前 k k k个相互正交的左奇异向量组成, U k U_k Uk 每一列 u l u_l ul表示一个话题, k k k个话题张成一个子空间,称为话题向量空间:
U k = [ u 1 u 2 ⋯ u k ] U_k=\left[\begin{matrix}u_1&u_2&\cdots&u_k\end{matrix}\right] Uk=[u1u2uk]
(2) Σ k \Sigma_k Σk k k k阶方阵,由X的前 k k k个最大奇异值组成;

(3) V k V_k Vk n × k n\times k n×k矩阵,由X的前 k k k个相互正交的右奇异向量组成。

Σ k V k T {\Sigma_k}V_k^\mathrm{T} ΣkVkT两个矩阵的乘积,则对应了话题-文本矩阵(文本在话题空间的向量表示)。所以,矩阵 X X X 的第 j j j列向量 x j x_j xj 满足:
x j ≈ U k ( Σ k V k T ) j = [ u 1 u 2 ⋯ u k ] [ σ 1 v j 1 σ 2 v j 2 ⋮ σ k v j k ] = ∑ l = 1 k σ l v j l u l , j = 1 , 2 , ⋯   , n \begin{aligned} x_j&\thickapprox U_k(\Sigma_k V_k^\mathrm{T})_j\\ &= \left[ \begin{matrix} u_1& u_2& \cdots& u_k \end{matrix} \right] \left[ \begin{matrix} \sigma_1v_{j1}\\ \sigma_2v_{j2}\\ \vdots\\ \sigma_kv_{jk} \end{matrix} \right] \\ &=\sum_{l=1}^k\sigma_lv_{jl}u_l,j=1,2,\cdots,n \end{aligned} xjUk(ΣkVkT)j=[u1u2uk]σ1vj1σ2vj2σkvjk=l=1kσlvjlul,j=1,2,,n
式中: ( Σ k V k T ) j (\Sigma_k V_k^\mathrm{T})_j (ΣkVkT)j 是矩阵 ( Σ k V k T ) (\Sigma_k V_k^\mathrm{T}) (ΣkVkT) 的第 j j j 列向量。矩阵 ( Σ k V k T ) j (\Sigma_k V_k^\mathrm{T})_j (ΣkVkT)j的每一个列向量:
[ σ 1 v 11 σ 2 v 12 ⋮ σ k v 1 k ] , [ σ 1 v 21 σ 2 v 22 ⋮ σ k v 2 k ] , … , [ σ 1 v n 1 σ 2 v n 2 ⋮ σ k v n k ] \left[ \begin{matrix} \sigma_1v_{11}\\ \sigma_2v_{12}\\ \vdots\\ \sigma_kv_{1k} \end{matrix} \right] , \left[ \begin{matrix} \sigma_1v_{21}\\ \sigma_2v_{22}\\ \vdots\\ \sigma_kv_{2k} \end{matrix} \right], \ldots, \left[ \begin{matrix} \sigma_1v_{n1}\\ \sigma_2v_{n2}\\ \vdots\\ \sigma_kv_{nk} \end{matrix} \right] σ1v11σ2v12σkv1k,σ1v21σ2v22σkv2k,,σ1vn1σ2vn2σkvnk
是n个文本在话题向量空间的表示。

所以,通过矩阵的SVD分解进行潜在语义分析:
X ≈ U k Σ k V k T = U k ( Σ k V k T ) X\approx U_k{\Sigma_k}V_k^\mathrm{T} =U_k({\Sigma_k}V_k^\mathrm{T}) XUkΣkVkT=Uk(ΣkVkT)
从而得到了话题空间 U k U_k Uk,以及文本在话题空间的表示 ( Σ k V k T ) ({\Sigma_k}V_k^\mathrm{T}) (ΣkVkT)

非负矩阵(NMF)分解算法

除了可以使用SVD分解,还可以使用非负矩阵分解算法。

基本思想

对单词—文本矩阵进行非负矩阵分解,将其左矩阵作为话题向量空间,将其右矩阵作为文本在话题向量空间的表示。

设单词—文本矩阵是 m × n m\times n m×n的非负矩阵 X X X,文本集合包含 k k k个话题,对 X X X进行非负矩阵分解。即求 m × k m\times k m×k的非负矩阵和 k × n k\times n k×n的非负矩阵满足
X ≈ W H X\thickapprox WH XWH
其中: W = [ w 1 w 2 ⋯ w k ] W=\left[\begin{matrix}w_1& w_2& \cdots& w_k\end{matrix}\right] W=[w1w2wk]表示话题向量空间, w 1 , w 2 , ⋯   , w k w_1, w_2, \cdots, w_k w1,w2,,wk表示文本集合的 k k k个话题。
H = [ h 1 h 2 ⋯ h k ] H=\left[\begin{matrix}h_1& h_2& \cdots& h_k\end{matrix}\right] H=[h1h2hk]表示文本在话题向量空间的表示, h 1 , h 2 , ⋯   , h k h_1, h_2, \cdots, h_k h1,h2,,hk表示文本集合的 n n n个文本。

损失函数

使用迭代的方法进行学习,则可以使用的损失函数有:

(1)平方损失

目标函数:
min ⁡ W , H ∣ ∣ X − W H ∣ ∣ 2 s . t . W , H ≥ 0 \min\limits_{W,H}||X - WH||^2 \\ s.t. \quad W,H \ge 0 W,HminXWH2s.t.W,H0

(2)散度损失函数

首先看看散度的定义:
D ( A ∣ ∣ B ) = ∑ i , j ( a i j log ⁡ a i j b i j − a i j + b i j ) D(A||B) = \sum_{i,j} \left(a_{ij}\log\frac{a_{ij}}{b_{ij}} - a_{ij} + b_{ij}\right) D(AB)=i,j(aijlogbijaijaij+bij)
称为非负矩阵A和B的散度损失函数。其下界时0,当且仅当A=B时达到下届。

∑ i j a i j = ∑ i j b i j = 1 \sum_{ij}a_{ij} = \sum_{ij}b_{ij}=1 ijaij=ijbij=1 时,散度损失函数退化为KL散度或相对熵。

所以右散度损失函数为:
min ⁡ W , H D ( X ∣ ∣ W H ) s . t . W , H ≥ 0 \min \limits_{W,H} D\left(X||WH\right) \\ s.t. \quad W,H \ge 0 W,HminD(XWH)s.t.W,H0

迭代学习算法

(1)平方损失函数更新法则

J ( W , H ) = 1 2 ∥ X − W H ∥ 2 = 1 2 ∑ i , j [ X i j − ( W H ) i j ] 2 J(W,H)=\frac{1}{2}\|X-WH\|^2=\frac{1}{2}\sum_{i,j}[X_{ij}-(WH)_{ij}]^2 J(W,H)=21XWH2=21i,j[Xij(WH)ij]2

采用梯度下降法求解,这里用到了矩阵求导
∂ J ( W , H ) ∂ W i l = − ∑ j [ X i j − ( W H ) i j ] H l j = − [ ( X H T ) i l − ( W H H T ) i l ] ∂ J ( W , H ) ∂ H l j = − [ ( W T X ) l j − ( W T W H ) l j ] \begin{aligned} \frac{\partial J(W,H)}{\partial W_{il}}&=-\sum_j[X_{ij}-(WH)_{ij}]H_{lj}=-[(XH^\mathrm{T})_{il}-(WHH^\mathrm{T})_{il}]\\ \frac{\partial J(W,H)}{\partial H_{lj}}&=-[(W^\mathrm{T}X)_{lj}-(W^\mathrm{T}WH)_{lj}] \end{aligned} WilJ(W,H)HljJ(W,H)=j[Xij(WH)ij]Hlj=[(XHT)il(WHHT)il]=[(WTX)lj(WTWH)lj]
根据更新规则有
W i l = W i l + λ i l [ ( X H T ) i l − ( W H H T ) i l ] H l j = H l j + μ l j [ ( W T X ) l j − ( W T W H ) l j ] λ i l = W i l ( W H H T ) i l μ l j = H l j ( W T W H ) l j W_{il}=W_{il}+\lambda_{il}[(XH^\mathrm{T})_{il}-(WHH^\mathrm{T})_{il}]\\ H_{lj}=H_{lj}+\mu_{lj}[(W^\mathrm{T}X)_{lj}-(W^\mathrm{T}WH)_{lj}]\\ \lambda_{il}=\frac{W_{il}}{(WHH^\mathrm{T})_{il}}\\ \mu_{lj}=\frac{H_{lj}}{(W^\mathrm{T}WH)_{lj}} Wil=Wil+λil[(XHT)il(WHHT)il]Hlj=Hlj+μlj[(WTX)lj(WTWH)lj]λil=(WHHT)ilWilμlj=(WTWH)ljHlj
得到最终的乘法更新法则:
H l j ← H l j ( W T X ) l j ( W T W H ) l j W i l ← W i l ( X H T ) i l ( W H H T ) i l H_{lj}\leftarrow H_{lj}\frac{(W^\mathrm{T}X)_{lj}}{(W^\mathrm{T}WH)_{lj}}\\ W_{il}\leftarrow W_{il}\frac{(XH^\mathrm{T})_{il}}{(WHH^\mathrm{T})_{il}} HljHlj(WTWH)lj(WTX)ljWilWil(WHHT)il(XHT)il

(2)散度损失函数的更新法则

散度乘法更新法则如下:
H l j ← H l j ∑ i [ W i l X i j / ( W H ) i j ] ∑ i W i l W i l ← W i l ∑ j [ H l j X i j / ( W H ) i j ] ∑ j H l j H_{lj}\leftarrow H_{lj}\frac{\sum\limits_i[W_{il}X_{ij}/(WH)_{ij}]}{\sum\limits_iW_{il}}\\ W_{il}\leftarrow W_{il}\frac{\sum\limits_j[H_{lj}X_{ij}/(WH)_{ij}]}{\sum\limits_jH_{lj}} HljHljiWili[WilXij/(WH)ij]WilWiljHljj[HljXij/(WH)ij]

算法实现

具体算法如下:

输入:单词-文本矩阵 X ≥ 0 X\ge 0 X0,文本集合的话题个数 k k k,最大迭代次数 t t t
输出:话题矩阵 W W W,文本表示矩阵 H H H

  1. 初始化
    W ≥ 0 W\ge 0 W0并对 W W W的每一列数据归一化
    H ≥ 0 H\ge 0 H0
  2. 迭代
    对迭代次数从 1 1 1 t t t执行下列步骤:
    a. 更新 W W W的元素,每次迭代对 W W W的列向量归一化,使基向量为单位向量
    b. 更新 H H H的元素。

参考文章:
《统计学习方法 第二版》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值