本文参考自:https://www.zhihu.com/question/32286630

   LDA中topic个数的确定是一个困难的问题。
   当各个topic之间的相似度的最小的时候,就可以算是找到了合适的topic个数。
   参考一种基于密度的自适应最优LDA模型选择方法 ,简略过程如下:
  1. 选取初始K值,得到初始模型,计算各topic之间的相似度
  2. 增加或减少K的值,重新训练得到模型,再次计算topic之间的相似度
  3. 重复第二步直到得到最优的K

  另外,Willi Richert , Luis Pedro Coelho著的《机器学习系统设计》第4章专门讨论了LDA主题模型,其中一节讲了“Choosing the number of topics”。文中提到

One of the methods for automatically determining the number of topics is called
the ** hierarchical Dirichlet process (HDP)**

  LDA中如何确定topic数量一直都没有公认的好方法,原因在于不同业务对于生成topic的要求是存在差异的。

  如果LDA的结果是用于某个目标明确的学习任务(比如分类),那么就直接采用最终任务的指标来衡量就好了,能够实现分类效果最好的topic个数就是最合适的。

  如果没有这样的任务怎么办?业界最常用的指标包括Perplexity,MPI-score等。以我的经验,通过观察Perplexity/MPI-score这些指标随topic个数的变化确实能够帮助我们选择合适的个数值,比如可以找出曲线的拐点。但是这些指标只能作为参考,而不能作为标准。

  有的业务需要topic之间相互比较独立,那么就可以选择考察topic之间的相关性作为额外的指标。而有的业务可以容忍topic之间存在overlap,但是对topic中词的聚合性要求高,这时候就需要寻找一些聚类的指标做评判标准。

  最后,肉眼看仍然是我目前发现的最简单有效的方法。  

  这个问题在《LDA漫游指南》一书中做了很好的解答,详见第4章第4.2节
topic number K:许多读者问,如何设置主题个数,其实现在没有特别好的办(HDP等较为复杂的模型可以自动确定这个参数,但是模型复杂,计算复杂),
目前只有交叉验证(cross validation),通过设置不同的K值训练后验证比较求得最佳值,我的建议是一开始不要设置太大而逐步增大实验,Blei在论文《Latent Dirichlet Allocation》提出过一个方法,采用设置不同的topic数量,画出topic_number-perplexity曲线;Thomas L. Griffiths等人在《Finding scientific topics》也提出过一个验证方法,画出topic_number-logP(w|T)曲线,然后找到曲线中的纵轴最高点便是topic数量的最佳值。有兴趣的读者可以去读读这两篇论文原文的相应部分。这个参数同时也跟文章数量有关,可以通过一个思想实验来验证:设想两个极端情况:如果仅有一篇文章做训练,则设置几百个topic不合适,如果将好几亿篇文章拿来做topic model,则仅仅设置很少topic也是不合适的。
 
 
 
 
 
 
 
 
 
 

