主题模型,说实话之前学的时候还真没见过,所以看到这一章的时候感觉很是疑惑,不知道主题模型是要干什么。看完后感觉这个主题模型应该是nlp中的一种特殊的聚类方式,可以通过对文档提取主题,然后根据不同的主题进行聚类的方式,他首先肯定不是分类问题,感觉还是可以勉强归为一种聚类吧,这一章给的一个例子感觉特别好,他是将维基百科的今年文档全部拖下来进行主题提取,所以做出这个主题还是很有意义的。

数据集

第一个例子是用的美国联合通讯社(AP)的新闻报道 数据集 ,这个数据集也是一个标准数据集,他在主题模型的一些初始工作中被使用过。另一个数据集是英文版的维基百科数据集比较大,可能需要下一段时间。我们从htto://dumps.wikimedia.org 下载整个维基百科。文中的 下载链接 当然也可以用其他年份的,文中使用扩展名为.xml.bz2的文件,直接使用gensim工具建立了索引:

注意这段代码在bash中执行,而不是python的代码。

> python -m gensim.scripts.make_wiki enwiki-latest-pages-articles.xml.bz2

> wiki_en_output

>

LDA 潜在狄利克雷分配

LDA 缩写可以表示两种机器学习的方法,一种是这里的潜在狄利克雷分配(Latent Dirichlet Allocation),另一个是线性判别式分析(Linear Discriminant Analysis),前者是一种主题模型方法,后者是一种分类方法。scikit-learn中的sklearn.lda可以实现线性判别式分析,但sklearn中并没有潜在狄利克雷分配的实现。我们使用gensim包来实现潜在狄利克雷分配。使用pip可以直接进行安装。使用AP数据,示例如下:

from gensim import corpora, models, similarities

corpus = corpora.BleiCorpus('.data/ap/ap.dat','/data/ap/vocab.txt')

model = models.ldamodel.LdaModel(corpus, num_topics = 100, id2word = corpus.id2word, alpha=1.0/len(corpus)) # 构造LDA模型函数

topics = [model[c] for c in corpus]

对于model的那个构造函数的解释:alpha是一个重要的参数,较大的alpha值会导致每个文档中包含更多的主题,alpha必须是正数,通常很小,一般小于1,默认是1.0/len(corpus)。这时topics就是目前分出来的主题,主题模型是一个稀疏的模型,即便每个文档中有很多潜在主题,也只有一小部分会被用到。

对于整个维基百科的主题建立,通过上面建立索引,我们可以继续进行下面的工作。首先是引入一些程序库,并把预处理的数据读入,然后建立lDA模型:

import logging, gensim

logging.basicConfig(

format='%(asctime)s : %(levelname)s : %(message)s',

level=logging.INFO)

idword =

gensim.corpora.Dictionary.load_from_text('wiki_en_output_wordids.txt')

mm = gensim.corpora.MmCorpus('wiki_en_output_tfidf.mm')

model = gensim.models.ldamodel.LdaModel(corpus=mm,

id2word=id2word, num_topics=100, update_every=1,

chunksize=10000, passes=1)

一旦完成,你可以把结果保存到文件里,时间比较长,但他会在控制台上看到这个过程。

model.save('wiki_ida.pkl') # 保存到文件wiki_ida.pkl中

model = gensim.models.ldamodel.LdaModel.load('wiki_ida.pkl') # 从文件wiki_ida.pkl中读出结果数据

我们可以对其中的主题进行一下分析统计

topics = []

for doc in mm:

topics.append(model[doc])

import numpy as np

lens = np.array([len(t) for t in topics])

print np.mean(lens) # 查看一下平均每个topic下有多少篇文档

print np.mean(lens <=10) # 查看一下,文档数小于10的topic所占的比例

选择主题个数

之前我们是使用的固定的主题个数(100)来进行的统计,这个数据是随意设定的,很可能跟实际并不相符。我们其实还有一些别的方法来自动的确定主题数目,有一个很流行的模型叫做层次狄利克雷过程(HDP),可以在gensim中使用。同LDA代码很相似,只需要把gensim.models.ldamodel.LdaModel的调用替换成一个对HdpModel 构造函数的调用即可,如下所示,但HDP方法计算时间要比LDA更长。

hdp = gensim.models.hdpmodel.HdpModel(mm,id2word)

