LDA主题词模型

来源:互联网 发布:乐知少儿英语网 编辑:程序博客网 时间:2024/06/16 02:42

最终确定去360做安全网关部分的自然语言处理环节,在此感谢360和马主管的赏识!未来2个月的学习内容应该跟NLP和C++密切相关。


LDA主题词模型探析

参考博主:http://www.tuicool.com/articles/E7RVFzU  内容再自行整理得来,侵权删。


LDA是什么?

    LDA(Latent Dirichlet Allocation 文档主体生模型)是一种文档主体生成模型,也成为一个三层贝叶斯概率模型,包含词、主体、文档这三层结构。所谓生成模型,就是说,一篇文章的每个词都是通过以一定的概率选择了一个主题,并从这个主题中以一定的概率选择这个词语这个一个过程得到的。

    LDA是一种非监督学习技术,可用来识别海量文档中潜藏的主题信息。它采用了词袋(bag of words)的方法,这个方法将一个文档识别成一个词频向量,将文字信息转化成数学信息。


LDA作用

    传统判断两个文档相似性的办法是查看两个文档共同出现的单词的多少,如TF-IDF等,但这种办法没有考虑到文字背后的语义关联,有可能两个文档说的是相似的内容但并没有词语上的交集,举个例子:

    “今天大盘挺不错啊”

    “我买进了一万股”

    可以看到上面的两个文本并没有任何词语交集,但是他们却说的都是“股票”这个话题,如果按照传统的方法看着两个文档,肯定是毫无关联的,所以在判断文档相关性的时候需要考虑一下文档的语义,主题模型是语义挖掘中比较好的手段,而LDA又是其中比较有效的模型。

    “主题”又是什么的,形象来说,主题像是一个桶,里面装了出现概率较高的单词,这些单词与这个主题有很强的相关性。这些单词是依据条件概率放进这个桶中的。

    怎样才能生成主题,对文章的主题应该如何分析,这是主题模型应该探讨的问题。

    生成模型是说,我们认为一篇文档的每个词都是通过一定概率选择了一个主题,并从这个主题中以一定概率选择某个词语,那么在某个文档中出现该词语的概率为:

 

    这个概率公式可以用矩阵来表示:

    文档-词语矩阵表示某个词语出现在某个文档中的概率;主题-词语矩阵表示某个词语在某个主题中出现的概率;文档-主题矩阵表示某个主题中出现某个文档的概率。

    给定一个文档,通过对文档进行分词,计算各个文档中每个词的词频,就可以得到左边的文档-词语矩阵。主题模型就是通过左边这个矩阵进行训练,学习出右边两个矩阵的。

    主题模型有两种,pLSA(Probabilistic Latent Semantic Analysis)和LDA,我这次主要讲LDA。


LDA算法

目标:生成M份包含N个单词的文档,Latent Dirichlet Allocation这篇文献中主要介绍了三种方法:


方法一:unigram model

    该模型使用下面这种方法生成一个文档:for each of the N words w_n: choose a word w_n~p(w)

    其中N表示要生成文档中的单词个数,w_n表示生成的第n个单词w,p(w)表示单词w的分布,可以通过预料进行统计学习得到,比如给一本书,统计各个单词在书中出现的概率。

    这种方法通过训练语料获得一个单词的概率分布函数,然后根据这个概率分布函数每次生成一个单词,使用这种方法M次生成M个文档,图模型如下所示:


方法二:Mixture of unigram

    unigram模型方法缺点是生成的文本没有文本主题,过于简单,mixture of unigram对其进行了改进,该模型使用下面方法生成一个文档:

choose a topic z ~ p(z);

for each of the N words w_n;

choose a word w_n ~ p(w|z)

    其中z表示一个主题,p(z)表示主题的概率分布,z通过p(z)按概率产生;N和w_n同方法一;p(w|z)表示给定z时w的分布,可以看成是一个k×V的矩阵,k为主题个数,V为单词个数,每行表示这个主题对应的单词的概率分布,即主题z所包含的各个单词的词频,通过这个概率分布按一定概率生成每个单词。

    这个方法先选择一个主题z,主题z对应一个单词的条件概率分布p(w|z),每次按这个分布生成一个单词,使用M次生成M个文档,图模型如下:

    从图中可以看到,一个文档只允许一个主题,这显然不符合常规,因为一个文档很可能有多个主题。


方法三:LDA(Latent Dirichlet Allocation)

    LDA方法生成的文档可以包含多个主题,该模型使用下面的方法生成一个文档:

Chooseparameter θ ~ p(θ);

For each ofthe N words w_n:

Choose a topic z_n ~ p(z|θ);

Choose a word w_n ~ p(w|z);

    其中θ是主题向量,向量的每一列表示每个主题在文档中出现的概率,该向量为非负的归一化向量;p(θ)是θ的分布,具体为Dirichiket分布,即分布的分布(这个没懂是啥意思啊,有空借本书看看,留个坑);N和w_n同上;z_n表示选择的主题,p(z|θ)表示给定θ是主题z的概率分布,具体为θ的值,即p(z=i|θ)=θ_i;p(w|z)同上。

    先选定一个主题向量θ,确定每个主题被选择的概率。然后生成每个单词的时候,从主体分布向量θ中选择一个主题z,按主题z的单词概率分布生成一个单词。图模型如下:

LDA的联合概率为:

拆解一下:

LDA的三层被三种颜色表示了出来:

1. corpus-level(红色):α和β表示语料级别的参数,也就是每个文档都一样,因此生成过程只采样一次。

2.document-level(橙色):θ是文档级别的变量,每个文档对应一个θ,也就是每个文档产生各个主题z的概率是不同的,所有生成每个文档采样一次θ。

3. word-level(绿色):z和w都是单词级别变量,z由θ生成,w由z和β共同生成,一个 单词w对应一个主题z。

通过上面对LDA生成模型的讨论,可以知道LDA模型主要是从给定的输入语料中学习训练两个控制参数α和β,学习出了这两个控制参数就确定了模型,便可以用来生成文档。其中α和β分别对应以下各个信息:

α:分布p(θ)需要一个向量参数,即Dirichlet分布的参数,用于生成一个主题θ向量;

β:各个主题对应的单词概率分布矩阵p(w|z)。

把 w当做观察变量,θ和z当做隐藏变量,就可以通过EM算法学习出α和β,求解过程中遇到后验概率p(θ,z|w)无法直接求解,需要找一个似然函数下界来 近似求解,原文使用基于分解(factorization)假设的变分法(varialtional inference)进行计算,用到了EM算法。每次E-step输入α和β,计算似然函数,M-step最大化这个似然函数,算出α和β,不断迭代直到 收敛。  (EM算法目前还没有学习,留坑,后续补上









0 0
原创粉丝点击