27、潜在语义分析(LSA)

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=tfjtfijlogdfidf,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} tfj是文本 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 XTY

在这里插入图片描述

在这里插入图片描述

3 潜在语义分析算法

潜在语义分析 利用 矩阵奇异值分解(SVD),对单词-文本矩阵进行奇异值分解

  • 左矩阵 作为话题向量空间
  • 对角矩阵右矩阵的乘积 作为 文本在话题向量空间的表示

潜在语义分析 根据 确定的话题个数k单词-文本矩阵 X X X进行截断奇异值分解

式中 k ≤ n ≤ m k \leq n \leq m knm 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 XWHX0,W0,H0
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)) kmin(m,n)的基向量、系数向量 来 表示较大的数据矩阵

非负矩阵分解 可以表为以下的最优化问题:
min ⁡ ∣ ∣ X − W H ∣ ∣ 2 s t .   W , H ≥ 0 \min ||X−WH||^2\\ st.\ W,H≥0 min∣∣XWH2st. W,H0
非负矩阵分解的算法是迭代算法

乘法更新规则的迭代算法,交替地对 W W W H H H进行更新。
本质是梯度下降法,通过定义特殊的步长和非负的初始值,保证迭代过程及结果的矩阵 W W W H H H均为非负

非负矩阵分解的迭代算法如下:

  • 输入:单词-文本矩阵 X ≥ 0 X \geq 0 X0 , 文本集合的话题个数 k k k , 最大迭代次数 t t t;

  • 输出:话题矩阵 W W W , 文本表示矩阵 H H H

  • (1)初始化。 W ≥ 0 W \geq 0 W0 ,并对 W W W的每一列数据进行归一化; H ≥ 0 H \geq 0 H0

  • (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部分

  • 32
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
LSA(Latent Semantic Analysis,潜在语义分析)是一种用于文本挖掘和自然语言处理的算法。它通过对文本进行数学向量化,以捕捉文本之间的潜在语义关系。LSA算法有以下几个关键步骤: 1. 构建文档-词项矩阵:将文本数据表示为一个矩阵,行表示文档,列表示词项,矩阵中的每个元素表示该词项在对应文档中的频率或权重。 2. 去除噪声和冗余信息:通过应用TF-IDF(词频-逆文档频率)或其他加权模型,可以减少常见的词项和无意义的信息。 3. 对矩阵进行奇异值分解(SVD):将文档-词项矩阵分解为三个矩阵的乘积:U矩阵、Σ矩阵和V转置矩阵。这个过程可以提取出文档和词项之间的潜在语义关系。 4. 选择主题数量:通过观察奇异值的大小,可以选择保留的主题数量。奇异值较大的主题通常包含更多的信息。 5. 降维:通过保留奇异值较大的主题,将文档-词项矩阵降维为一个更低维度的矩阵。这个过程可以减少噪声和冗余信息,并捕捉到文本的潜在语义。 6. 相似性计算:使用降维后的矩阵,可以计算文本之间的相似性。常用的计算方法包括余弦相似度等。 LSA算法在信息检索、文本分类、推荐系统等领域有广泛应用,它可以帮助发现文本背后的隐藏关系和主题。但是,需要注意的是,LSA算法并不能处理词义多义性和语义漂移等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

healed萌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值