办公用纸网站建设/武汉百度百科
1.前言
上一篇博文 LDA轻松理解1 让大家对LDA概念有了基本认识,也知道了如何用sklearn去实现它。这篇主要讲解LDA的文章的生成
2. 通俗理解文章生成过程
想想我们写文章之前,都是要先确定一个主题的,所以
step1:选择主题,有两种情况:
- 一个文章只有一个主题
- 一个文章有多个主题,LDA就是基于多主题的假设
- 对于多主题如生活、服装、科技和体育,那我们在写文章时,就要考虑给各个主题分配多少字数和内容,也就是确定各个主题的分布如图
step2:生成文章 =>等价于 生成 list of 单词
一个一个单词的生成,所以必须有循环,假设一篇文章只有100个单词,我们需要一个一个单词的去遍历,那么如何生成一个单词呢?这个需要借助在 LDA轻松理解1 中定义的 每个主题下单词出现的概率矩阵Φ
所以对于每一个单词:我们要选择一个主题,然后在该主题下生成单词,即:
for j = 1, 2,3…100- (i) 选择一个主题,如科技
- (ii) 在科技主题下选择合适的单词
现在我们是有了文章,然后去反推文档的主题分布和单词与主题的分布,也就是 LDA轻松理解1 所实现的内容。
3.从官方角度看文章生成过程
先来看最经典的框框图如下:
- 外层框框代表文档doc,N表示叠加了N个文档
- 内层框框中Mi代表第i个文档单词总个数
- θi :第 i 个文档的主题分布
- K : 主题的个数
- α,β是超参数。α,β在大框框的外面,表示生成的所有文档都是来自于同一个α,β
- Tij :第i个文档中第j个单词的主题
- Wij:第i个文档中的第j个单词
文章的生成过程如下
我们再来看正式流程①②③④步
①:α --> θi
θi 是从 α分布采样来的,那 α 是什么分布呢?高斯分布行吗?不行的,因为 ∑θi ≠ 1。而 θi 是主题分布,既然是分布,那么一定满足 ∑θi = 1 (θi ≥ 0),Direchlet 分布恰好满足这一条件。
Direchlet 分布有一个参数 α,
所以:θi ~ Dir(α)
③ β --> Φ= {Φ1, Φ2,…,Φk} # k:主题个数
由于 Φi 这一列也是概率,且要满足概率和为 1,所以 Φi ~ Dir(β)
② θi --> Tij
由于在①我们已经采样到了主题分布了,所以只需要随机地在主题分布中选取某个主题就行。很明显Tij是离散型的随机变量,如 1, 2, 3代表选择的主题1,主题2,和主题3。
这个采样过程是在多项式分布即Multinormial分布中采样的。
所以Tij ~ Multinormial (θi)
④ Tij, Φ – > Wij
也就是给定了 Φ 矩阵和某个主题 Tij,相当于我们要在 Φ_Tij 那一列中去选择某个单词,这也是离散型随机变量。所以Wij ~ Multinormial (Φ_Tij)
完整版本的文章生成过程:
Φk ~ Dir (β), k= 1,2,3,..K # K为主题个数for i = 1,2,....,N # 总共有 N 个文档θi ~ Dir (α) #确定每个文档的主题分布for j = 1,2,...Mi # 第 i 个文档总共有 M 个单词Tij ~ Multimormail (θi) # 确定每个单词j的主题Wij ~ Multinormail ( Φ_Tij) # 生成最后每个单词
- numpy中有 np.random.direchlet (α), np.Multinormial () …
4. Collapsed Gibbs sample
① 狄利克雷分布
② 多项式分布
③ 狄利克雷分布
④ 多项式分布
吉布斯采样可以用于任意的贝叶斯模型,而collapsed采样方法比 gibbs 采样方法简单些
在这个图中,我们要估计的参数有 θ,Φ, T。对于LDA这个模型,collapsed 采用方法可以通过只采样 T 就可以估算出 θ 和 Φ,而不需要对这三个参数都进行采样,从而可以减少变量的个数。
举个例子:比如某个文档i 的单词个数是6个(w1,w2w3,w4,w5,w6), 而且我们知道每个单词的主题是什么,比如 {w1: 1, w2:1, w3:1, w4:2, w5:2, w6:3}, 其实这相当于是已知了 Tij 的值,我们依靠这个值去计算 θ, 这里根据 w1,w2,w3,w4,w5,w6的主题,可以知道总共只有3种主题,共有6个单词,那么可以得到主题分布θ = (3/6, 2/6, 1/6), 也可以根据Tij去计算Φ