折磨了我一个星期, 断断续续的看, 断断续续的想。 早上上厕所的时候,终于想通了。或许是对英文理解能力差吧, 发觉其实挺简单的。
LSA对于许多搞IR和NLP的来说应该不陌生吧,LSA用SVD降维,然后来根据word distribution,来分类文档
而LSA的劣势在于,没有比较好的统计基础,这个和当前流行趋势是不相符的。
所以PLSA,用概率模型来做文档分类,或者词聚类。等
要求你有个word dictionary.假设为SETWord ={w1,w2,w3..}
事前定义好的几个分类,例如: SetTopic = {t1, t2, t3...}
最后是一个分类未知的杂合文档集, SetDoc = {d1,d2,d3...}
可以试想,一个作者在写关于某个文档时候的思路
1. 确定要写的一个topic, P(t)
2. 选择一系列的词,这些词要和当前topic t相关的,所以为P(w|t).
3. 用这些词组成一个文档, P(d|w)。
这个是顺德思路。
那么当我们已经得到一堆文档的情况下。我们要反过来想,这个就是PLSI的三步走
1. 在文档集中挑选一篇文档d的概率, P(d)
2. 这篇文档描述内容是关于topic-t的概率: P(t|d)
3. 这个topic中,包含了文档当前内容w的概率: P(w|t)
当然, 可以明显看出最后一条原本应该是:P(w|t,d),而这就是PLSI的假设:文档中字和具体某个文档无关。所以P(w|t,d)==》P(w|t)
那么由于是无监督学习分类过程
p(d,w) = p(d)p(w|d)
p(w|d) = ∑p(w|t)p(t|d) (t∈T)
合并两个方程式,得
p(d,w) = p(d)*∑p(w|t)p(t|d) = ∑p(w|t)p(t|d)p(d)
p(t|d)p(d) = p(t,d) = p(d|t)p(t)
再得p(d,w) = p(d)*∑p(w|t)p(t|d) = ∑p(w|t)p(d|t)p(t) (t∈T)
我们要去求的结果是p(w|t)和p(d|t)..
E-STEP: p(t|d,w) = p(w|t)p(d|t)p(t)/∑( p(w|t')p(d|t')p(t'))
M-STEP:
p(w|t) = ∑(n(d,w)*p(t|d,w))【 - 对于所有的d都计算】/ ∑(n(d,w)*p(t|d,w))【 - 对于所有的 变d, 定w 都计算】
同理p(d|t) = ∑(n(d,w)*p(t|d,w))【 - 对于所有的w都计算】/ ∑(n(d,w)*p(t|d,w))【 - 对于所有的 定d, 变w都计算】
p(z) = ∑(n(d,w)p(z|w,d)),所有的属于z的时候的统计/∑n(d,w)(所有文档,所有分类综合.
直观而言, PLSI输出是两个matrix 和 一个vector
matrix:
p(w|t) 定义了在topic下的一个词的分布。
p(d|t)定义了各个文档在此topic下的分布。
转自http://hi.baidu.com/codingmylife/blog/item/ad9a4cfc9685440208244d5f.html