前言
在文本挖掘中,主题模型是比较特殊的一块,它的思想不同于我们常用的机器学习算法,因此这里我们需要专门来总结文本主题模型的算法。本文关注于潜在语义索引算法(LSI)的原理。
潜在语义索引(LSI)
潜在语义索引(Latent Semantic Indexing,以下简称LSI),有的文章也叫Latent Semantic Analysis(LSA)。其实是一个东西,后面我们统称LSI,它是一种简单实用的主题模型。LSI是基于奇异值分解(SVD)的方法来得到文本的主题的。
这里我们简要回顾下SVD:对于一个m×n的矩阵A,可以分解为下面三个矩阵:
A
m
×
n
=
U
m
×
m
Σ
m
×
n
V
n
×
n
T
A_{m×n}=U_{m×m}\Sigma_{m×n} V^{T}_{n×n}
Am×n=Um×mΣm×nVn×nT
有时为了降低矩阵的维度到k,SVD的分解可以近似的写为:
A
m
×
n
=
U
m
×
k
Σ
k
×
k
V
k
×
n
T
A_{m×n}=U_{m×k}\Sigma_{k×k} V^{T}_{k×n}
Am×n=Um×kΣk×kVk×nT
如果把上式用到我们的主题模型,则SVD可以这样解释:我们输入的有
m
m
m个文本,每个文本有
n
n
n个词。而
A
i
j
A_{ij}
Aij则对应第
i
i
i个文本的第
j
j
j个词的特征值,这里最常用的是基于预处理后的标准化TF-IDF值。
k
k
k是我们假设的主题数,一般要比文本数少。SVD分解后,
U
i
l
U_{il}
Uil对应第i个文本和第l个主题的相关度。
V
j
m
V_jm
Vjm对应第
j
j
j个词和第
m
m
m个词义的相关度。
Σ
l
m
Σ_lm
Σlm对应第
l
l
l个主题和第
m
m
m个词义的相关度。
也可以反过来解释:我们输入的有
m
m
m个词,对应
n
n
n个文本。而
A
i
j
A_{ij}
Aij则对应第
i
i
i个词档的第
j
j
j个文本的特征值,这里最常用的是基于预处理后的标准化TF-IDF值。k是我们假设的主题数,一般要比文本数少。SVD分解后,
U
i
l
U_{il}
Uil对应第
i
i
i个词和第
l
l
l个词义的相关度。
V
j
m
V_{jm}
Vjm对应第
j
j
j个文本和第
m
m
m个主题的相关度。
Σ
l
m
Σ_{lm}
Σlm对应第
l
l
l个词义和第
m
m
m个主题的相关度。
这样我们通过一次SVD,就可以得到文档和主题的相关度,词和词义的相关度以及词义和主题的相关度。
LSI用于文本相似度计算
通过LSI得到的文本主题矩阵可以用于文本相似度计算。而计算方法一般是通过余弦相似度。比如对于下面的三文档两主题的例子。矩阵
V
V
V如下所示:
[
−
0.4945
−
0.6458
−
0.5817
0.6492
−
0.7194
0.2469
]
\begin{bmatrix} -0.4945 & -0.6458 & -0.5817\\ 0.6492 & -0.7194 &0.2469 \end{bmatrix}
[−0.49450.6492−0.6458−0.7194−0.58170.2469]
计算第一个文本和第二个文本的余弦相似度如下 :
s
i
m
(
d
1
,
d
2
)
=
(
−
0.4945
)
∗
(
−
0.6458
)
+
(
0.6492
)
∗
(
−
0.7194
)
(
−
0.4945
)
2
+
0.649
2
2
(
−
0.6458
)
2
+
(
−
0.7194
)
2
sim(d_1,d_2)=\frac{(-0.4945)*(-0.6458)+(0.6492)*(-0.7194)}{\sqrt{(-0.4945)^2+0.6492^2}\sqrt{(-0.6458)^2+(-0.7194)^2}}
sim(d1,d2)=(−0.4945)2+0.64922(−0.6458)2+(−0.7194)2(−0.4945)∗(−0.6458)+(0.6492)∗(−0.7194)
LSI主题模型总结
LSI是最早出现的主题模型了,它的算法原理很简单,一次奇异值分解就可以得到主题模型,同时解决词义的问题,非常漂亮。但是LSI有很多不足,导致它在当前实际的主题模型中已基本不再使用。
主要的问题有:
- SVD计算非常的耗时,尤其是我们的文本处理,词和文本数都是非常大的,对于这样的高维度矩阵做奇异值分解是非常难的。
- 主题值的选取对结果的影响非常大,很难选择合适的k值。
- LSI得到的不是一个概率模型,缺乏统计基础,结果难以直观的解释。
对于问题1),主题模型非负矩阵分解(NMF)可以解决矩阵分解的速度问题。对于问题2),这是难题了,大部分主题模型的主题的个数选取一般都是凭经验的,较新的层次狄利克雷过程(HDP)可以自动选择主题个数。对于问题3),牛人们整出了pLSI(也叫pLSA)和隐含狄利克雷分布(LDA)这类基于概率分布的主题模型来替代基于矩阵分解的主题模型。
回到LSI本身,对于一些规模较小的问题,如果想快速粗粒度的找出一些主题分布的关系,则LSI是比较好的一个选择,其他时候,如果你需要使用主题模型,推荐使用LDA和HDP。
结束语
本人大三学生一枚,学识尚浅,不喜勿喷,希望今日能抛砖引玉,请各位大佬一定不吝赐教!!!
参考自:https://www.cnblogs.com/pinard/p/6805861.html