1 潜在语义分析概述
潜在语义分析( latent semantic analysis, LSA) 是一种无监督学习方法,主要用于文本的话题分析,其特点是通过矩阵分解发现文本与单词之间的基于话题的语义关系。
- 一种无监督学习方法,主要用于文本的话题分析
- 其特点是通过矩阵分解发现文本与单词之间的基于话题的语义关系
- 最初应用于
文本信息检索
,也被称为潜在语义索引(latent semantic indexing,LSI),在推荐系统、图像处理、生物信息学等领域也有广泛应用
文本信息处理中:
- 传统的方法以单词向量表示文本的语义内容,以
单词向量空间的度量
表示文本之间的语义相似度 - 潜在语义分析 旨在 解决这种方法不能准确表示语义的问题,试图从大量的文本数据中发现潜在的话题
- 以话题向量表示文本的语义内容,以话题向量空间的度量更准确地表示文本之间的语义相似度
潜在语义分析使用的是非概率的话题分析模型
- 将文本集合表示为单词-文本矩阵
- 对单词-文本矩阵进行奇异值分解,从而得到话题向量空间,以及文本在话题向量空间的表示
非负矩阵分解(non-negative matrix factorization,NMF)是另一种矩阵的因子分解方法,其特点是分解的矩阵非负。非负矩阵分解也可以用于话题分析。
2 单词向量空间、话题向量空间
2.1 单词向量空间
文本信息处理的一个核心问题是对文本的语义内容进行表示,并进行文本之间的语义相似度计算。
-
利用向量空间模型(vector space model,VSM),也就是单词向量空间模型(word vector space model)。
-
基本想法:用一个向量表示文本的“语义”,向量的每一维对应一个单词,其数值为该单词在该文本中出现的频数或权值
-
基本假设:
文本中所有单词的出现情况表示了文本的语义内容;
文本集合中的每个文本都表示为一个向量,存在于一个向量空间;
向量空间的度量,如内积或标准化内积表示文本之间的“语义相似度”。 -
单词文本矩阵是稀疏矩阵,元素为频数或权值, m m m个单词, n n 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 ] ⏟ m 个单词, n 个文本 X=\underbrace{\left[\begin{matrix} x_{11} & x_{12} &... & x_{1n} \\ x_{21} & x_{22} &... & x_{2n} \\ ... &... &... & ... \\ x_{m1} & x_{m2} &... & x_{mn} \\ \end{matrix}\right]}_{m个单词,n个文本} X=m个单词,n个文本 x11x21...xm1x12x22...xm2............x1nx2n...xmn -
权值:常用单词频率-逆文本频率(term frequency-inverse document frequency,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 _{\bullet j}}\log \frac{df}{df_i},i=1,2,...,m; j=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_{\bullet j} tf∙j是文本 d j d_j dj中出现的所有单词的频数之和, d f i df_i dfi是含有单词 w i w_i wi的文本数, d f df df是文本集合 D D D的全部本文本数。直观上,一个单词在一个文本中出现的频数越高,这个单词在这个文本中的重要度就越高 : 一个单词在整个文本集合中出现的文本数越少,这个单词就越能表示其所在文本的特点,重要度就越高;一个单词在一个文本的 TF-IDF 是两种重要度的积, 表示综合重要度。
单词向量空间模型的优点:
- 是模型简单,计算效率高。因为单词向量通常是稀疏的,两个向量的内积计算只需要在其同不为零的维度上进行即可,需要的计算很少,可以高效地完成
单词向量空间模型也有一定的局限性:
- 内积相似度未必能够准确表达两个文本的语义相似度上
- 因为自然语言的单词具有 一词多义性(polysemy)及多词一义性(synonymy),所以基于单词向量的相似度计算存在不精确的问题
2.2 话题向量空间
话题(topic),就是指文本所讨论的内容或主题。
- 一个文本一般含有若干个话题
- 如果两个文本的话题相似,那么两者的语义应该也相似
- 话题由若干个语义相关的单词表示
- 同义词(如“airplane”与“aircraft”)可以表示同一个话题
- 而多义词(如“apple”)可以表示不同的话题
这样,基于话题的模型就可以解决上述基于单词的模型存在的问题。
定义一种话题向量空间模型(topic vector space model)
- 给定一个文本,用话题空间的一个向量表示该文本,该向量的每一分量对应一个话题,其数值为该话题在该文本中出现的权值
- 用两个向量的内积或标准化内积表示对应的两个文本的语义相似度
- 注意话题的个数通常远远小于单词的个数,话题向量空间模型更加抽象
- 潜在语义分析正是构建话题向量空间的方法(即话题分析的方法)
- 单词向量空间模型与话题向量空间模型互为补充,两者可以同时使用
单词-文本矩阵 X X X 近似为:单词-话题矩阵 T T T & 话题-文本矩阵 Y Y Y 的乘积形式, X ≈ T Y X \approx TY X≈TY
3 潜在语义分析算法
潜在语义分析 利用 矩阵奇异值分解(SVD),对单词-文本矩阵进行奇异值分解
- 左矩阵 作为
话题向量空间
- 对角矩阵 与 右矩阵的乘积 作为
文本在话题向量空间的表示
潜在语义分析 根据 确定的话题个数k
对单词-文本
矩阵
X
X
X进行截断奇异值分解
式中 k ≤ n ≤ m k \leq n \leq m k≤n≤m , U k U_k Uk 是 m × k m \times k m×k 矩阵,它的列由 X X X 的前 k k k 个互相正交的左奇异向量组成 , ∑ k \sum_k ∑k 是 k k k 阶对角方阵,对角元素为前 k k k 个最大奇异值, V k V_k Vk是 n × k n \times k n×k 矩阵,它的列由 X X X 的前 k k k 个互相正交的右奇异向量组成。
例子
4 非负矩阵分解算法
非负矩阵分解 也可以用于 话题分析
- 对
单词-文本
矩阵进行非负矩阵分解
左矩阵
作为话题向量空间
右矩阵
作为文本在话题向量空间的表示
。注意通常单词-文本
矩阵是非负的(所有元素 ≥ \geq ≥ 0)
定义:找到两个非负矩阵乘积近似表示一个非负矩阵
X
≈
W
H
,
X
≥
0
,
W
≥
0
,
H
≥
0
X \approx WH,X \ge 0, W\ge 0, H \ge 0
X≈WH,X≥0,W≥0,H≥0
X
X
X为
m
×
n
m \times n
m×n 的单词-文本矩阵;
W
W
W 为
m
×
k
m \times k
m×k的基矩阵,表示话题空间;
H
H
H 为
k
×
n
k \times n
k×n的系数矩阵,是文本在话题空间的表示。
非负矩阵分解 旨在 用较少
(
k
≤
min
(
m
,
n
)
)
(k \leq \min (m,n))
(k≤min(m,n))的基向量、系数向量 来 表示较大的数据矩阵
非负矩阵分解 可以表为以下的最优化问题:
min
∣
∣
X
−
W
H
∣
∣
2
s
t
.
W
,
H
≥
0
\min ||X−WH||^2\\ st.\ W,H≥0
min∣∣X−WH∣∣2st. W,H≥0
非负矩阵分解
的算法是迭代算法
乘法更新规则的迭代算法,交替地对
W
W
W和
H
H
H进行更新。
本质是梯度下降法,通过定义特殊的步长和非负的初始值,保证迭代过程及结果的矩阵
W
W
W和
H
H
H均为非负
非负矩阵分解的迭代算法如下:
-
输入:单词-文本矩阵 X ≥ 0 X \geq 0 X≥0 , 文本集合的话题个数 k k k , 最大迭代次数 t t t;
-
输出:话题矩阵 W W W , 文本表示矩阵 H H H。
-
(1)初始化。 W ≥ 0 W \geq 0 W≥0 ,并对 W W W的每一列数据进行归一化; H ≥ 0 H \geq 0 H≥0
-
(2)迭代。对迭代次数由 1 1 1到 t t t执行下列步骤:
-
a. 更新 W W W的元素,对l从 1 1 1到 k k k, i i i从 1 1 1到 m m m按下式更新 w i l w_{il} wil
W i l = W i l ( X H T ) i l ( W H H T ) i l , i = 1 , 2 , . . . , m ; l = 1 , 2 , . . . , k W_{il}=W_{il}\frac{(XH^T)_{il}}{(WHH^T)_{il}},i=1,2,...,m;l=1,2,...,k Wil=Wil(WHHT)il(XHT)il,i=1,2,...,m;l=1,2,...,k -
b. 更新 H H H的元素,对 l l l从 1 1 1到 k k k, j j j从 1 1 1到 n n n按下式更新 w l j w_{lj} wlj
H l j = W l j ( W T X ) l j ( W T W H ) l j , l = 1 , 2 , . . . , k ; j = 1 , 2 , . . . , n H_{lj}=W_{lj}\frac{(W^TX)_{lj}}{(W^TWH)_{lj}},l=1,2,...,k;j=1,2,...,n Hlj=Wlj(WTWH)lj(WTX)lj,l=1,2,...,k;j=1,2,...,n
-
5 sklearn中的潜在语义分析
5.1 TruncatedSVD类
class sklearn.decomposition.TruncatedSVD(n_components=2,algorithm='randomized', n_iter=5,
random_state=None, tol=0.0)
主要参数:
n_components
: default = 2,输出维度(话题数量),algorithm
: default = “randomized”,算法选择。SVD求解器使用。或者用“arpack”表示SciPy中的arpack包装(SciPy .sparse.linalg.svds),或者用“random”表示由Halko(2009)提出的随机算法。n_iter
: optional (default 5),迭代次数。随机SVD求解器的迭代次数。ARPACK没有使用。默认值比randomized_svd中的默认值大,用于处理可能有较大的缓慢衰减频谱的稀疏矩阵。
属性:
components_
, shape (n_components, n_features)explained_variance_
, shape (n_components,),训练样本的方差由投影转换到每个分量。singular_values_
, shape (n_components,),对应于每个选定分量的奇异值。奇异值等于低维空间中n_component
变量的2-范数。explained_variance_ratio_
, shape (n_components,),所选择的每个组成部分所解释的方差百分比。
在话题向量空间中,一般TruncatedSVD
实例化后,传入的是TfidfVectorizer
的结果。
5.2 TfidfVectorizer类
class sklearn.feature_extraction.text.TfidfVectorizer(input='content',encoding='utf-8',
decode_error='strict', strip_accents=None,lowercase=True, preprocessor=None, tokenizer=None,
analyzer='word', stop_words=None, token_pattern='(?u)\b\w\w+\b', ngram_range=(1, 1),max_df=1.0,
min_df=1, max_features=None, vocabulary=None, binary=False,dtype=<class 'numpy.float64'>,
norm='l2', use_idf=True, smooth_idf=True,sublinear_tf=False)
参数详介绍见NLP工具笔记中TF-IDF
部分