如何确定LDA的主题个数的更多相关文章

  1. LDA概率主题模型

    目录 LDA 主题模型 几个重要分布 模型 Unigram model Mixture of unigrams model PLSA模型 LDA 怎么确定LDA的topic个数? 如何用主题模型解决推 ...

  2. 百度开源其NLP主题模型工具包,文本分类等场景可直接使用L——LDA进行主题选择本质就是降维,然后用于推荐或者分类

    2017年7月4日,百度开源了一款主题模型项目,名曰:Familia. InfoQ记者第一时间联系到百度Familia项目负责人姜迪并对他进行采访,在本文中,他将为我们解析Familia项目的技术细节 ...

  3. LDA算法 (主题模型算法) 学习笔记

    转载请注明出处: http://www.cnblogs.com/gufeiyang 随着互联网的发展,文本分析越来越受到重视.由于文本格式的复杂性,人们往往很难直接利用文本进行分析.因此一些将文本数值 ...

  4. LDA(主题模型算法)

    LDA整体流程 先定义一些字母的含义: 文档集合D,topic集合T D中每个文档d看作一个单词序列< w1,w2,...,wn >,wi表示第i个单词,设d有n个单词.(LDA里面称之为 ...

  5. [综] Latent Dirichlet Allocation(LDA)主题模型算法

    多项分布 http://szjc.math168.com/book/ebookdetail.aspx?cateid=1&&sectionid=983 二项分布和多项分布 http:// ...

  6. 文本主题模型之LDA(二) LDA求解之Gibbs采样算法

    文本主题模型之LDA(一) LDA基础 文本主题模型之LDA(二) LDA求解之Gibbs采样算法 文本主题模型之LDA(三) LDA求解之变分推断EM算法(TODO) 本文是LDA主题模型的第二篇, ...

  7. 文本主题模型之LDA(一) LDA基础

    文本主题模型之LDA(一) LDA基础 文本主题模型之LDA(二) LDA求解之Gibbs采样算法 文本主题模型之LDA(三) LDA求解之变分推断EM算法(TODO) 在前面我们讲到了基于矩阵分解的 ...

  8. LDA主题模型学习笔记5:C源代码理解

    1.说明 本文对LDA原始论文的作者所提供的C代码中LDA的主要逻辑部分做凝视,原代码可在这里下载到:https://github.com/Blei-Lab/lda-c 这份代码实现论文<Lat ...

  9. 基于gensim的LDA主题模型实现 一键式函数打包

    def genlda(textlist,n): ticks = str(time.time()).replace('.','')[-6:-1] nn=str(n) dictionary = corpo ...

随机推荐

  1. 【BZOJ】1631: [Usaco2007 Feb]Cow Party(dijkstra)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1631 看到m<=100000果断用dij(可是好像dij比spfa还慢了在这里?)//upd: ...

  2. BT下载会损害硬盘吗

    简而言之,这个问题是否存在,取决于网络带宽的发展速度与硬件性能的发展速度.如果硬件发展的速度快, 网络带宽速度发展慢,那么对大多数人而言,当前的硬件在慢速的带宽下载BT不会造成任何的硬盘损坏.     ...

  3. yii2 输出json的方法

    public function actionAjax() { if(isset(Yii::$app->request->post('test'))){ $test = "Ajax ...

  4. linux通过shell脚本修改文件内容

    sed -i 's/abc/xxx/g' file abc修改前的字符串xxx是修改后的字符串file是要被修改的文件

  5. 怎么用MathType解决Word公式排版很乱的问题

    现在办公室起草文件,期刊论文投稿.学校试着编辑都要先在Word中编辑好后再打印出来.在Word中编辑这些文本内容时,如果遇到公式就要使用专门的MathType公式编辑器.而有很多人在用MathType ...

  6. VC++ GetSafeHwnd用法

    GetSafeHwnd HWND GetSafeHwnd() const; 当我们想得到一个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全的方法是使用GetSafeHwnd()函数. ...

  7. 第四篇:new和delete的基本用法

    前言 new和delete是C++中用来动态管理内存分配的运算符,其用法较为灵活.如果你对它们的几种不同用法感到困惑,混淆,那么接着看下去吧. 功能一:动态管理单变量/对象空间 下面例子使用new为单 ...

  8. c++多线程例(互斥体,共同访问)

    <pre name="code" class="cpp">//这是2个线程模拟卖火车票的小程序 #include <windows.h> ...

  9. vue mixins的使用

    官网传送 刚开始接触vue的时候,官网关于mixins的例子看了好几遍,发现还是不会用,包括vuex也是后来慢慢理解一点的,不过和vuex比起来.mixns还是很好理解,简单很多了 就我目前理解mix ...

  10. 常用SEO优化技巧

    SEO是指搜索引擎优化 搜索引擎优化是一种利用搜索引擎的搜索规则来提高目前网站在有关搜索引擎内的自然排名的方式.SEO的目的理解是:为网站提供生态式的自我营销解决方案,让网站在行业内占据领先地位,从而 ...