上面的产生过程简单描述为:
下面参考:http://www.flickering.cn/nlp/2015/03/peacock%EF%BC%9A%E5%A4%A7%E8%A7%84%E6%A8%A1%E4%B8%BB%E9%A2%98%E6%A8%A1%E5%9E%8B%E5%8F%8A%E5%85%B6%E5%9C%A8%E8%85%BE%E8%AE%AF%E4%B8%9A%E5%8A%A1%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8/
二、什么是主题模型?
下面以文档建模为例,简单介绍一下主题模型。
2.1 主题模型的“三个过程”
主题模型一般包含了三个重要的过程:生成过程、训练过程以及在线推断。生成过程定义了模型的假设以及具体的物理含义,训练过程定义了怎样由训练数据学习得出模型,在线推断定义了怎样应用模型。下面分别进行简要介绍。
一般来说,主题模型是一种生成模型(生成模型可以直观的理解为给定模型,可以生成训练样本)。给定模型,其生成过程如图11:
- 模型有2个主题,主题1关于银行(主要的词为loan、bank、money等),主题2关于河流(主要的词为river、stream、bank等)。
- 文档1内容100%关于主题1,主题向量为<1.0, 0.0>,文档中每一个词的生成过程如下:以100%的概率选择主题1,再从主题1中以一定的概率挑选词。
- 文档2内容50%关于主题1,50%关于主题2,主题向量为<0.5, 0.5>,文档中每一个词的生成过程如下:以均等的概率选择主题1和2,再从选中的主题中以一定的概率挑选词。
- 文档3内容100%关于主题2,主题向量为<0.0, 1.0>,文档中每一个词的生成过程如下:以100%的概率选择主题2,再从主题2中以一定的概率挑选词。
图11 主题模型的生成过程[9]
现实的情况是我们没有模型,只有海量的互联网文档数据,此时我们希望有机器学习算法可以自动的从训练文档数据中归纳出主题模型(如图12),即得到每个主题在词表上的具体分布。通常来说,训练过程还会得到一个副产品——每篇训练文档的主题向量。
图12 主题模型的训练过程[9]
有了主题模型,给定新的文档,通过在线推断,我们就可以得到文档的主题向量(如图13)。图5、6、7给出了一些具体的例子。
图13 主题模型的在线推断
三个过程中,训练过程是难点,后文将进行重点介绍。
2.2 LDA模型及其训练算法
LDA(Latent Dirichlet Allocation)[10]作为一种重要的主题模型,自发表以来就引起了学术界和产业界的极大关注,相关论文层出不穷。LDA的训练算法也多种多样,下面以吉布斯采样[11,12]为例,进行简要介绍。
图14 LDA训练过程
跳过复杂的数学推导,基于吉布斯采样的LDA训练过程如图14所示(每个词用w表示,每个词对应的主题用z表示,图中节点z的不同颜色表示不同的主题):
- Step1: 初始时,随机的给训练语料中的每一个词w赋值一个主题z,并统计两个频率计数矩阵:Doc-Topic计数矩阵 Ntd ,描述每个文档中的主题频率分布;Word-Topic计数矩阵 Nwt ,表示每个主题下词的频率分布。如图15所示,两个矩阵分别对应于图中的边上的频率计数。
- Step2: 遍历训练语料,按照概率重新采样其中每一个词w对应的主题z,同步更新