LDA 实战技巧

1. 如果缓解单机速度和内存问题,利用优质“少量”数据学习模型。减少corpus数量,减少词数量。预处理主要包括:1)过滤长度太短的doc ; 2)剔除相似的doc;3)去除一些TF/DF较低 的词;4)按照词性等去停用词,去除标点、数字、过长的词 等;5)合并doc,缓解短文本问题。(非本项目)。

对于数据中特殊停用词的处理方法,通常的做法是运行一遍LDA,观察各个话题,挑出各个话题中的停用词,把他们滤除,再运行一遍LDA。

2. 以Perplexity为观察标准,topic个数K,由小变大,观察大概多少合适。一个经验设置是K × 词典的大小 约等于 语料库中词的总数(没尝试)。

3. 以Perplexity为观察标准,观察每迭代N次后,指标的变化。   确保迭代次数足够多。前期的迭代返回一些无用的(极其相似的)话题,但是继续迭代多次后结果明显改善。我们注意到这对EM算法尤其有效。

4. alpha是一个对称的Dirichlet分布的参数,值越大意味着越平滑(更正规化)。alpha越大,先验起的作用就越大,推导的topic分布就越倾向于在每个topic上的概率都差不多。

5. SparkLda : To get a DistributedLDAModel instead of a LocalLDAModel, you need to use the Expectation-Maximization (EM) optimizer instead of the default Online Variational Bayes (online) one.

6. SparkLda : 特征变换类的Pipeline API 对于LDA的文字预处理工作极其有用;重点查看Tokenizer,StopwordsRemover和CountVectorizer接口。

7. Topic Model的训练也是数据拟合,找出latent topic最大训练语料库的似然概率,当不同类的数据不平衡时,数量量少的主题可能会被数据量多的主题主导,导致数据量少的被忽略。LDA本来就倾向于拟合高频的topic。LDA很多奇怪的结果大多都是因为词的共现导致的,一种衡量词共现的指标是PMI。

8. 数据量大后,LDA和PLSA的效果差不多,但是PLSA更容易并行化。LDA和PLSA的最大区别在于LDA对于Doc的Topic分布加上了一层先验,Doc-topic分布是当作模型变量,而LDA则只有一个超参数,Doc-Topic分布则是隐藏变量。在预测的时候,plsa是求一个似然概率,lda则是有两项,先验乘以似然。

9. LDA在文本领域中,把word抽象成topic。类似,LDA也可以用在其它任务中,我们在信用评估中,直接把每个用户当成一个文档,文档中的词是每个关注的人,得到的topic相当于是一个用户group,相当于对用户进行聚类。还有,把微博中的@/rt的人当作word。http://www.machinedlearnings.com/2011/03/lda-on-social-graph.html

你可能感兴趣的:(LDA 实战技巧)