NLP进阶之(八)LDA主题模型
1. 回顾主题模型
- 主题模型是一种生成模型,一篇文章中每个词都是通过“以一定概率选择某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到: p ( w o r d ∣ d o c ) = ∑ t o p i c p ( t o p i c ∣ d o c ) ∗ p ( w o r d ∣ t o p i c ) p(word|doc)=\sum_{topic}p(topic|doc)*p(word|topic) p(word∣doc)=topic∑p(topic∣doc)∗p(word∣topic)
- 主题模型客服了传统信息检索中文档相似度的计算方法,并能在海量的数据中找出文字间的语义主题。主题模型在自然语言和文本搜索上起到了重要的作用。
1.1 SVD奇异值矩阵分解
- 重点是将其转换为一个矩阵:
p ( 词 语 ∣ 文 档 ) = ∑ 主 题 p ( 词 语 ∣ 主 题 ) ∗ p ( 主 题 ∣ 文 档 ) p(词语|文档)=\sum_{主题}p(词语|主题)*p(主题|文档) p(词语∣文档)=主题∑p(词语∣主题)∗p(主题∣文档)
主题模型就是一个SVD矩阵分解,得到一个奇异值矩阵。
对于奇异值,它跟我们特征分解中的特征值类似,在奇异值矩阵中也是按照从大到小排列,而且奇异值的减少特别快,在很多情况下,前10%甚至前1%的奇异值的和就占了全部的奇异值之和的99%以上的比例。也就是说,我们也可以用最大的k个奇异值和对应左右奇异值向量来近似描述矩阵。 A m ∗ n = U m ∗ m ∑ m ∗ n V n ∗ n T ≈ U m ∗ k ∑ k ∗ k V n ∗ k T A_{m*n}=U_{m*m} \sum_{m*n}V_{n*n}^T \approx U_{m*k} \sum_{k*k}V_{n*k}^T Am∗n=Um∗mm∗n∑Vn∗nT≈Um∗kk∗k∑Vn∗kT - 由于可以使用小矩阵来近似的描述样本信息的这个重要特征,SVD可以常用于PCA降维、推荐系统以及主题模型等场景中。
1.2 LSA (Latent Semantic Analysis, LSA)
潜在语义分析(Latent Semantic Analysis, LSA)是一种常用的简单主题模型。LSA是基于奇异值分解(SVD)方法得到的一种文本主题方式。
A m ∗ n = U m ∗ m ∑ m ∗ n V n ∗ n T A_{m*n} = U_{m*m} \sum_{m*n}V_{n*n}^T Am∗n=Um∗mm∗n∑Vn∗nT
A m ∗ n ≈ U m ∗ k ∑ k ∗ k V n ∗ k T A_{m*n} \approx U_{m*k} \sum_{k*k}V_{n*k}^T Am∗n≈Um∗kk∗k∑Vn∗kT
总结:我们输入的有m个文本,每个文本有n个词。而 A i j A_{ij} Aij对应第 i i i个文本的第 j j j个词的特征值。 k k 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 \sum_{lm} ∑lm对应第 l l l个主题和第 m m m个词义的相关度。
通过SVD矩阵我们可以得到文本、词与主题、语义之间的相关性,但是这个时候计算出来的内容存在负数,我们比较难解释。最终我们可以对LSI得到文本主题矩阵使用余弦相似度计算文本的相似度计算。最终我们得到第一个和第三个文档比较相似,和第二个文档不太相似。(备注:这个时候直接在文本主题矩阵的基础上直接应用聚类算法即可)。
除非数据规模比较小,而且希望快速的粗粒度找出一些主题分布关系,否则我们一般不会是使用LSA主题模型。
优点
- 原理简单,一次SVD分解即可得到主题模型,同时可以解决词义的问题。
缺点 - SVD分解的计算非常耗时,对于高纬度矩阵做SVD分解非常困难;
- 主题模型数量的选取对于结果影响非常大,很难选择合适的k值;
- LSA模型不是概率模型,缺乏统计基础,结果难以直观的解释。
1.3 pLSA
pLSA的另一个名称是Probabilistic Latent Semantic Indexing(pLSI)
,假定在一篇文档d中,主题用c来表示,词用w来表示,则有下列公式:
p ( w , d ) = ∑ c p ( c ) p ( d ∣ c ) p ( w ∣ c ) = p ( d ) ∑ c p ( c ∣ d ) p ( w ∣ c ) p(w,d) = \sum_c p(c)p(d|c)p(w|c)=p(d)\sum_c p(c|d)p(w|c) p(w,d)=c∑p(c)p(d∣c)p(w∣c)=p(d)c∑p(c∣d)p(w∣c)
文档积决定了我的主题:
p ( w ∣ d ) = p ( w , d ) p ( d ) = ∑ c p ( c ∣ d ) p ( w ∣ c ) p(w|d) = \frac{p(w,d)}{p(d)}=\sum_c p(c|d)p(w|c) p(w∣d)=p(d)p(w,d)=c∑p(c∣d)p(w∣c)
p ( 词 语 ∣ 文 档 ) = ∑ 主 题 p ( 词 语 ∣ 主 题 ) x p ( 主 题 ∣ 文 档 ) p(词语|文档)=\sum_{主题}p(词语|主题)xp(主题|文档) p(词语∣文档)=主题∑p(词语∣主题)xp(主题∣文档)
文档决定主题,主题决定单词,这就是这样的一个结构
2. LDA以及狄拉克雷分布
2.1 概率知识回顾
2.1.1 先验概率、后验概率及似然函数
-
先验概率:在事情尚未发生之前,对事情发生的概率的估算。利用
过去历史资料
计算出来得到的先验概率叫做客观先验概率;凭主观经验
来判断而得到的先验概率叫做主观先验概率。 -
后验概率:通过调查或其他方式获取新的附加信息,利用
贝叶斯公式对先验概率进行修正后
,而得到的概率。可以说是通过一个调查问卷的形式进行。 -
似然函数:给定模型参数 θ \theta θ的条件下,样本数据服从这一概率模型的相似程度。
p ( θ i ∣ X ) = p ( X ∣ θ i ) p ( θ i ) ∑ j p ( X ∣ θ j ) p ( θ j ) p(\theta_i|X)=\frac{p(X|\theta_i)p(\theta_i)}{\sum_j p(X|\theta_j)p(\theta_j)} p(θi∣X)=∑j</