LDA中的主题就像词主成分-样本之间的关系
优采云 发布时间: 2021-08-11 04:16
LDA中的主题就像词主成分-样本之间的关系
NLP︱LDA主题模型的应用问题
看LDA和多元统计分析的结合,LDA中的topic就像一个词主成分,明确了主成分和样本的关系。在多元聚类中,聚类分为Q型聚类、R型聚类和主成分分析。 R型聚类和主成分分析针对变量,Q型聚类针对样本。
PCA 主要关注主成分和变量之间的关系。 LDA在文本中也有同样的效果,将一堆词(变量)变成主题(主成分)。同时,通过人像的主成分,可以知道人群喜欢什么样的话题;
Q 型聚类代表样本之间的社区关系。
LDA 假设前提:主题模型中最重要的假设是词袋假设,指的是在不影响模型训练结果的情况下交换文档中词的顺序,模型的结果有与词序无关。
主题模型中最重要的参数是每个文档的主题概率分布和每个主题下术语的概率分布。
LDA 是一个三层贝叶斯模型。三层分别是:文档层、主题层和词层。
两种估计方法——VEM 和 gibbs
通常逼近这种后验分布的方法可以分为两类:
1.变分算法(variationalalgorithms),这是一种确定性的方法。变异算法假设一些参数分布,将这些理想分布与后验数据进行比较,并找到最接近的分布。因此,估计问题转化为优化问题。主要算法是变分期望最大化(VEM)。这种方法是最常用的方法。主要用于R软件的tomicmodels包中。
2. 基于采样的算法。采样算法,如吉布斯采样(gibbssampling),主要是构造一个马尔可夫链,从后验经验分布中抽取一些样本来估计后验分布。 Gibbs采样方法广泛应用于R软件的lda包中。
参考:使用R作为主题模型:选词与主题编号确定
R 包 enumeration-lda 和 topicmodel
在 R 语言中,有两个包提供 LDA 模型:lda 和 topicmodels。
lda 提供基于 Gibbs 采样的经典 LDA、MMSB(混合成员随机块模型)、RTM(关系主题模型)和 sLDA(监督 LDA)以及基于 VEM(变分期望最大化)的 RTM。
Topicmodels 基于 tm 包,提供三个模型:LDA_VEM、LDA_Gibbs 和 CTM_VEM(相关主题模型)。
此外,包 textir 还提供了其他类型的主题模型。
参考:R 的文档主题模型
但是主题模型有一个非常大的问题:模型的质量
1、模型质量差,题目无效词多,难以清理;
2、主题之间的差异不够显着,效果不佳;
3、话题中,词与词的相关性非常低。
4、无法反映现场。作者最初希望的是一个话题。有场景词+用户态度、情感、事件词,构成了一个比较完整的系统,但是比较幼稚……
5、Topic 命名是一个难点。如果基础词效果差,话题画像也难。
一、TencentPeacock 案例
来看看腾讯孔雀的应用案例:
输入一个词,会弹出两个内容:搜索词-主题列表(主题中有很多词);搜索词-文档列表。
作者猜测实现三个距离计算的过程:
首先计算搜索词向量与主题词向量的距离,并对主题进行排序;
计算搜索词与主题下每个词向量的距离,并对词进行排序;
最后计算搜索词与文档向量的距离,并对文档进行排序。
腾讯在主题系统上做了很多努力,从中可以看到几条信息:
1、 一般来说,词与词之间的相关性不是那么强;
2、 词类基本上是名词,动作和形容词很少。
系统也做了一些有趣的尝试:利用用户-QQ群矩阵,制作话题模型,对QQ群进行聚类,可以很好的了解不同用户群喜欢什么话题群,有多少那里的人。
二、主题模型的主要功能(参考博客)
有了主题模型,我们如何使用它?它的优点是什么?我总结了以下几点:
1) 可以衡量文档之间的语义相似度。对于一个文档,我们找到的主题分布可以看作是它的一个抽象表示。对于概率分布,我们可以使用一些距离公式(如KL距离)来计算两个文档的语义距离,从而得到它们之间的相似度。
2)可以解决多义词的问题。回想第一个例子,“Apple”可能是水果,也可能指苹果。通过我们得到的“word-topic”的概率分布,我们可以知道“apple”属于哪个主题,然后我们可以通过主题的匹配来计算它与其他文本的相似度。
3)可以消除文档中噪声的影响。一般来说,文档中的杂音往往在次要主题中,我们可以忽略它们,只保留文档中最重要的主题。
4) 它是无人监督且完全自动化的。我们只需要提供训练文档,它就可以自动训练各种概率,无需任何人工标注过程。
5)与语言无关。只要任何语言都可以对其进行分割,就可以训练得到它的主题分布。
综上所述,主题模型是一个强大的工具,可以挖掘语言背后的隐藏信息。近年来,各大搜索引擎公司开始重视这方面的研发。语义分析技术正逐渐渗透到搜索领域的各种产品中。在不久的将来,我们的搜索将变得更加智能,让我们拭目以待。
三、主题模型的一些扩展
可以看到模型的扩展
1、基于LDA的主题模型变形
用于情感分析:对主题情感偏差进行评分,对主题进行评分,然后根据主题-文档矩阵对每个文档的情感进行评分。
主题间的相关性:根据主题分布点积的相似度,确定相关文本,建立主题间的相关性
时间序列文本,动态主题模型。
短文本,消除歧义,建立语义相似聚类;
知识图谱的构建需要知识图谱中的一些集合和潜在变量,所以主题建模更适合作为一个大的包容集合;
稀疏的使用。在模型中,主题词矩阵会有非常低的频率数据,所以你可以将其强制为0以减少影响。
2、摘录:LDA使用经验
如果要训练一个主题模型进行预测,数据量必须足够大;理论上,词汇长度越长,表达的主题就越具体。这需要一个优秀的词库;如果想要更详细的主题划分或者突出专业主题,就需要专业词典; LDA的参数alpha对计算效率和模型结果影响很大。选择合适的 alpha 可以提高效率和模型可靠性;确定题目数量没有特别突出的方法,需要更多的经验;根据时间线检测热点话题和话题趋势,话题模型是不错的选择;上面提到的正面词汇和负面词汇如何使用,本文没有找到合适的方法;
(参考:R 的文档主题模型)
3、摘录:LDA使用经验
整个过程有很多不明白的地方,我就列举几个如下:
(1) doc 你应该如何定义,应该以人为单位训练topicmodel还是应该以每条微博为一个单元?经过比较,我发现在每条微博上训练的topicmodel中的每一个topicmodel作为一个unit 术语类别更加一致;所以我选择使用微博作为训练的doc单元,使用people作为推理的doc单元;但是我没有找到关于这个问题的更详细的参考,我看到了几个topicmodel推特和微博上的应用,以微博为处理单元。
(2)不同的估计方法有什么区别?R包提供了VEM、Gibbs、CTM等,这里不做详细比较。本文其余部分的结果都是基于Gibbs 估计结果。
(3)topicmodel适合做短文本分析?稀疏会带来什么样的问题?其实把每条微博作为一个doc单元来分析都会造成稀疏的问题,只是我没有意识到它潜在的问题所造成的.
(4)中文的文字处理感觉很急...除了分词,词性标注、句法分析、同义词等没有专门的R包,本文只做一个初步处理。
5)最终的聚类效应不仅考虑了名人的专业领域,还考虑了他们在生活中的情绪状态、爱好和兴趣。这是一个综合的结果。可以通过选择不同的主题来完成不同专业领域的选择。来自聚类分析。
参考:原文链接:微博名人那些事
扩展一:主题模型在关键词extraction中的应用
扩展2:LDA类似于文章聚类
论文:Arnab Bhadury 的“ClusteringSimilar Stories Using LDA | Flipboard Engineering”
去除一些噪声词,然后在LDA模型之后用向量表示文章,提供一种低纬度、鲁棒的词向量表达方法。
扩展3:中文标签/主题抽取/推荐
知乎的回答,总结一下:如何为中文文本做中文标签推荐?
1、根据关键词的权重,比如tfidf值,向用户推荐TopN关键词作为文本标签。
2、LDA,先计算每个中文文本的K个主题分布,取概率最高的主题,再取该主题下概率最高的TopN词作为标签推荐给用户,但K这种方法的值不容易确定,最终计算出来的效果不如第一种方法。但是,LDA 不适合解决细粒度的标注问题,例如提取实例名称。
3、Tag Distribution Model (NTDM),源自社交媒体用户标签的分析和推荐()
4、extraction关键词 另一种常用的方法是TextRank,它根据词的窗口共现或相似度构建词网络,然后根据PageRank算法计算词的权重。
扩展4:文本挖掘中主题跟踪的可视化呈现
扩展五:迭代LDA模型
LDA 本身是一个无监督的算法模型,同时由于训练集本身的噪声数据量很大,模型在效果上可能无法满足行业的需求。例如,我们经过一个LDA过程后,在我们得到的每个主题的词表(xxx.twords)中,或多或少有来自其他主题的混合词或干扰词等,导致推理的正确率不满意。
LDA过程完成,得到xxx.twords文件后,我们可以尝试根据“专家经验”手动去除每个主题中不应该属于该主题的词。经过处理,就相当于得到了一个比较理想、比较干净的“先验知识”。
获得这样的“先验知识”后,我们可以将其作为变量传递给下一个LDA过程,当模型初始化时,“先验知识”中的词会下降到对应的更大的概率主题。使用相同的训练集和相同的参数再次迭代 LDA 过程。经过两三次这样的迭代,效果应该会有所提升。
虽然可以在一定程度上提高模型的效果,但也存在一定的弊端:大大增加了人工成本,如果主题太多(上万个),很难过滤一个由一个。 “先验知识”。
改进的python代码,来源知乎玩点高级-让你开始使用Topic模型LDA(小改进+源代码附后)
扩展 6:如何建立高效的主题模型?
本节来自知乎Q&A:主题模型还有用吗?如何使用?
1、文字要长长的。如果不是很长,试着把它拼凑起来,让它更长
2、语料要好,努力干掉翔
3、规模要大。两个意思,一是文档数,二是话题数
4.在算法方面,plda+可以支持中等规模; lightlda 可以支持*敏*感*词*(这个宝贝贡献小,插个广告); warplda 应该是可以的,但是没有开源,实现应该不会很复杂。
5、 应用场景必须可靠。直观来说,分类等任务还是需要有监督的,不适合无监督的方法。与基于内容的推荐应用类似,LDA 在这种感觉上是可靠的。
6、不要使用短文本。想用也用twitter lda~~~~
主题模型最合适的变体是添加先验信息:
我相信题主用的是完全无监督的Topic Model,但是这样太行不通了~~~现实生活中浪费了这么多标注数据,监督模型一定比无监督的好~所以!你可以试试Supervised Topic Model,在现实中利用你现有的标注来提高模型的准确率~比如用知乎的标签来训练一个有监督的Topic Model~~~词聚类效果肯定会好很多。
开源监督LDA:
iir/llda.py at master · shuyo/iir · GitHub
chbrown/slda·GitHub