lda主题模型 python_主题模型LDA相关推荐

  1. 判别式模型python_判别式模型与生成式模型

    判别式模型(Discriminative Model)是直接对条件概率p(y|x;θ)建模.常见的判别式模型有 线性回归模型.线性判别分析.支持向量机SVM.神经网络等. 生成式模型(Generati ...

  2. 判别式模型python_判别式模型与生成式模型的区别

    产生式模型(Generative Model)与判别式模型(Discrimitive Model)是分类器常遇到的概念,它们的区别在于: 对于输入x,类别标签y: 产生式模型估计它们的联合概率分布P( ...

  3. java lda主题模型_主题模型(一):LDA 基本原理

    一. 数学基础 *** 二项分布*** 二项分布为N重伯努利分布,则事件成功k次的概率可表示为: *** 多项分布 *** 多项分布是二项分布在高维度上的推广: *** Beta分布 *** 其中, ...

  4. lda主题模型python_LDA主题模型及python实现

    LDA(Latent Dirichlet Allocation)中文翻译为:潜在狄利克雷分布.LDA主题模型是一种文档生成模型,是一种非监督机器学习技术.它认为一篇文档是有多个主题的,而每个主题又对应 ...

  5. 基于LDA模型的主题分析

    先看下数据: 1.建立词典.语料库 from gensim import corpora,models #主题挖掘,提取关键信息#建立词典,去重 pos_dict=corpora.Dictionary ...

  6. NLP-词向量-发展:词袋模型【onehot、tf-idf】 -> 主题模型【LSA、LDA】 -> 词向量静态表征【Word2vec、GloVe、FastText】 -> 词向量动态表征【Bert】

    NLP-词向量-发展: 词袋模型[onehot.tf-idf] 主题模型[LSA.LDA] 基于词向量的静态表征[Word2vec.GloVe.FastText] 基于词向量的动态表征[Bert] 一 ...

  7. 潜在狄利克雷分配(LDA,Latent Dirichlet Allocation)模型(三)

    潜在狄利克雷分配(LDA,Latent Dirichlet Allocation)模型(三) 目录 潜在狄利克雷分配(LDA,Latent Dirichlet Allocation)模型(三) 主题演 ...

  8. 一文读懂如何用LSA、PSLA、LDA和lda2vec进行主题建模

    选自 Medium,作者:Joyce X,机器之心编译. 本文是一篇关于主题建模及其相关技术的综述.文中介绍了四种最流行的技术,用于探讨主题建模,它们分别是:LSA.pLSA.LDA,以及最新的.基于 ...

  9. python做什么模型_主题模型初学者指南[Python]

    引言 近年来涌现出越来越多的非结构化数据,我们很难直接利用传统的分析方法从这些数据中获得信息.但是新技术的出现使得我们可以从这些轻易地解析非结构化数据,并提取出重要信息. 主题模型是处理非结构化数据的 ...

最新文章

  1. AI赋能,让无人系统更智能
  2. aop拦截mybatis执行sql_Java进阶架构之开源框架面试题系列:Spring+SpringMVC+MyBatis
  3. SSM框架搭建(四) springmvc和mybatis的配置
  4. phpstorm xdebug配置
  5. 计算器百分号如何用代码实现_如何用 100 行 Python 代码实现新闻爬虫?这样可算成功?...
  6. 制造业一声叹息!干30年实业不如炒股?
  7. java lazy_Java AtomicLong lazySet()用法及代码示例
  8. Oozie 调用sqoop导数据出现NoClassDefFoundError问题
  9. C#方法的六种参数,值参数、引用参数、输出参数、参数数组、命名参数、可选参数...
  10. Unity中英对照汉化
  11. UI自动化测试 浅谈
  12. 阿里代码规范插件安装和使用技巧
  13. Yang不等式,Hölder不等式与闵可夫斯基(Minkowski)不等式
  14. html table相同值合并单元格,ElementUI表格列相同值自动合并单元格( 单列 )
  15. Caused by: redis.clients.jedis.exceptions.JedisConnectionException: JedisPubSub was not subscribed t
  16. bootCDN引用的bootstrap前端框架套件和示例
  17. Airbnb NYC2019分析实战
  18. Android最佳实践之性能 - 电池续航时间优化
  19. BTC-Relay与RootStock侧链技术对比
  20. 原创文章:使用Vuejs实现个人所得税功能,以及5000起点和3500起点之间的缴费变化兼容移动端

热门文章

  1. PIR独立需求计划创建修改_SAP刘梦_新浪博客
  2. 基于Range Image的自主车辆激光雷达定位(ICRA 2021)
  3. 翻译工具包:txt文件专场(一)
  4. 阿里负责人揭秘面试潜规则
  5. 复杂背景下卷积神经网络在森林火灾识别中的研究与应用-代码实现
  6. Python——数据分层抽样
  7. 如果你有一台超级计算机_你会用它来做什么?
  8. 服务器被攻击了,更换IP是否有用吗
  9. prometheus联邦集群
  10. 【vue练手01之点击选中】