Latent Direchlet Allocation(LDA)介绍

本文为《Introduction to Latent Dirichlet Allocation》的中文翻译学习。原文请参见http://blog.echen.me/2011/08/22/introduction-to-latent-dirichlet-allocation/

介绍

假设你有以下句子:

  • I like to eat broccoli and bananas.
  • I ate a banana and spinach smoothie for breakfast.
  • Chinchillas and kittens are cute.
  • My sister adopted a kitten yesterday.
  • Look at this cute hamster munching on a piece of broccoli.

什么是latent Dirichlet allocation(LDA)?它是自动地发现这些句子中包含的主题的一种方式。例如,若要在这些句子中发现2个主题(A和B),LDA可能会产生下面的东西:

  • 句子1和句子2:100%主题A
  • 句子3和句子4:100%主题B
  • 句子5:60%主题A,40%主题B
  • 主题A:30% broccoli,15% bananas,10% breakfast,10% munching,……(在这一点上,你可以解释主题A是关于食物的)
  • 主题B:20% chinchillas,20% kittens,20% cute,15% hamster,……(在这一点上,你可以解释主题B是关于可爱动物的)

当然,目前的问题是,LDA是如何发现这些主题的?

LDA Model

详细地说,LDA把文档表示为具有特定概率的单词的主题混合。它假设文档按照以下的方式产生:当你在撰写每个文档时,你

  • 决定文档字数N(比如,根据泊松分布)。
  • 为文档选择一个主题混合(根据一组固定K个主题上的Dirichlet分布)。例如,假设我们以上两个关于食物和可爱动物的主题,你可以选择文档使其包括1/3的食物和2/3可爱的动物。
  • 通过以下方式生成每个单词w_i
    • 首先选择一个主题(根据上面采样的多维分布。例如,您可能会有1/3的概率选择食物主题,可能会有2/3概率的选择可爱动物主题)。
    • 使用主题生成单词本身(根据主的多维分布)。例如,如果我们选择食物主题,则我们可能会以30%的概率生成单词“broccoli”,以15%的概率生成“bananas”,等等。

假设有这种生成文档集合的模型,LDA随后尝试从文档中回溯,以查找可能生成集合的一组主题。

Example

让我们举个例子。根据上述过程,档生成某个特定文档D时,你可能

  • 选择5作为D的字数。
  • 决定D有1/2的概率是关于食物主题的,有1/2的概率是关于可爱动物主题的。
  • 从食物主题中挑选第一个单词,然后你拿到“broccoli”一词。
  • 从可爱动物主题中挑选第二个单词,然后你拿到“panda”一词。
  • 从可爱动物主题中挑选第三个单词,然后你拿到“adorable”一词。
  • 从食物主题中挑选第四个单词,然后你拿到“cherries”一词。
  • 从食物主题中挑选第五个单词,然后你拿到“eating”一词。

因此,在LDA模型下生成的句子将会是“broccoli panda adorable cherries eating”(值得注意的是,LDA是一个词袋模型)。

Learning

现在,假设你有一个文档集。您选择了固定的一些K个主题用于发现,并希望使用LDA来学习每个文档的主题表示以及与每个主题光临的单词。你该如何做?下面是一种做法(被称为collapsed Gibbs sampling):

  • 浏览每个文档,且随机地从K个主题中给文档的每个单词分布一个主题。
  • 值得注意的是,随机分配已经给出了所有文档的主题表示以及所有主题的单词分布(虽然不是很好)。
  • 因此,为了改进它们,对每个文档d……
    • 浏览d中的每个单词w……
      • 对每个主题t
        1. p(t|d)为文档d中被分配给主题t的单词的比例
        2. p(w|t)为被分配给主题t且包含单词w的文档比例
        3. 重新分配主题t给单词w的概率为p(t|d)*p(w|t)(根据我们的生成模型,这本质上是主题t生成单词w的概率,因此我们用此概率来重采样当前单词的主题是有意义的)。(此外,这里掩盖了几件事,特别是在这些概率中使用先验概率。)
      • 换句话说,在这步中,我们假设除当前单词以外的所有主题分配都是正确的,随后使用我们生成文档的模型更新当前单词的分配。
    • 重复前一步多次后,你最终会达到一个大致稳定的状态, 其中你的分配是相当不错的。因此,使用这些分配来估计每个文档的主题混合(通过计算该文档中分配给每个主题的单词的比例)以及与每个主题相关的单词(通过计算分配给每个主题的单词的总体比例)。

Layman’s Explanation

如果上面的讨论有点眼花缭乱,下面是另一种在不同领域解释LDA的方式。

假设你刚刚搬到了一个新城市。你是一个嬉皮士和动漫迷, 所以你想知道其他嬉皮士和动漫迷倾向于在哪里闲逛。当然,作为一个嬉皮士,你知道你不能只问,那你该怎么办?

场景如下:您在全城范围内划分了一堆不同的区域(文档),并记录下人们(单词)在每个区域闲逛的信息(如,“Alice hangs out at the mall and at the park”,“Bob hangs out at the movie theater and the park”,等等)。关键是,您不知道每个区域典型的兴趣群(主题),也不知道每个人的不同兴趣。

因此,您选择要学习的K个类别(即,你希望学习人们属于K个最重要的类别),然后首先猜测你为什么在那里看到人。例如,你最初猜测Alice在商场,因为对X感兴趣的人喜欢在那里闲逛;当你在公园里看到她时,你猜那是因为她对Y感兴趣的朋友喜欢在那里闲逛;当你在电影院看到Bob时,你随机猜想这是因为这个城市的Z人真的很喜欢看电影;等等。

当然,你的随机猜测很可能是不正确的(毕竟是随机猜测!),因此你想要提高它们。一种方法是:

  • 选择一个地方和一个人(如,Alice在商场)。
  • 为什么Alice可能在商场?可能是因为商场里其他有同样兴趣的人给她发了一条信息叫她来。
  • 换句话说,在商场里越多的人对X感兴趣,Alice与兴趣X的关联就越大(在她去的所有其他地方,那么Alice因为兴趣X来商场的可能性就越大。

一遍又一遍地浏览每个地方和人。你的猜测越来越好(毕竟,如果你注意到很多极客在书店里闲逛,而你怀疑Alice她自己也很古怪,那么Alice在书店里是一个很好的赌注,因为她的极客朋友叫她去那里。现在你更清楚为什么爱丽丝可能在书店里。你可以反过来使用这些知识来改善你的猜测,为什么其他人都在哪里),最终你可以停止更新。然后获取猜测的快照(或多个快照),并用它来获取您想要的所有信息:

  • 对于每个类别,您可以计算分配到该类别的人,以找出哪些人具有此特殊兴趣。通过观察这些人本身,你也可以解释这个类别(例如,如果X类包含很多穿着球衣和随身携带篮球的高个子的人,你可以将X解释为"篮球运动员"组)。

  • 对于每个地点P和兴趣类别C,你可以计算P中因C(当前一组作业下)而出现的人数比例,这些为你提供了P的表示。例如,你可能会了解到,在巴恩斯和诺布尔闲逛的人包括10%的嬉皮士,50%的动漫迷,10%的小丑和30%的大学生。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容