Topic Model在考虑语义的情景中被广泛使用,实践证明效果也不错。本文总结了一些Topic Model实战技巧。
- 利用优质“少量”数据学习模型,缓解单机速度和内存问题,对剩余/新文档做推导(可以数据并行)。比如用微博数据训练LDA时,先把长度短的微博过滤掉(有工作得出长度为7的文本已经适合LDA进行学习的结论),剔除相似的微博(转发/分享会造成很多近乎相同的微博)。数据量大并且单机环境中可试一下GraphLab Create,还支持采样比较快的alias LDA。如果不仅是为了学习当前文档库中的主题,并且也要用于预测新数据,数据量越大越好。
- 去除一些TF/DF较低的词,这些词在拟合的过程中会被平滑掉,同样DF比较高的词没有区分力,标点,助词,语气词也可以去掉,中文常用词60万左右。中文的预处理如全角变半角,去乱码,繁转简也应考虑。实际处理数据时会发现分词后不同词个数很容易达到百万级别,这里很多词是没有意义的,数字词,长度过长的词(“北京市海淀区税务局”,会被分成一个词,然而这个词比较低频,对模型训练也没太大意义),乱码词。此外,分词过程中如果两个词在一起的频率比较高,那么分词结果会把两个词合并,那么合并与否对LDA的训练是否有影响呢?有的词应该合并,比如”北京大学“,也有的词分开会好一些,比如”阶级斗争“。
- 根据contextual合并短文本,比如合并用户所有的微博作为一个文档,合并相似的微博看成一个文档,把微博当做一个查询,利用伪反馈来补充微博内容(中文微博要比tweet表达的意思多一些,长微博不用扩展已经可以正确分类,短微博本身可能就是歧义的,扩展效果也不一定好),把微博及其评论当作一个文档。在一定程度上可缓解短文本问题。
- Topic Model的训练也是数据拟合,找出latent topic最大训练语料库的似然概率,当不同类的数据不平衡时,数量量少的主题可能会被数据量多的主题主导,导致数据量少的被忽略。LDA本来就倾向于拟合高频的topic。LDA很多奇怪的结果大多都是因为词的共现导致的,一种衡量词共现的指标是PMI。
- 迭代次数一般可设为1000 – 2000次,可根据时间,环境因素选择,会在最小值处来回跳转,LDA的运行时间和文档数,不同词个数,文档长度,topic个数有关。
- K的选择,对每个K跑一个LDA,肉眼观察每个topic的情况最靠谱。数据量大时不可行。此时可以根据不同的topic的相似度来调整K。假设不同topic之间的相似性小为佳(Perplexity, GraphLab Create直接输出这个结果)。一个经验设置是K × 词典的大小 约等于 语料库中词的总数。
- 优质的词典很重要,一方面有助于分词,也有助于明确表达主题。对于中文而言,由于需要分词的缘故,导致词典的大小很大,这是可以去除一些分错的词,数字词,人名词,长度过长的词。
- 数据量大后,LDA和PLSA的效果差不多,但是PLSA更容易并行化。LDA和PLSA的最大区别在于LDA对于Doc的Topic分布加上了一层先验,Doc-topic分布是当作模型变量,而LDA则只有一个超参数,Doc-Topic分布则是隐藏变量。在预测的时候,plsa是求一个似然概率,lda则是有两项,先验乘以似然。
- LDA在文本领域中,把word抽象成topic。类似,LDA也可以用在其它任务中,我们在信用评估中,直接把每个用户当成一个文档,文档中的词是每个关注的人,得到的topic相当于是一个用户group,相当于对用户进行聚类。还有,把微博中的@/rt的人当作word。http://www.machinedlearnings.com/2011/03/lda-on-social-graph.html
- 超参数\alpha \beta对训练的影响?\alpha越大,先验起的作用就越大,推导的topic分布就越倾向于在每个topic上的概率都差不多。
- the color of a word tend to be similar to other words in the same document.
- the color of a word tend to be similar to its major color in the whole corpus.
- 用一个大的数据集训练一个general的model,还是根据领域知识训练一个specific的model呢?觉得应该看具体情况,想得到一些小众的topic,一些大topic的子topic。
- 为什么LDA的最大似然难求?含有两个连续的隐藏变量,需要积分掉,对于一个word,需要考虑每个topic生成这个word的概率,因此也有个求和项。因为这个条件分布很难求,导致求解带隐变量优化问题的EM算法也不行,因此EM算法往往都是用一个近似分布来代替。Gibbs Sampling则是生成p(z|…)的几个样本来近似这个条件分布。说经过多次迭代(一次迭代对于一篇文章中的一个词只采样一次),一开始随机产生的 topic-word 矩阵 和 doc-topic 会处于稳定,真实的分布。对于一个Doc,根据词之间的可交换性,取不同词对应的topic的过程也是独立的。
时间: 2024-11-10 13:14:28