09 主题模型 - LDA参数学习-Gibbs采样

08 主题模型 - LDA

九、LDA参数学习-Gibbs采样

对于一个n维的概率分布π(x1,x2,...,xn),可以通过在n个坐标上轮换采样,来得到新的样本,对于轮换到任意一个坐标xi上的转移,马尔可夫链的状态转移概率为p(xi|x1,x2,...,xi-1,xi+1,...,xn),即固定n-1个坐标轴,在某一个坐标上移动。

Gibbs采样算法在高维空间采样的时候具有比较高的优势,Gibbs采样的过程比较类似这个坐标轴下降法。

  1. 输入稳定的分布π(x1,x2,...,xn)或者对应特征的条件概率分布,设定状态转移次数阈值n1,需要的样本数n2;
  2. 随机初始化状态值(x11,x21,...,xn1);
  3. 进行迭代数据采样(迭代n1+n2-1次);
从条件概率分布中采样得到对应的样本
  1. 最终得到的样本集为:

Gibbs采样

给定一个文档集合,w是可以观察到的值,α和η是根据经验给定的先验参数,其它的各个z,θ、β都是未知的隐含变量,都是需要根据观测到的数据进行学习的。

具体来讲,所有文档联合起来形成的词向量w是已知数据,但是不知道语料库的主题z的分布。假设可以先求解出w、z的联合分布p(w,z),进而就可以求出某个词wi对应主题特征zi的条件概率分布p(zi=k|w,z-i),其中z-i表示去掉下标为i后的主题分布,有了条件概率,那么就可以使用Gibbs采样,最终可以得到第i个词的主题。

如果通过采样得到所有词的主题,那么可以通过统计所有词的主题数,从而得到
各个主题的词分布。接着统计各个文档对应词的主题数,从而可以得到各个文档的
主题分布。

简化Dirichlet分布表达式:

09 主题模型 - LDA参数学习-Gibbs采样_第1张图片

计算文档的主题条件分布:

09 主题模型 - LDA参数学习-Gibbs采样_第2张图片

在第d个文档中,第k个主题的词的个数表示为:nd(k), 对应的多项分布的计数可以表示为 :

有了一个文档的主题条件分布,则可以得到所有文档的主题条件分布为:

09 主题模型 - LDA参数学习-Gibbs采样_第3张图片

使用同样的方式,可以得到第k个主题对应的词的条件分布p(w|z,η)为:

09 主题模型 - LDA参数学习-Gibbs采样_第4张图片

其中第k个主题中,第v个词的个数表示为nkv;对应的多项式分布计数表示为:

最终得到主题和词向量的联合分布为:

基于联合分布,就可以使用求解Gibbs采样所需要的条件分布p(zi=k|w,z-i);对于下标i,由于它对应的词wi是可以观察到的,因此有公式如下:

对于zi=k,wi=t,只涉及到第d篇文档和第k个主题两个Dirichlet共轭,即:

09 主题模型 - LDA参数学习-Gibbs采样_第5张图片

至于其他的Dirichlet共轭和这两个是互相独立的,也就是说从语料库中去掉zi和wi后,并不会改变共轭结构。所以对应的后验分布为:

开始计算Gibbs采样的条件概率:

09 主题模型 - LDA参数学习-Gibbs采样_第6张图片

Dirichlet分布的期望公式如下,带入条件概率中,可以得到最终的条件概率公式:

09 主题模型 - LDA参数学习-Gibbs采样_第7张图片

LDA参数学习-Gibbs采样训练流程

  1. 选择合适的主题数K,选择合适的超参数α、η;
  2. 对于语料库中每一篇文档的每一个词,随机的赋予一个主题编号z;
  3. 重新扫描语料库,对于每一个词,利用Gibbs采样公式更新它的topic的编号,并更新语料库中该词的编号。
  4. 重复第三步中基于坐标轴轮询的Gibbs采样,直到Gibbs采样收敛。
  5. 统计语料库中各个文档各个词的主题,得到文档主题分布。

LDA参数学习-Gibbs采样预测流程

  1. 对应当前文档的每一个词,随机的赋予一个主题编号z;
  2. 重新扫描当前文档,对于每一个词,利用Gibbs采样算法更新它的topic编号。
  3. 重复第二步的基于坐标轴轮换的Gibbs采样,直到Gibbs采样收敛。
  4. 统计文档中各个词的主题,得到该文档主题分布。

10 主题模型 - 代码案例一 - LDA主题模型初识
11 主题模型 - 代码案例二 - scikit-learn中的LDA模型
12 主题模型 - 代码案例三 - scikit-learn中的LSA模型
13 主题模型 - 代码案例四 - scikit-learn中的NMF模型

你可能感兴趣的:(09 主题模型 - LDA参数学习-Gibbs采样)