1.简介
LSA使一种无监督学习方法,主要用于文本的话题分析,其特点使通过矩阵分解发现文本与单词之间的基于话题的语义关系。潜在语义分析通常将文本集合表示为单词-文本矩阵,对单词-文本矩阵进行奇异值分解或非负矩阵分解(non-negative matrix factorizatiion,NMF),从而得到话题向量空间以及文本在话题向量空间的表示。
2.相关概念
2.1 单词向量空间
给定一个含有n个文本的集合
D
=
{
d
1
,
d
2
,
.
.
.
,
d
n
}
D=\{d_1,d_2,...,d_n\}
D={d1,d2,...,dn}以及在所有文本中出现m个单词的集合
W
=
{
w
1
,
w
2
,
.
.
.
,
w
m
}
W=\{w_1,w_2,...,w_m\}
W={w1,w2,...,wm},将单词在文本中出现的数据用一个m x n 单词-文本矩阵(word-document matrix)表示,记作X。
x
i
j
x_{ij}
xij表示单词
w
i
w_i
wi在文本
d
j
d_j
dj中出现的频数或权值。
权值通常用单词频率-逆文本频率(term frequency-inverse document frequency,TF-IDF)表示,其定义为
T
F
I
D
F
i
j
=
t
f
i
j
t
f
.
j
l
o
g
d
f
d
f
i
,
i
∈
(
1
,
2
,
.
.
.
,
m
)
,
j
∈
(
1
,
2
,
.
.
.
,
n
)
TFIDF_{ij}=\frac{tf_{ij}}{tf_{.j}}log\frac{df}{df_i},i\in{(1,2,...,m)},j\in{(1,2,...,n)}
TFIDFij=tf.jtfijlogdfidf,i∈(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是所有文本数,综合构成单词重要度,需要说明的是式子右边,一般认为单词在整体文本中出现的越少越能代表其所在文本的特点,即越重要,即右边越大越重要。
语义相似度通常使用两个单词向量的内积 x i ⋅ x j x_i·x_j xi⋅xj或标准化内积(余弦) x i ⋅ x j ∣ ∣ ∣ x i ∣ ∣ ⋅ ∣ ∣ x j ∣ ∣ \frac{x_i·x_j}{|||x_i||·||x_j||} ∣∣∣xi∣∣⋅∣∣xj∣∣xi⋅xj表示对应的文本之间的语义相似度
优点:模型简单,计算效率高
缺点:未必能准确表达两个文本的语义相似度,因为自然语言存在一词多义性(polysemy)和多词一义性(synonymy)
2.2 话题向量空间
给定一个文本集合
D
=
{
d
1
,
d
2
,
.
.
.
,
d
n
}
D=\{d_1,d_2,...,d_n\}
D={d1,d2,...,dn} 和一个相应的单词集合
W
=
{
w
1
,
w
2
,
.
.
.
,
w
m
}
W=\{w_1,w_2,...,w_m\}
W={w1,w2,...,wm}构成单词-文本矩阵X,即原始的单词向量空间,每一列代表一个文本在单词向量空间的表示。假设所有文本含有k个话题,假设每个话题由一个定义在单词集合W上的m维向量表示。称为话题向量
t
l
=
[
t
1
l
,
t
2
l
,
.
.
.
t
m
l
]
T
t_l=[t_{1l},t_{2l},...t_{ml}]^T
tl=[t1l,t2l,...tml]T。其中
t
i
l
t_{il}
til是单词在话题的权值,权值越大该单词在该话题的重要度越高。单词-话题构成矩阵T。使用矩阵Y表示话题-文本矩阵。
使用T及Y可以近似表示X,即潜在语义分析
X
=
T
Y
X=TY
X=TY
2.2.1 奇异值分解
通过奇异值分解,左奇异向量即单词-话题矩阵,对焦矩阵与右奇异向量乘积则Y,由此进行潜在语义分析。
2.2.2 非负矩阵分解
给定一个非负矩阵X>=0,找到两个非负矩阵m x k W与 k x n H使得
X
=
W
H
X=WH
X=WH(近似相等)
非负矩阵分解可以形式化为最优化问题,即使得目标函数
∣
∣
X
−
W
H
∣
∣
2
||X-WH||^2
∣∣X−WH∣∣2关于W H最小化,满足条件二者非负,损失函数可以使用平方损失
∣
∣
A
−
B
∣
∣
2
=
∑
(
a
i
j
−
b
i
j
)
2
||A-B||^2=\sum{(a_{ij}-b_{ij})^2}
∣∣A−B∣∣2=∑(aij−bij)2或散度(divergence)
D
(
A
∣
∣
B
)
=
∑
(
a
i
j
l
o
g
a
i
j
b
i
j
−
a
i
j
+
b
i
j
)
D(A||B)=\sum{}(a_{ij}log\frac{a_{ij}}{b_{ij}}-a_{ij}+b_{ij})
D(A∣∣B)=∑(aijlogbijaij−aij+bij)
3. 算法
- 输入:单词-文本矩阵X非负,文本集合话题个数k,最大迭代次数t
- 输出:话题矩阵W,文本矩阵H
- 初始化:W列向量归一化
- 迭代,进行最多t次迭代
- W i l = W i l + λ i l [ ( X H T ) i l − ( W H H T ) i l ] W_{il}=W_{il}+\lambda_{il}[(XH^T)_{il}-(WHH^T)_{il}] Wil=Wil+λil[(XHT)il−(WHHT)il]
- H l j = H l j + μ l j [ ( W T X ) l j − ( W T W H ) l j ] H_{lj}=H_{lj}+\mu_{lj}[(W^TX)_{lj}-(W^TWH)_{lj}] Hlj=Hlj+μlj[(WTX)lj−(WTWH)lj]
- 步长分别取 λ i l = W i l ( W H H T ) i l \lambda_{il}=\frac{W_{il}}{(WHH^T)_{il}} λil=(WHHT)ilWil, μ l j = H l j ( W T W H ) l j \mu_{lj}=\frac{H_{lj}}{(W^TWH)_{lj}} μlj=(WTWH)ljHlj
4. 概率潜在语义分析
4.1 生成模型
假设存在单词集合W,含有m个单词,文本集合D,含有n个文本,话题集合Z,含有k个话题(预先设定,d取值文本,w取值单词,z取值话题
概率分布
P
(
d
)
P(d)
P(d),条件概率分布
P
(
z
∣
d
)
,
P
(
w
∣
z
)
P(z|d),P(w|z)
P(z∣d),P(w∣z)
- 依据 P ( d ) P(d) P(d),从文本集合中随机选取一个文本d,共生成N个文本,针对每个文本,执行以下操作
- 在文本d给定的条件下,依据条件概率分布 P ( z ∣ d ) P(z|d) P(z∣d),从话题集合随机选取一个话题z,共生成L个话题,此处L指文本长度
- 在话题z给定的条件下,依据条件概率分布 P ( w ∣ z ) P(w|z) P(w∣z),从单词集合中随机选取一个单词w
- 文本-单词共现数据T的生成概率为所有单词文本对的生成概率的乘积
- P ( T ) = ∏ ( w , d ) = P ( w , d ) n ( w , d ) P(T)=\prod_{(w,d)}=P(w,d)^{n(w,d)} P(T)=∏(w,d)=P(w,d)n(w,d) n(w,d)表示(w,d)出现次数,每个单词文本对生成概率为
- P ( w , d ) = P ( d ) ∑ z P ( z ∣ d ) P ( w ∣ z ) P(w,d)=P(d)\sum_zP(z|d)P(w|z) P(w,d)=P(d)∑zP(z∣d)P(w∣z)
4.2 共现模型
定义与生成模型等价的共现模型
4.3 算法
- 输入:设单词集合为W, 文本集合为D,话题集合为Z,共线数据 n ( w i , d j ) , i ∈ r a n g e ( m + 1 ) , j ∈ r a n g e ( n + 1 ) {n(w_i,d_j)},i\in{range(m+1)}, j\in{range(n+1)} n(wi,dj),i∈range(m+1),j∈range(n+1)
- 输出: P ( w i ∣ z k ) P(w_i|z_k) P(wi∣zk)和 P ( z k ∣ d j ) P(z_k|d_j) P(zk∣dj)
- 设置参数初始值
- EM法迭代:即求平均,再求极大值
- E步:
- P ( z k ∣ w i , d j ) = P ( w i ∣ z k ) P ( z k ∣ d j ) ∑ k = 1 K P ( w i ∣ z k ) P ( z k ∣ d j ) P(z_k|w_i,d_j)=\frac{P(w_i|z_k)P(z_k|d_j)}{\sum^K_{k=1}P(w_i|z_k)P(z_k|d_j)} P(zk∣wi,dj)=∑k=1KP(wi∣zk)P(zk∣dj)P(wi∣zk)P(zk∣dj)
- M步:
- P ( w i ∣ z k ) = ∑ j = 1 N n ( w i , d j ) P ( z k ∣ w i , d j ) ∑ m = 1 M ∑ n = 1 N n ( w i , d j ) P ( z k ∣ w i , d j ) P(w_i|z_k)=\frac{\sum_{j=1}^Nn(w_i,d_j)P(z_k|w_i,d_j)}{\sum_{m=1}^M\sum_{n=1}^Nn(w_i,d_j)P(z_k|w_i,d_j)} P(wi∣zk)=∑m=1M∑n=1Nn(wi,dj)P(zk∣wi,dj)∑j=1Nn(wi,dj)P(zk∣wi,dj)
- P ( z k ∣ d j ) = ∑ i = 1 M n ( w i , d j ) P ( z k ∣ w i , d j ) n ( d j ) P(z_k|d_j)=\frac{\sum^M_{i=1}n(w_i,d_j)P(z_k|w_i,d_j)}{n(d_j)} P(zk∣dj)=n(dj)∑i=1Mn(wi,dj)P(zk∣wi,dj)