最近经常碰到主题模型这个概念,有主题模型的场合就有LDA的身影。那么主体模型是干什么用的,它与LDA又是什么样的一种关系?那么现在跟着菜鸟的脚步一起去认识它们。第一步我们得知道主体模型是干什么的,它存在的意义是什么,知道了它的目的之后,接下来就是怎么去利用它实现它所具有的功能。
为什么要提出主题模型呢?我们知道判断两篇文档相似性的传统做法就是通过查看两个文档共同出现的单词的多少,如TF-IDF等,这种方法没有考虑到文字背后的语义关联,可能在两个文档共同出现的单词很少甚至没有,但两个文档是相似的。举一个很流行的例子吧:假设有两个句子,我们想知道它们之间是否相关联:
第一个是:“乔布斯离我们而去了。”
第二个是:“苹果价格会不会降?”
如果由人来判断,我们一看就知道,这两个句子之间虽然没有任何公共词语,但仍然是很相关的,但是传统的VSM模型就会把他们判别为不相干,因为没有共同的词。当传统的方法出现局限性的时候,新的思想就会诞生————主体模型。主题模型是对文字隐含主题进行建模的方法。它克服了传统信息检索中文档相似度计算方法的缺点,并且能够在海量互联网数据中自动寻找出文字间的语义主题。
基于这样的一个目的诞生的主题模型,我们该怎么样去定义它,使用它?判断两篇文章的相似性其实就是判断他们表达的主题是否一致,主题可以是一个概念,这个概念是一系列相关词语的集合。那么怎么生成一个这样的主题呢,也就是说怎么样去得到一个这样的相关词语的集合?我们用P(词语|主题)来表示一个主题模型,它的意思是指给定主题的情况下,不同词语的一个分布;我们用P(主题|文档)表示给定一个文档,这个文档属于不同的主题概率分布,文档与主题的关联是通过这两个词集的相似词决定的;我们用P(词语|文档)来表示一个文档中词的分布情况。于是我们就可以得到这样的一个概率公式:
对于这个公式我们可以这样理解:一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到的。对于上面的式子我们可以用矩阵的形式的表示为:
我们知道如果给定一篇文档,等式左边的值P(词语|文档)很好确定,直接统计文档的词就可以了。但是对于右边的两个模型是未知的,那么现在的问题就是怎么根据左边的矩阵去去求解右边的矩阵即怎么得到模型P(词语|主题)和P(主题|文档)。求解主题模型的方法主要有两种:pLSA(ProbabilisticLatent Semantic Analysis)和LDA(Latent Dirichlet Allocation)。欲知后事,请看下文“主题模型(2)---LDA”。
当求得模型P(词语|主题)和P(主题|文档)后,我们可以做许多的事情:
1,可以判定两篇文档的语义相似性。如:给定两篇文档,我们可以分别得到他们的P(主题|文档)分布,通过计算KL距离可以判断两个分布的程度即两篇文档的相似程度。
2,利用P(词语|主题)分布,我们可以解决多义词的问题。回想最开始的例子,“苹果”可能是水果,也可能指苹果公司。通过我们求出来的“词语-主题”概率分布,我们就可以知道“苹果”都属于哪些主题,就可以通过主题的匹配来计算它与其他文字之间的相似度。
等等。
这种主题模型能够挖掘语义的信息,如今备受关注。