lda主题模型 案例分析,lda主题模型基本原理
说实话,我之前没见过主题模型,所以看到这一章的时候很迷茫,不知道主题模型要做什么。看完之后,我觉得这个话题模型应该是nlp中一种特殊的聚类方法。通过从文档中提取主题,按照不同的主题进行聚类,他觉得一开始肯定不是分类问题,但还是可以勉强聚类。本章给出的一个例子看起来特别好。他把今年维基百科的所有文档都拉下来做主题提取,所以做这个主题很有意义。
数据集
第一个例子使用AP的新闻报道数据集。这个数据集也是一个标准数据集,用于主题模型的一些初始任务。另一个数据集是英文维基百科,数据集很大,可能需要以下时间。从http://dumps . wikimedia . org下载整个维基百科,当然文章中的下载链接也可以在其他年份使用。本文使用扩展名为xml.bz2的文件,直接使用gensim工具进行索引:
注意,这段代码是在bash中执行的,而不是在python中。
python-mgen sim . scripts . make _ wikien wiki-最新-页面-文章。XML.bz2
维基输出
LDA潜在swdxy分配
LDA缩写可以指两种机器学习方法,一种是本文中潜在的swdxy分配,另一种是线性判别分析scikit-learn sklearn.lda可以实现线性判别分析,但是sklearn没有潜在的swdxy分配实现。使用gensim包实现潜在的swdxy分配。Pip可以直接安装。AP数据使用的例子如下。
从gensim导入语料库、模型、相似性
corpus=corpora.blei corpus(。data/AP/AP.dat)、/data/ap/vocab.txt)).
模特=模特。LDA模型。LDA模型(语料库,num_topics=100,id2word=corpus.id2word,alpha=1.0/len)语料库
topics=[语料库中c语言的模型[c]
介绍模型的构造器。是一个重要的参数。alpha值越大,每个文档包含的主题越多。Alpha必须是正数,通常很小,通常小于1,默认值为1.0/len(语料库)。此时,主题目前是分离的主题,主题模型是松散的模型。即使每个文档中有许多潜在主题,也只使用了其中的几个。
关于整个维基百科的主题创建,我们可以通过在上面创建索引来继续下面的工作。首先,引入一些库来读取预处理后的数据,建立lDA模型。
导入日志,gensim
logging.basicConfig(
format= %(ASC time)s:%)level name)s:%)message)s ,
级别=记录。信息)
idword=
gens im . corpora . dictionary . load _ from _ text( wiki _ en _ output _ word ids . txt )
mm=gens im.corpora.mm语料库(wiki _ en _ output _ tfi df.mm))
model=gens im.models.LDA模型。LDA模型(语料库=mm,
id2word=id2word,num_topics=100,update_every=1,
chunksize=10000,遍数=1)
完成后,您可以将结果保存到文件中。虽然需要很长时间,但他会在控制台上看到这个过程。
保存到model.save(wiki_ida.pkl)文件wiki_ida.pkl。
从model=gensim . models . LDA model . LDA model . load(wiki _ IDA . pkl)# file wiki _ IDA . pkl中读取结果数据。
试着分析一下题目的统计。
主题=[]
对于以毫米为单位的文档:
Topics.append(模型[doc])。
进口编号为NP
镜头=NP。数组([len(t ) for t in topics])
Printnp.mean(lens)看看每个主题下平均有多少文档。
查看printnp.mean(lens=10)主题的文档数小于10的百分比。
选择主题数量
以前是用固定的题目数(100个)进行统计,但这个数据是随机设置的,很可能与实际情况不符。实际上,有几种方法可以自动确定主题的数量。典型的模型称为分级swdxy过程(HDP),可用于gensim。非常类似于LDA代码。如下图,只需将对gensim . models . LDA model . LDA model的调用替换为对HdpModel构造函数的调用,但HDP方法的计算时间比LDA长:
HDP=gens im.models.HDP模型。HDP模型(mm,id2word).