4 F8 {8 ]3 u, _, B3 Q& o9 B7 x/ p# J- a, B0 P/ P% _9 I7 ^
训练过程(吉布斯采样) 7 g) D% \8 `! z6 W& F6 H J# O吉布斯采样 (Gibbs Sampling) 首先选取概率向量的一个维度,给定其他维度的变量值当前维度的值,不断收敛来输出待估计的参数。具体地! @6 d, m$ I) z$ i* s7 H
3 r& R9 _! R# T! Q- @/ S
随机给每一篇文档的每一个词 ww,随机分配主题编号 zz: j; n( ]0 \6 F6 u$ U8 h7 R: y5 b
统计每个主题 zizi 下出现字 ww 的数量,以及每个文档 nn 中出现主题 zizi 中的词 ww的数量6 |3 L" @( n& T4 ^2 Z8 H" C# x
每次排除当前词 ww 的主题分布 zizi,根据其他所有词的主题分类,来估计当前词 ww 分配到各个主题 z1,z2,…,zkz1,z2,…,zk 的概率,即计算 p(zi|z−i,d,w)p(zi|z−i,d,w) (Gibbs updating rule))。得到当前词属于所有主题z1,z2,…,zkz1,z2,…,zk 的概率分布后,重新为词采样一个新的主题 z1z1。用同样的方法不断更新的下一个词的主题,直到每个文档下的主题分布θnθn 和每个主题下的词分布 ϕkϕk 收敛。$ a/ U7 d/ W. S' L6 b
最后输出待估计参数,θnθn 和 ϕkϕk ,每个单词的主题 zn,kzn,k 也可以得到。 , `5 g, ]$ }' u9 S 8 F4 D$ l5 ?' r7 T: t- p9 z7 Y k5 U5 P! P6 o( \# K% ]( }3 [8 d- `
LDA 对于每个文档的每一个字都有一个主题下标。但从文档聚类的角度来说,LDA 没有一个文档统一的聚类标签,而是每个字都有一个聚类标签,这个就是主题。LDA 每个字都有可能属于不同的类别,每个文档都有可能属于不同的类别。在大量的迭代后,主题分布和字分布都比较稳定也比较好了,LDA 模型收敛。& z) o$ N4 M% H* C
& {% g* ]3 I1 `7 h- ?5 v% g# u% i4 G) I
2 m6 `3 A( C3 A) K- i
8 m, \; V/ x9 ^! d! C% Z! I7 G9 W
三、LDA 的参数) n: V; \ k/ |! J( ^
αα :表示 document-topic 密度, αα 越高,文档包含的主题更多,反之包含的主题更少 $ N9 I3 T9 t- [' E d) W+ R% n! c' e0 R& o; j' Z, v
ββ :表示 topic-word 密度, ββ 越高,主题包含的单词更多,反之包含的单词更少' V0 Y E, C. f+ @& R
& p4 T L& k7 N$ P3 \0 Q: R7 }
主题数量:主题数量从语料中抽取得到,使用 Kullback Leibler Divergence Score 可以获取最好的主题数量。1 |) }8 C6 D( W& K% G7 i; |3 {3 v
1 s" N' b- V3 I! N; @: }% G
主题词数:组成一个主题所需要的词的数量。这些词的数量通常根据需求得到,如果说需求是抽取特征或者关键词,那么主题词数比较少,如果是抽取概念或者论点,那么主题词数比较多。0 G- L% c, Y+ L
$ u2 z7 A) b/ ~+ f6 w# @& M
迭代次数:使得 LDA 算法收敛的最大迭代次数' j2 T }" Q2 t
a w0 [ Z U5 N8 |7 s - o: d! @5 K5 Z8 i ) z0 V: X/ g+ a- h8 j e四、Running in Python' u2 P. V9 i4 g3 s2 t9 h' h M% ~$ n# S
准备文档集合 & c# w: d# }+ H& X+ E! ddoc1 = "Sugar is bad to consume. My sister likes to have sugar, but not my father."5 N Y0 y& H8 f% G4 v6 \
doc2 = "My father spends a lot of time driving my sister around to dance practice." ! I. p- e, E0 `0 _5 ~7 [1 Tdoc3 = "Doctors suggest that driving may cause increased stress and blood pressure." 2 g+ [5 [4 O9 jdoc4 = "Sometimes I feel pressure to perform well at school, but my father never seems to drive my sister to do better."( u% O7 J6 W5 k) z: A$ Y
doc5 = "Health experts say that Sugar is not good for your lifestyle."0 ]( W0 g$ Z% s5 l! u. y* @
+ k/ f: T& i' L0 `; e, a/ q+ V
# 整合文档数据3 z; k; O8 c0 d
doc_complete = [doc1, doc2, doc3, doc4, doc5]$ o6 s/ B. [& l! q. |, v
1 W( q- ?8 p9 }2 U& X- M
数据清洗和预处理2 U4 a) f4 ^; d
数据清洗对于任何文本挖掘任务来说都非常重要,在这个任务中,移除标点符号,停用词和标准化语料库(Lemmatizer,对于英文,将词归元)。 , {/ \0 m5 T+ w- d $ I4 {8 W" c4 {" a0 W7 m! [# ofrom nltk import stopwords 0 m( h# [/ y( j- p; c& cfrom nltk.stem.wordnet import WordNetLemmatizer% h; a2 _4 }" w# W: n B0 @; f
import string9 ~" Z6 {( a- K8 W# W8 N