本博客主要用于本人重新复习知识点,所有参考列在文尾。如有错误,希望一起交流。
目录
基础知识
潜在语义分析(latent semantic analysis, LSA) 是一种无监督学习。
- 用处:文本话题分析
- 特点:通过矩阵分解发现文本与单词之间的基于话题的语义关系。
- 基本想法:为了更精确表示语义 (比如解决单词多义性,多词一义性),从大量文本数据中发现潜在的话题,构造话题向量空间 (对比于单词向量空间)
表示文本的语义内容地方式:话题向量 (对比于单词向量)
表示文本之间的语义相似度地方式:话题向量空间的度量 (对比于单词向量空间的度量) - 模型:非概率的话题分析模型
奇异值分解和非负矩阵分解都可以用于话题分析
1. 单词向量空间
问题背景:对文本的语义内容进行表示,并进行文本之间的语义相似度计算。
方法:利用(单词)向量空间模型。
- 基本想法:将文本表示为一个向量,这个向量表示该文本的语义,向量每一维对应一个单词,数值表示这个单词在文本中出现的频数或权值。
- 基于的假设:文本中所有单词的出现情况表示了文本的语义内容。(不太精准)
- 多个文本形成文本集合,一个文本表示为一个向量,存在于一个向量空间。向量空间的度量表示文本之间的 “语义相似度”。
应用:文本信息检索中,它的任务是,用户提出查询,帮助用户找到与查询最相关的文本,以排序的形式展示给用户。如果采用单词向量空间模型,查询看作伪文本,与文本一同表示为单词的向量,计算二者之间的内积作为语义相似度,用这个相似度的高低对文本进行排序。
数学定义:
语义相似度直观理解:如果两个文本中共同出现的单词越多,其语义就越相似,这时对应的单词向量同不为零的维度就越多,内积就越大,表示两个文本的语义越相似。这方面看确实能很好地表示文本之间的语义相似度,两个文本的语义相似度由所有的单词在两个文本中共同出现的“模式”决定。
优缺点:
- 模型简单,计算效率高;
- 基于单词向量的相似度 (内积相似度) 计算存在不精确的问题。因为不能处理自然语言的单词具有多义性以及多次一义性的特点。
2. 话题向量空间
基本想法
一个文本一般含有若干个话题,如果两个文本的话题相似,那么两者的语义应该也相似。话题可以由若干个语义相似的单词表示 (同义词可以表示同一个话题,多义词表示不同的话题)。其实就相当于在单词向量的基础上做了一个变换。
模型
话题向量空间模型(相比单词向量空间模型更抽象)
文本集合 D D D 有 n n n 维;单词集合 W W W 有 m m m 维,
单词-文本矩阵
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 = \begin{bmatrix} x_{11} & x_{12} & ... & x_{1n} \\ x_{21} & x_{22} & ... & x_{2n} \\ ... & ... & ... & ... \\ x_{m1} & x_{m2} & ... & x_{mn} \end{bmatrix}
X=⎣⎢⎢⎡x11x21...xm1x12x22...xm2............x1nx2n...xmn⎦⎥⎥⎤
单词空间 ==> 话题空间
话题由单词集合
W
W
W 上的
m
m
m 维向量表示,称为话题向量(话题向量由单词总集合的线性表示):
t
l
=
[
t
1
l
t
2
l
.
.
.
t
m
l
]
,
l
=
1
,
.
.
.
,
k
t_l = \begin{bmatrix} t_{1l} \\ t_{2l} \\ ... \\ t_{ml} \end{bmatrix}, \ l=1,...,k
tl=⎣⎢⎢⎡t1lt2l...tml⎦⎥⎥⎤, l=1,...,k,其中
t
i
l
t_{il}
til 是单词
w
i
w_i
wi 在话题
t
l
t_l
tl 的权值。一共
k
k
k 个话题,这
k
k
k 个话题向量张成一个话题向量空间
T
T
T,表示成矩阵称为单词-话题矩阵
T
=
[
t
11
t
12
.
.
.
t
1
k
t
21
t
22
.
.
.
t
2
k
.
.
.
.
.
.
.
.
.
.
.
.
t
m
1
t
m
2
.
.
.
t
m
k
]
T = \begin{bmatrix} t_{11} & t_{12} & ... & t_{1k} \\ t_{21} & t_{22} & ... & t_{2k} \\ ... & ... & ... & ... \\ t_{m1} & t_{m2} & ... & t_{mk} \end{bmatrix}
T=⎣⎢⎢⎡t11t21...tm1t12t22...tm2............t1kt2k...tmk⎦⎥⎥⎤.
3. 潜在语义分析
文本用话题向量空间表示
文本集合中的一个文本 d j d_j dj
==> 可以由单词向量空间中的一个向量 x j x_j xj表示
==> 再将
x
j
x_j
xj投影到话题向量空间T中,由话题向量空间的一个向量
y
j
y_j
yj表示:
y
j
=
[
y
1
j
y
2
j
.
.
.
y
k
j
]
,
l
=
1
,
.
.
.
,
n
y_j = \begin{bmatrix} y_{1j} \\ y_{2j} \\ ... \\ y_{kj} \end{bmatrix}, \ l=1,...,n
yj=⎣⎢⎢⎡y1jy2j...ykj⎦⎥⎥⎤, l=1,...,n,其中
y
l
j
y_{lj}
ylj 是文本
d
j
d_j
dj 在话题
t
l
t_l
tl 的权值。表示成矩阵称为话题-文本矩阵
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 = \begin{bmatrix} y_{11} & y_{12} & ... & y_{1n} \\ y_{21} & y_{22} & ... & y_{2n} \\ ... & ... & ... & ... \\ y_{k1} & y_{k2} & ... & y_{kn} \end{bmatrix}
Y=⎣⎢⎢⎡y11y21...yk1y12y22...yk2............y1ny2n...ykn⎦⎥⎥⎤.
所以,单词文本矩阵可以近似表示为单词话题矩阵与话题文本矩阵的乘积形式,这就是潜在语义分析:
X
≈
T
Y
X \approx TY
X≈TY
文本相似度
经过潜在语义分析后,由原先的
x
i
⋅
x
j
x_i \cdot x_j
xi⋅xj,变为话题向量空间中由对应的向量的内积
y
i
⋅
y
j
y_i \cdot y_j
yi⋅yj 表示。
要进行潜在语义分析需要同时决定两个部分,一个是话题向量空间T,一个是文本在话题空间的表示Y,使两者的乘积是原始矩阵数据的近似,而这一结果完全从话题文本矩阵的信息中获得。
4. 基于奇异值分解的潜在语义分析
可以通过对单词-文本矩阵的奇异值分解进行潜在语义分析:
X
≈
U
k
Σ
k
V
k
T
=
U
k
(
Σ
k
V
k
T
)
X \approx U_k \Sigma_k V_k^T =U_k (\Sigma_k V_k^T)
X≈UkΣkVkT=Uk(ΣkVkT)得到话题空间
U
k
U_k
Uk,以及文本在话题空间的表示
Σ
k
V
k
T
\Sigma_k V_k^T
ΣkVkT.
[
x
1
x
2
.
.
.
x
n
]
≈
[
u
1
u
2
.
.
.
u
k
]
[
σ
1
v
11
σ
1
v
21
.
.
.
σ
1
v
n
1
σ
2
v
12
σ
1
v
22
.
.
.
σ
1
v
n
2
.
.
.
.
.
.
.
.
.
.
.
.
σ
k
v
1
k
σ
k
v
2
k
.
.
.
σ
k
v
n
k
]
\begin{bmatrix} x_{1} & x_{2} &... & x_{n} \end{bmatrix} \approx \begin{bmatrix} u_{1} & u_{2} &... & u_{k} \end{bmatrix} \begin{bmatrix} \sigma_1v_{11} & \sigma_1v_{21} & ... & \sigma_1v_{n1} \\ \sigma_2v_{12} & \sigma_1v_{22} & ... & \sigma_1v_{n2} \\ ... & ... & ... & ... \\ \sigma_kv_{1k} & \sigma_kv_{2k} & ... & \sigma_kv_{nk} \end{bmatrix}
[x1x2...xn]≈[u1u2...uk]⎣⎢⎢⎡σ1v11σ2v12...σkv1kσ1v21σ1v22...σkv2k............σ1vn1σ1vn2...σkvnk⎦⎥⎥⎤
文本 d j d_j dj 的近似表达: 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 x_j \approx U_k (\Sigma_k V_k^T)_j = \begin{bmatrix} u_{1} & u_{2} &... & u_{k} \end{bmatrix} \begin{bmatrix} \sigma_1v_{j1} \\ \sigma_2v_{j2} \\ ... \\ \sigma_kv_{jk} \end{bmatrix} = \sum \limits_{l=1}^k \sigma_l v_{jl}u_l, \ \ j=1,2,...,n xj≈Uk(ΣkVkT)j=[u1u2...uk]⎣⎢⎢⎡σ1vj1σ2vj2...σkvjk⎦⎥⎥⎤=l=1∑kσlvjlul, j=1,2,...,n
5. 基于非负矩阵分解的潜在语义分析
可以通过对单词-文本矩阵
X
X
X 的非负矩阵分解进行潜在语义分析:
X
≈
W
H
X \approx WH
X≈WH得到话题空间
W
W
W,以及文本在话题空间的表示
H
H
H.
- 涉及到的三个矩阵皆非负。
- W , H W,H W,H 小于 X X X,非负矩阵分解是对原数据的压缩。
- W为基矩阵,H为系数矩阵(可以从下面的式子看出线性组合)。
- 非负矩阵分解目标:旨在用较少的基向量、系数向量来表示较大的数据矩阵。
- 直观解释:话题向量和文本向量都非负,对应着“伪概率分布”,向量的线性组合表示局部叠加构成整体。
文本 d j d_j dj 的近似表达: x j ≈ W h j = [ w 1 w 2 . . . w k ] [ h 1 j h 2 j . . . h k j ] = ∑ l = 1 k h l j w l , j = 1 , 2 , . . . , n x_j \approx Wh_j = \begin{bmatrix} w_{1} & w_{2} &... & w_{k} \end{bmatrix} \begin{bmatrix}h_{1j} \\ h_{2j} \\ ... \\ h_{kj} \end{bmatrix} = \sum \limits_{l=1}^k h_{lj}w_l, \ \ j=1,2,...,n xj≈Whj=[w1w2...wk]⎣⎢⎢⎡h1jh2j...hkj⎦⎥⎥⎤=l=1∑khljwl, j=1,2,...,n
非负矩阵求解的形式化
这部分可以重新熟悉一下算法整套流程。
非负矩阵求解可以形式化为最优化问题求解。
定义损失函数 \ 代价函数:平方损失 or 散度 (定义见书)
定义最优化问题: min W , H ∣ ∣ X − W H ∣ ∣ 2 s . t . W , H ≥ 0 \min \limits_{W,H} ||X-WH||^2 \ \ \ \ \ s.t. \ W,H \ge 0 W,Hmin∣∣X−WH∣∣2 s.t. W,H≥0 min W , H D ( X ∣ ∣ W H ) s . t . W , H ≥ 0 \min \limits_{W,H} D(X||WH) \ \ \ \ \ s.t. \ W,H \ge 0 W,HminD(X∣∣WH) s.t. W,H≥0
考虑:目标函数只对一个变量是凸函数,所以找到全局最优很难。所以考虑用数值最优化方法求局部最优。
- 梯度下降法:容易实现,但是收敛速度慢
- 共轭梯度法:收敛速度快,但实现较复杂
- 基于“乘法更新规则”的优化算法,交替地对W和H进行更新。
算法:非负矩阵分解的迭代算法
输入:单词-文本矩阵
X
≥
0
X \ge 0
X≥0,文本集合地话题个数k,最大迭代次数t;
输出:话题矩阵W,文本表示矩阵H。
(1) 初始化
W
≥
0
W \ge 0
W≥0,并对
W
W
W 的每一列数据归一化 (使基向量为单位向量);
H
≥
0
H \ge 0
H≥0;
(2) 迭代
对迭代次数由
1
1
1 到
t
t
t 执行下列步骤:
(a) 更新
W
W
W 的元素,对
l
l
l 从
1
1
1 到
k
k
k,
i
i
i 从
1
1
1 到
m
m
m 按乘法更新规则更新
W
i
l
W_{il}
Wil;
(b) 更新
H
H
H 的元素,对
l
l
l 从
1
1
1 到
k
k
k,
i
i
i 从
1
1
1 到
n
n
n 按乘法更新规则更新
H
l
j
H_{lj}
Hlj;(规则见书)
应用
优缺点:
优点:
- LSA快速且易于实施。
- 结果相当好,比简单的向量模型强很多。
缺点:
- 因为它是线性模型,因此在具有非线性依赖性的数据集上可能效果不佳。
- LSA假设文本中的词项服从正态分布,这可能不适用于所有问题。
- LSA涉及到了SVD,它是计算密集型的,当新数据出现时难以更新。
Python 实现
参考
- 李航,统计机器学习方法(第二版),2019:321 - 338.
- 优缺点: