话题模型
单词向量空间与话题向量空间
潜在语义分析(latent semantic analysis, LSA) 是一种无监督学习方法,主要用于文本的话题分析,其特点是通过矩阵分解发现文本与单词之间基于话题的语义关系。
文本信息处理中,传统的方法以单词向量表示文本的语义内容,以单词向量空间的度量表示文本之间的语义相似度。潜在语义分析旨在解决这种方法不能准确表示语义的问题,试图从大量的文本数据中发现潜在的话题,以话题向量表示文本的语义内容,以话题向量空间的度量更准确地表示文本之间的语义相似度。这也是话题分析(topic modeling)的基本想法。
LSA首先将文本集合表示为单词-文本矩阵,对单词-文本矩阵进行奇异值分解,从而得到话题向量空间,以及文本在话题向量空间的表示。
单词向量空间
信息检索、文本数据挖掘等领域的一个核心问题是对文本的语义内容进行表示,并进行文本之间的语义相似度计算。最简单的办法是向量空间模型(vector space model):用一个向量表示某一文本的“语义”,向量的每一维对应一个单词,其数值为单词在文本中出现的频数或权值。如此一来,文本集合中的每个文本都表示为一个向量,存在于一个向量空间,文本间的内积表示文本相似度。
$$ X=\left[\begin{array}{cccc} x_{11} & x_{12} & \cdots & x_{1 n} \\ x_{21} & x_{22} & \cdots & x_{2 n} \\ \vdots & \vdots & & \vdots \\ x_{m 1} & x_{m 2} & \cdots & x_{m n} \end{array}\right] $$其中$x_{ij}$表示单词$w_i$在文本$d_j$中再出现的频数或权值,矩阵的一列对应一个文本。由于单词的种类很多,而每个文本中出现单词的种类通常较少,因此该矩阵是一个稀疏矩阵。
$$ T F_{w}=\frac{\text {给定词} w \text {出现的次数}}{\text {文章的总次数}} \quad I D F_{w}=\log \left(\frac{\text {语料库文章的总数}}{\text {包含关键词} w \text {的文章数量}+1}\right) \quad TF-IDF=TF \times IDF $$直观上,一个单词在一个文本中出现的频数越高,这个单词在这个文本中的重要程度就越高;一个单词在整个文本集合中出现的文本数越少,这个单词就越能表示其所在文本的特点,重要度就越高。TF-IDF是两种重要度的积,表示综合重要度。
$$ \frac{x_i \cdots x_j}{\|x_i\|\|x_j\|} $$直观上,在两个文本中共同出现的单词越多,其语义内容就越相近,这时,对应的单词向量同不为零的维度就越多,内积就越大,表示两个文本在语义内容上越相似。
单词向量空间模型的优点是模型简单,计算效率高;局限性是内积并不能准确表达文本的语义相似度,且自然语言单词具有一词多义和多词一义的特性,因而存在不精确的问题。
话题向量空间
两个文本的语义相似度可以体现在两者的话题(topic)相似度上。话题没有严格的定义,就是指文本所讨论的内容或主题。话题是抽象的概念,由奇异值分解得到。
$$ T=\left[\begin{array}{cccc} t_{11} & t_{12} & \cdots & t_{1 k} \\ t_{21} & t_{22} & \cdots & t_{2 k} \\ \vdots & \vdots & & \vdots \\ t_{m 1} & t_{m 2} & \cdots & t_{m k} \end{array}\right] $$考虑文本集合中的一个文本$d_j$,在单词向量空间中由一个向量$x_j$表示,将$x_j$投影到话题向量空间T中,得到在话题向量空间的一个向量$y_j$,$y_j$是一个$k$维向量,其中每一个分量是一个文本在一个话题对应的权值。
矩阵$Y$表示话题在文本中出现的情况,称为话题-文本矩阵。这样一来,在单词向量空间中的文本向量可以通过它在话题空间中的向量近似表示,即$X \approx TY$,这就是潜在语义分析。
直观上,潜在语义分析是将文本在单词向量空间的表示通过线性变换转换为在话题向量空间的表示,这个线性变换由矩阵因子分解体现。
潜在语义分析算法
潜在语义分析算法就是根据确定的话题个数$k$对单词-文本矩阵进行截断奇异值分解,将其左矩阵作为话题向量空间,将其对角矩阵与右矩阵的乘积作为文本在话题向量空间的表示的过程。算法如下:
(1) 获取单词-文本矩阵$X$;
(2) 将单词-文本矩阵进行截断奇异值分解$X=U_k \Sigma_k V_k^{\text T}$;
(3) 矩阵$U_k$的每一个列向量表示一个话题,称为话题向量;
(4) 文本的话题空间表示:矩阵$\Sigma_k V_k^\text T$的每一个列向量是一个文本在话题向量空间的表示。
潜在语义索引(latent semantic indexing, LSI) 利用SVD分解找到单词-文档矩阵的某个低秩逼近,在这个低秩逼近下能够为文档集中的每篇文档产生一个新的表示。同样,查询也可以映射到这个低秩表示空间,从而可以基于新的表示来进行查询和文档相似度的计算。
概率潜在语义分析模型
概率潜在语义分析(probabilistic latent semantic analysis, PLSA) 是一种利用概率生成模型对文本集合进行话题分析的无监督学习方法。模型最大的特点是使用隐变量表示话题。整个模型表示文本生成话题,话题生成单词,从而得到单词-文本共现数据的过程;假设每个文本由一个话题分布决定,每个话题由一个单词分布决定。PLSA有生成模型以及等价的共现模型。
基本想法
给定一个文本集合,每个文本讨论若干个话题,每个话题由若干个单词表示。对文本集合进行概率潜在语义分析,就能够发现每个文本的话题,以及每个话题的单词。话题是不能从数据中直接观察到的,是潜在的。
将文本集合转换为单词-文本矩阵,文本数据基于如下的概率模型产生(共现模型):首先有话题的概率分布,然后有话题给定条件下文本的条件概率分布,以及话题给定条件下单词的条件概率分布。概率潜在语义分析就是发现由隐变量表示的话题,即潜在语义。直观上,语义相近的单词、语义相近的文本会被聚类到相同的“软类别”中,而话题所表示的就是这样的软类别。
生成模型
假设有单词集合$W={w_1, w_2, \cdots , w_M}$,其中$M$是单词个数;文本集合$D={d_1, d_2, \cdots , d_N}$,其中$N$是文本个数;话题集合$Z={z_1, z_2, \cdots , z_K}$,其中$K$是预先设定的话题个数。随机变量$w$取值于单词集合,随机变量$d$取值于文本集合,随机变量$z$取值于话题集合。概率分布$P(d)$表示生成文本$d$的概率,$P(z|d)$表示文本$d$生成话题$z$的概率,$P(w|z)$表示话题$z$生成单词$w$的概率。每个文本都有自己的话题概率的分布$P(z|d)$,每个话题$z$拥有自己的单词概率分布$P(w|z)$;即一个文本的内容由其相关话题决定,一个话题的内容由其相关单词决定。
生成模型通过以下步骤生成文本-单词共现数据:
(1) 依据分布$P(d)$,从文本集合中随机选取一个文本,重复$N$次,共生成$N$个文本。对每个文本执行以下操作;
(2) 在文本$d$给定条件下,依据条件分布$P(z|d)$,从话题集合中随机选取一个话题$z$,共生成$L$个话题,这里$L$是文本长度;
(3) 在话题$z$给定条件下,依据条件概率分布$P(w|z)$,从单词集合随机选取一个单词。
注意,这里为叙述方便,假设文本都是等长的,现实中不需要这样的假设。
生成文本中,单词变量$w$与文本变量$d$是观测变量,话题变量$z$是隐变量。也就是说模型生成的是单词-话题-文本三元组$(w, z, d)$的集合,但观测数据是单词-文本二元组$(w, d)$集合,观测数据表示为单词-文本矩阵$T$,其行表示单词,列表示文本,值为$(w, d)$的出现次数。
$$ P(T)=\prod _{(w,d)}P(w,d)^{n(w,d)} $$$$ \begin{aligned} P(w, d)&=P(d) P(w|d) \\ &=p(d) \sum_{z} p(w, z|d) \\ &=p(d) \sum_{z} p(z|d) p(w|z) \end{aligned} $$以上便是生成模型的定义。
生成模型假设在话题$z$给定条件下,单词$w$与文本$d$条件独立,即$P(w,z|d)=P(z|d)P(w|z)$。
共现模型
$$ P(T)=\prod _{(w,d)}P(w,d)^{n(w,d)} $$$$ P(w,d)= \sum_{z \in Z} P(z)P(w|z)P(d|z) $$共现模型与生成模型在概率公式上基本一致,但是生成过程是由$z$生成$d$和$w$,因此与生成模型具有不同的性质。生成模型刻画文本-单词共现数据生成的过程,共现模型描述文本-单词共现数据拥有的模式。生成模型中单词变量$w$和文本变量$d$是非对称的,而共现模型中单词变量$w$和文本变量$d$是对称的。因此,前者也称为非对称模型,后者也称为对称模型。
潜在概率语义分析模型是含有隐变量的模型,其学习通常采用EM算法。
潜在狄利克雷分配
潜在狄利克雷分配(latent Dirichlet allocation, LDA) 作为基于贝叶斯学习的话题模型,是LSA和PLSA的扩展,于2002年由Blei等提出。LDA在文本数据挖掘、图像处理、生物信息处理等领域被广泛使用。LDA是文本集合的生成概率模型。假设每个文本由话题的一个多项分布表示,每个话题由单词的一个多项分布表示,特别假设文本的话题分布的先验分布是狄利克雷分布,话题的单词分布的先验分布也是狄利克雷分布。先验分布的导入使LDA更好地应对过拟合现象。
LDA的文本集合的生成过程如下:首先生成一个文本的话题分布,之后在该文本的每个位置,依据该文本的话题分布生成一个话题,然后在该位置依据该话题的单词分布生成一个单词,直至文本的最后一个位置。重复以上过程生成所有文本。
LDA模型是含有隐变量的概率图模型。模型中,每个话题的单词分布,每个文本的话题分布,文本每个位置的话题是隐变量;文本的每个位置的单词是观测变量。LDA模型的学习与推理无法直接求解,通常使用吉布斯抽样和变分EM算法,前者是蒙特卡罗法,后者是近似算法。
Gamma函数
$$ \Gamma(x)=\int_0^\infty t^{x-1} e^{-t} \text dt $$$$ \Gamma(x+1)=x\Gamma(x) $$$$ \Gamma(n)=(n-1)! $$其中$n$为自然数。Gamma函数有很多妙用,它不但使得非自然数的阶乘计算有意义,还能扩展很多其他的数学概念,比如导数,原来智能型以一阶、二阶等整数阶导数,而Gamma函数可以将函数的导数的定义延拓到实数集,从而可以计算1/2阶导数。同样,积分作为导数的逆运算,也有了分数阶。
多项分布
多项分布(multinomial distribution)是一种多元离散随机变量的概率分布,是二项分布的扩展。
假设重复进行$n$次独立随机试验,每次试验可能出现的结果有$k$种,第$i$种结果出现的概率为$p_i$,第$i$种结果出现的次数为$n_i$。如果用随机变量$X=(X_1,X_2,\cdots,X_k)$表示试验所有可能结果的次数,其中$X_i$表示第$i$种结果出现的次数,那么随机变量$X$服从多项分布。
$$ P(X_{1}=n_{1}, X_{2}=n_{2}, \cdots, X_{k}=n_{k})=\frac{n !}{n_{1} ! n_{2} ! \cdots n_{k} !} p_{1}^{n_{1}} p_{2}^{n_{2}} \cdots p_{k}^{n_{k}} $$则称随机变量$X$服从参数为$(n,p)$的多项分布,记作$X \sim \text{Mult}(n,p)$。
当试验的次数为1时,多项分布变为类别分布(categorical distribution)。类别分布表示试验可能出现的$k$种结果的概率。多项分布包含类别分布。
狄利克雷分布
狄利克雷分布(Dirichlet distribution) 是一种多元连续随机变量的概率分布,是Beta分布的扩展。在贝叶斯学习中,狄利克雷分布常作为多项分布的先验分布使用。
$$ p(\theta|\alpha)=\frac{\Gamma(\sum_{i=1}^{k} \alpha_i)}{\prod_{i=1}^{k}\Gamma(\alpha_i)} \prod_{i=1}^{k}\theta_{i}^{\alpha_i-1} $$其中$\sum_{i=1}^{k}\theta_i=1$,$\theta_i \geqslant 0$,$\alpha_i > 0$,则称随机变量$\theta$服从参数为$\alpha$的狄利克雷分布,记作$\theta \sim \text{Dir}(\alpha)$。
二项分布和Beta分布
二项分布是多项分布的特殊情况,Beta分布式狄利克雷分布的特殊情况。
$$ P(X=m)=\left(\begin{array}{l} n \\ m \end{array}\right) p^{m}(1-p)^{n-m} $$其中$n$和$p$为参数。
$$ p(x)=\left\{\begin{array}{ll} \frac{1}{B(s, t)} x^{s-1}(1-x)^{t-1}, & 0 \leqslant x \leqslant 1 \\ 0, & Other \end{array}\right. $$$$ B(s,t)=\int_0^1 x^{s-1}(1-x)^{t-1} \text{d}x $$$$ B(s,t)=\frac{(s-1)!(t-1)!}{(s+t-1)!} $$当$n=1$时,二项分布变为**伯努利分布(Bernoulli distribution)**或0-1分布。
共轭先验
贝叶斯学习中常使用共轭分布(conjugate distribution)。如果后验分布与先验分布属于同类,则先验分布与后验分布称为共轭分布。先验分布称为共轭先验(conjugate prior)。如果多项分布的先验分布是狄利克雷分布,则其后验分布也为狄利克雷分布,两者构成共轭分布。作为先验分布的狄利克雷分布的参数又称为超参数。使用共轭分布的好处是便于从先验分布计算后验分布。
狄利克雷分布是多项分布的共轭先验,Beta分布是二项分布的共轭先验。
潜在狄利克雷分配模型
潜在狄利克雷分配(LDA)是文本集合的生成概率模型。模型假设话题由单词的多项分布表示,文本由话题的多项分布表示,单词和话题分布的先验分布都是狄利克雷分布。
LDA模型表示文本集合的自动生成过程:首先,基于单词分布的先验分布(狄利克雷分布)生成多个单词分布,即决定多个话题内容;之后,基于话题分布的先验分布(狄利克雷分布)生成多个话题分布,即决定多个文本内容;然后,基于每一个话题分布生成话题序列,针对每一个话题,基于话题的单词分布生成单词,整体构成一个单词序列,即生成文本,重复这个过程生成所有文本。文本的单词序列是观测变量,文本的话题序列是隐变量,文本的话题分布和话题的单词分布也是隐变量。
LDA模型是概率图模型,其特点是以狄利克雷分布为多项分布的先验分布,学习就是给定文本集合,通过后验概率分布的估计,推断模型的所有参数。利用LDA进行话题分析,就是对给定文本集合,学习到每个文本的话题分布,以及每个话题的单词分布。
可以认为LDA是PLSA的扩展,相同点是二者都假设话题是单词的多项分布,文本是话题的多项分布。不同点是LDA使用狄利克雷分布作为先验分布,而PLSA不使用先验分布(或者说假设先验分布是均匀分布),两者对文本生成过程有不同假设,即LDA基于贝叶斯学习,而PLSA基于极大似然估计。LDA的优点是,使用先验概率分布,可以防止学习过程中产生过拟合。
LDA的学习(参数估计)是一个复杂的最优化问题,很难精确求解,只能近似求解。常用的近似求解方法有吉布斯抽样(Gibbs sampling)和变分推理(variational inference)。
使用gensim中的潜在狄利克雷分配对题目文本进行主题分析
import gensim
from gensim import corpora, models
import pandas as pd
df = pd.read_csv('lda_data.txt', encoding='utf-8', sep='\t', quoting=3) # 需要将数据导入当前目录
print(df.head)
df = df.dropna()
docs = df['segs'] # 选出文档部分,该部分为分词后的题干
print(docs.head)
doclist = docs.values
print(doclist[0])
print(doclist[1])
print(doclist[2])
texts = [[word for word in doc.split(' ') if len(word) > 1] for doc in doclist] # 按空格切分,得到单词列表
print(texts[0])
# 词袋模型处理
dictionary = corpora.Dictionary(texts)
corpus = [dictionary.doc2bow(text) for text in texts]
print(corpus[2])
# 开始训练LDA主题模型
lda = gensim.models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=20) # num_topics为主题数
print(lda.print_topic(1, topn=20))
print(lda.print_topics(num_topics=20, num_words=20))
# 样本文档
bow_sample = [(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 3), (6, 1), (7, 3), (8, 1), (9, 1), (10, 1), (11, 1), (12, 1), (13, 1), (14, 1), (15, 1), (16, 1), (17, 2), (18, 1), (19, 3), (20, 1), (21, 1), (22, 1), (23, 1), (24, 1), (25, 1), (26, 2), (27, 3), (28, 1), (29, 1), (30, 1), (31, 1), (32, 1), (33, 1), (34, 1), (35, 1), (36, 1), (37, 1)]
# 获取样本文档的主题
print(lda.get_document_topics(bow_sample))
参考资料
-
李航. 统计学习方法. 北京: 清华大学出版社, 2019.
-
靳志辉. LDA数学八卦(version 1.0).