主题模型--LDA

LDA介绍

相比于 pLSA ,2003年提出的 LDA 模型显然名气更响,应用起来也丰富得多。

LDA 将模型参数视作随机变量,将多项式分布的共轭先验(也就是Dirichlet分布)作为参数的先验分布,并使用Gibbs sampling方法对主题进行采样。中文资料简直不要太多,个人认为最经典的当属《 LDA 数学八卦》,作者将 LDA 模型用物理过程详细解释,抽丝剥茧地剖析了来龙去脉,看完之后会有一种大呼过瘾的感觉。英文资料推荐 Parameter estimatiom for text analysis。

Latent Dirichlet allocation——隐含狄利克雷分布
主要应用领域:文本主题识别、文本分类以及文本相似度计算。
无监督学习,需要文档集和主题数
可以用一些词语来表示主题
LDA 的数学基础

LDA由Blei, David M.、Ng, Andrew Y.、Jordan于2003年提出,用来推测文档的主题分布。它可以将文档集中每篇文档的主题以概率分布的形式给出,从而通过分析一些文档抽取出它们的主题分布后,便可以根据主题分布进行主题聚类或文本分类。

LDA涉及到的先验知识有:二项分布、Gamma函数、Beta分布、多项分布、Dirichlet分布、马尔科夫链、MCMC、Gibs Sampling、EM算法等

LDA模型图

主题模型--LDA_第1张图片

LDA 和PLSA的区别

主题模型--LDA_第2张图片
与PLSA相比较,多了两个狄利克雷分布的先验知识。
主题模型--LDA_第3张图片

LDA 解析

在LDA中,也是采用词袋模型,
M篇文档会对应M个独立Dirichlet-Multinomial共轭结构;
K个topic会对应K个独立的Dirichlet-Multinomial共轭结构。

LDA训练

目标主题模型--LDA_第4张图片

LDA 预测主题

有了 LDA 的模型,对于新来的文档 doc, 我们只要认为 Gibbs Sampling 公式中的 参数 部分是稳定不变的,是由训练语料得到的模型提供的,所以采样过程中我们只要估计该文档的 topic 分布就好了. 具体算法如下
主题模型--LDA_第5张图片

LDA 中主题数目如何确定?
在 LDA 中,主题的数目没有一个固定的最优解。模型训练时,需要事先设置主题数,训练人员需要根据训练出来的结果,手动调参,有优化主题数目,进而优化文本分类结果。

LDA 的改进

参考:LDA的缺陷和改进

  1. 短文本与LDA

ICML论文有理论分析,文档太短确实不利于训练LDA,但平均长度是10这个数量级应该是可以的,如peacock基于query 训练模型。
有一些经验技巧加工数据,譬如把同一session 的查询拼接,同一个人的twitter 拼接等。也可以用w2v那样的小窗口训练过lda

短文本上效果不好的原因是document-level word co-occurrences 很稀疏。

解决这个问题的方式:

  1. 是如word2vec一样,利用local context-level word co-occurrences。 也就是说,把每个词当成一个文档以及把它周围出现过的词当做这个文档的内容。这样的话就不会受文档长度的限制了。
  2. 短文本语义更集中明确,LDA是适合处理的,也可以做一些文本扩展的工作,有query log的话,1. query session,2. clickstream。无query log的话,1. 短文本当做query,通过搜索引擎(或语料库)获取Top相关性网页,2. 用语料库中短文本周边词集,3. 知识库中近义词,上下位词等。
  3. KBTM
    4.BTM模型
    BTM的英文全名叫(Biterm Topic Model)。举个例子有一句话 “清风明月,草长莺飞,杨柳依依“,这里假设我们断句分词后得到三个词。[‘清风明月’,‘草长莺飞’,‘杨柳依依’]那么,这句话就包括三个biterm,分别是[‘清风明月’,‘草长莺飞’] [‘杨柳依依’,‘草长莺飞’][‘清风明月’,‘杨柳依依’]。我们知道LDA是根据单个单词去建模。而BTM的不同之处就在于,BTM是根据上面的biterm来建模的。这里再举个例子。在上面的句子中,假如是用LDA建模,那么我们在建模的时候,会假设清风明月 属于主题一,杨柳依依属于主题二,草长莺飞属于主题三这种,但是在BTM中,我们假设biterm1 属于主题1 ,biterm2属于主题2这种。

为什么BTM更适合做短文本分析?
综合上面说的,我们知道,BTM和LDA除了使用biterm建模外,其余的几乎和LDA相同,而问题就在这个Biterm上了。LDA存在的问题是当文本过短的时候,比如一个文本只有10个单词,那么模型可能会很差,但是,在BTM中,即使一个文本中只有10条单词,那么也会有45个biterm(高中的排列组合)很好的解决了LDA对短文本存在的问题。而且论文中说,显而易见,使用biterm(两个词)对文本建模要比一个词建模要能更好的显示文章的隐藏主题。

LDA的应用

推断出主题
推断每篇文章在主题上的分布

这些主题分布可以有多种用途:
聚类: 主题是聚类中心,文章和多个类簇(主题)关联。聚类对整理和总结文章集合很有帮助。参看Blei教授和Lafferty教授对于Science杂志的文章生成的总结。点击一个主题,看到该主题下一系列文章。
特征生成:LDA可以生成特征供其他机器学习算法使用。如前所述,LDA为每一篇文章推断一个主题分布;K个主题即是K个数值特征。这些特征可以被用在像逻辑回归或者决策树这样的算法中用于预测任务。
降维:每篇文章在主题上的分布提供了一个文章的简洁总结。在这个降维了的特征空间中进行文章比较,比在原始的词汇的特征空间中更有意义。

应用于推荐系统
使用LDA(Latent Dirichlet Allocation)计算物品的内容相似度
先计算出物品在话题上的分布,然后利用两个物品的话题分布计算物品的相似度。计算分布的相似度可以利用KL散度

隐语义模型LFM和LSA,LDA,Topic Model其实都属于隐含语义分析技术,是一类概念,他们在本质上是相通的,都是找出潜在的主题或分类。这些技术一开始都是在文本挖掘领域中提出来的,近些年它们也被不断应用到其他领域中,并得到了不错的应用效果。比如,在推荐系统中它能够基于用户的行为对item进行自动聚类,也就是把item划分到不同类别/主题,这些主题/类别可以理解为用户的兴趣。

R矩阵是user-item矩阵,矩阵值Rij表示的是user i 对item j的兴趣度,这正是我们要求的值。
P矩阵是user-class矩阵,矩阵值Pij表示的是user i对class j的兴趣度
Q矩阵式class-item矩阵,矩阵值Qij表示的是item j在class i中的权重
R = P * Q

我们发现使用LFM后,
我们不需要关心分类的角度,结果都是基于用户行为统计自动聚类的,全凭数据自己说了算。
不需要关心分类粒度的问题,通过设置LFM的最终分类数就可控制粒度,分类数越大,粒度约细。
对于一个item,并不是明确的划分到某一类,而是计算其属于每一类的概率,是一种标准的软分类。
对于一个user,我们可以得到他对于每一类的兴趣度,而不是只关心可见列表中的那几个类。
对于每一个class,我们可以得到类中每个item的权重,越能代表这个类的item,权重越高。
那么,接下去的问题就是如何计算矩阵P和矩阵Q中参数值。一般做法就是最优化损失函数来求参数。在定义损失函数之前,我们需要准备一下数据集并对兴趣度的取值做一说明。

参考:
https://zhuanlan.zhihu.com/p/31470216

你可能感兴趣的:(自然语言处理,概率论,机器学习,自然语言处理)