• 如何确定LDA的主题个数


    本文参考自: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也是不合适的。
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    11g SPA (sql Performance Analyze) 进行升级测试
    SPA游标采集之去除重复
    C++ 实现分数的四则运算
    计算两个数的最大公约数和最小公倍数(欧几里得算法)
    计算a月的第b个星期c
    完数问题
    求整数的最大质因子
    C++ 读取文本文件内容到结构体数组中并排序
    月饼问题PAT B1020(贪心算法)
    路径打印(set以及字符串的相关操作)
  • 原文地址:https://www.cnblogs.com/hellochennan/p/6647028.html
Copyright © 2020-2023  润新知