潜在语义分析(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

每个列向量对应一个文本,每一行对应单词 w i w_i wi
元素 x i j x_{ij} xij代表单词 w i w_i wi在文本 d j d_j dj中出现的频数或者权值。权值采用单词词频—逆文本频率(TF—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 中出现所有单词的频数之和, d f i df_i dfi 是含有单词 w i w_i wi 的文本数, d f df df 是文本集合D的全部文本集。一个单词在一个文本中出现的频数越高,这个单词在这个文本中的重要度就越高,即 t f i j t f ⋅ j \frac{tf_{ij}}{tf_{\cdot j}} tfjtfij 越大 ;一个单词在整个文本集合中出现的文本数越少,这个单词就越能表示其所在文本的特点,重要度就越高,即 log ⁡ d f d f i \log\frac{\mathrm{d}f}{\mathrm{d}f_i} logdfidf 越大;一个单词在一个文本的TF-IDF是两种重要度的积,表示综合重要度。

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

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

话题向量空间

(1)话题向量空间

两个文本的语义相似度可以体现在两者的话题相似度上,一个文本有若干个话题。

给定 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

假设所有文本共含有 k k k 个话题,单词—话题矩阵如下:
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
每个列向量对应一个话题,每一行对应单词 w i w_i wi

元素 t i l t_{il} til代表单词 w i w_i wi在话题 t l t_l tl中出现的权值。

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

话题—文本矩阵:
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 i t_i ti

元素 y l j y_{lj} ylj代表文本 d j d_j dj 在话题 t l t_l tl中出现的权值。

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

单词—文本矩阵 X X X 可以近似的表示为单词—话题矩阵 T T T 与话题—文本矩阵 Y Y Y 的乘积形式这就是潜在语义分析:
X ≈ T Y X \approx TY XTY
如下图所示:

在这里插入图片描述

LSA 是将文本在单词向量空间的表示通过线性变换转换为在话题向量空间的表示,如下图所示:

在这里插入图片描述

算法实现

矩阵奇异值(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
截断奇异值分解
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矩阵,前 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) Σ \Sigma Σ k k k阶方阵,前 k k k个最大奇异值; V k V_k Vk n × k n\times k n×k矩阵,前 k k k个相互正交的右奇异向量

。这两个矩阵的乘积,则对应了话题-文本矩阵(文本的话题空间向量表示)。所以,矩阵 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 列向量。每一个列向量:
[ σ 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
是文本在话题向量空间的表示。

所以,通过矩阵的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)分解算法

基本思想

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

设单词—文本矩阵是 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、付费专栏及课程。

余额充值