主题分析与挖掘是当前NLP处理的一个典型范式,广泛应用于文本聚类、文本表示、文本分类等场景当中。
在实践环节,强大的主题建模工具Gensim:Topicmodellingforhumans更是提供了十分方便的调用接口,根据约定好的数据格式,进行分词、cbow转换、tfidf转换,然后送入模型,可以快速训练得到适配业务的主题模型。
因此,对于我们看到的每篇文档,LDA定义了如下生成过程:
首先,对每一篇文档,从主题分布中抽取一个主题;
其次,从上述被抽到的主题所对应的单词分布中抽取一个单词;
最后,重复上述过程直至遍历文档中的每一个单词;
通过吉布斯采样和狄利克雷分布,分别估计出文档-主题概率,主题-概率后,既可以产出多种有意义的结果。
而随着具体业务的变化,LDA后续陆续出现了变体应用类型,包括适用于作者主题分析的ATM模型(Author-TopicModel)、加入时许的动态主题模型DTM(DynamicTopicModels)等。
这是一个比较有意思的话题,在舆情监控领域使用较多,本文主要介绍LDA主题模型的几个典型的变体,并对其应用场景、具体功能、代码实现以及开源工具进行论述。
LDA(LatentDirichletAllocation),通过对文本进行分词,并进行LDA训练,可以得到指定k个主题下的文档聚类结果,产生文档的主题分布、词语的主题分布等概率统计数据,基于这些数据,可以支撑多种应用。
1、应用场景
针对需要建模的文本,进行分词、cbow转换、tfidf转换,设定需要聚类的主题数目,调用gensim提供的接口,即可完成训练。
2、具体实现
2)代码实现
1)关键输入:
2)代码实现:
怎么确定LDA的topic个数?面试时,由于之前用过LDA做推荐,面试官就问怎么确定LDA的topic个数,我就实话实说是自己拍的,面试官就一个劲问“你觉得合理吗?你难道就这么草率吗?”搞得我无所适从,请问有哪些方法确定LDA的topic个数呢?
困惑度perplexity是常用的一个手段。
其中,D表示语料库中的测试集,M偏文档,Nd表示每篇文档d中的单词数,Wd表示文档d中的词,p(Wd)即文档中Wd的产生概率。
pyLDAvis在可视化呈现中以可视化的方式,逐步展示每个主题的意义、每个主题在总语料库的比重以及主题之间的关联信息。
本文主要介绍LDA主题模型的几个典型的变体,并对其应用场景、具体功能、代码实现以及开源工具进行论述。
lda最大的意义在于从统计的视角,给出了一个从文档、主题、词语之间的概率计算方法,从而为文本的表示、语义建模奠定了基础。正如文中所说的,可以支撑多种业务下的场景落地可能。
不过,主题数的确定、基于主题,再进行聚类、主题名称生成的工作依旧必不可少。
本文受到如下参考文献的启发,并做了参考,感谢前人的整理。