本文為《Introduction to Latent Dirichlet Allocation》的中文翻譯學(xué)習(xí)。原文請(qǐng)參見http://blog.echen.me/2011/08/22/introduction-to-latent-dirichlet-allocation/
介紹
假設(shè)你有以下句子:
- 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)?它是自動(dòng)地發(fā)現(xiàn)這些句子中包含的主題的一種方式。例如,若要在這些句子中發(fā)現(xiàn)2個(gè)主題(A和B),LDA可能會(huì)產(chǎn)生下面的東西:
- 句子1和句子2:100%主題A
- 句子3和句子4:100%主題B
- 句子5:60%主題A,40%主題B
- 主題A:30% broccoli,15% bananas,10% breakfast,10% munching,……(在這一點(diǎn)上,你可以解釋主題A是關(guān)于食物的)
- 主題B:20% chinchillas,20% kittens,20% cute,15% hamster,……(在這一點(diǎn)上,你可以解釋主題B是關(guān)于可愛動(dòng)物的)
當(dāng)然,目前的問題是,LDA是如何發(fā)現(xiàn)這些主題的?
LDA Model
詳細(xì)地說,LDA把文檔表示為具有特定概率的單詞的主題混合。它假設(shè)文檔按照以下的方式產(chǎn)生:當(dāng)你在撰寫每個(gè)文檔時(shí),你
- 決定文檔字?jǐn)?shù)
(比如,根據(jù)泊松分布)。
- 為文檔選擇一個(gè)主題混合(根據(jù)一組固定
個(gè)主題上的Dirichlet分布)。例如,假設(shè)我們以上兩個(gè)關(guān)于食物和可愛動(dòng)物的主題,你可以選擇文檔使其包括1/3的食物和2/3可愛的動(dòng)物。
- 通過以下方式生成每個(gè)單詞
:
- 首先選擇一個(gè)主題(根據(jù)上面采樣的多維分布。例如,您可能會(huì)有1/3的概率選擇食物主題,可能會(huì)有2/3概率的選擇可愛動(dòng)物主題)。
- 使用主題生成單詞本身(根據(jù)主的多維分布)。例如,如果我們選擇食物主題,則我們可能會(huì)以30%的概率生成單詞“broccoli”,以15%的概率生成“bananas”,等等。
假設(shè)有這種生成文檔集合的模型,LDA隨后嘗試從文檔中回溯,以查找可能生成集合的一組主題。
Example
讓我們舉個(gè)例子。根據(jù)上述過程,檔生成某個(gè)特定文檔時(shí),你可能
- 選擇5作為
的字?jǐn)?shù)。
- 決定
有1/2的概率是關(guān)于食物主題的,有1/2的概率是關(guān)于可愛動(dòng)物主題的。
- 從食物主題中挑選第一個(gè)單詞,然后你拿到“broccoli”一詞。
- 從可愛動(dòng)物主題中挑選第二個(gè)單詞,然后你拿到“panda”一詞。
- 從可愛動(dòng)物主題中挑選第三個(gè)單詞,然后你拿到“adorable”一詞。
- 從食物主題中挑選第四個(gè)單詞,然后你拿到“cherries”一詞。
- 從食物主題中挑選第五個(gè)單詞,然后你拿到“eating”一詞。
因此,在LDA模型下生成的句子將會(huì)是“broccoli panda adorable cherries eating”(值得注意的是,LDA是一個(gè)詞袋模型)。
Learning
現(xiàn)在,假設(shè)你有一個(gè)文檔集。您選擇了固定的一些K個(gè)主題用于發(fā)現(xiàn),并希望使用LDA來學(xué)習(xí)每個(gè)文檔的主題表示以及與每個(gè)主題光臨的單詞。你該如何做?下面是一種做法(被稱為collapsed Gibbs sampling):
- 瀏覽每個(gè)文檔,且隨機(jī)地從K個(gè)主題中給文檔的每個(gè)單詞分布一個(gè)主題。
- 值得注意的是,隨機(jī)分配已經(jīng)給出了所有文檔的主題表示以及所有主題的單詞分布(雖然不是很好)。
- 因此,為了改進(jìn)它們,對(duì)每個(gè)文檔
……
- 瀏覽
中的每個(gè)單詞
……
- 對(duì)每個(gè)主題
:
-
為文檔
中被分配給主題
的單詞的比例
-
為被分配給主題
且包含單詞
的文檔比例
- 重新分配主題
給單詞
的概率為
(根據(jù)我們的生成模型,這本質(zhì)上是主題
生成單詞
的概率,因此我們用此概率來重采樣當(dāng)前單詞的主題是有意義的)。(此外,這里掩蓋了幾件事,特別是在這些概率中使用先驗(yàn)概率。)
-
- 換句話說,在這步中,我們假設(shè)除當(dāng)前單詞以外的所有主題分配都是正確的,隨后使用我們生成文檔的模型更新當(dāng)前單詞的分配。
- 對(duì)每個(gè)主題
- 重復(fù)前一步多次后,你最終會(huì)達(dá)到一個(gè)大致穩(wěn)定的狀態(tài), 其中你的分配是相當(dāng)不錯(cuò)的。因此,使用這些分配來估計(jì)每個(gè)文檔的主題混合(通過計(jì)算該文檔中分配給每個(gè)主題的單詞的比例)以及與每個(gè)主題相關(guān)的單詞(通過計(jì)算分配給每個(gè)主題的單詞的總體比例)。
- 瀏覽
Layman’s Explanation
如果上面的討論有點(diǎn)眼花繚亂,下面是另一種在不同領(lǐng)域解釋LDA的方式。
假設(shè)你剛剛搬到了一個(gè)新城市。你是一個(gè)嬉皮士和動(dòng)漫迷, 所以你想知道其他嬉皮士和動(dòng)漫迷傾向于在哪里閑逛。當(dāng)然,作為一個(gè)嬉皮士,你知道你不能只問,那你該怎么辦?
場景如下:您在全城范圍內(nèi)劃分了一堆不同的區(qū)域(文檔),并記錄下人們(單詞)在每個(gè)區(qū)域閑逛的信息(如,“Alice hangs out at the mall and at the park”,“Bob hangs out at the movie theater and the park”,等等)。關(guān)鍵是,您不知道每個(gè)區(qū)域典型的興趣群(主題),也不知道每個(gè)人的不同興趣。
因此,您選擇要學(xué)習(xí)的個(gè)類別(即,你希望學(xué)習(xí)人們屬于K個(gè)最重要的類別),然后首先猜測(cè)你為什么在那里看到人。例如,你最初猜測(cè)Alice在商場,因?yàn)閷?duì)X感興趣的人喜歡在那里閑逛;當(dāng)你在公園里看到她時(shí),你猜那是因?yàn)樗龑?duì)Y感興趣的朋友喜歡在那里閑逛;當(dāng)你在電影院看到Bob時(shí),你隨機(jī)猜想這是因?yàn)檫@個(gè)城市的Z人真的很喜歡看電影;等等。
當(dāng)然,你的隨機(jī)猜測(cè)很可能是不正確的(畢竟是隨機(jī)猜測(cè)?。?,因此你想要提高它們。一種方法是:
- 選擇一個(gè)地方和一個(gè)人(如,Alice在商場)。
- 為什么Alice可能在商場?可能是因?yàn)樯虉隼锲渌型瑯优d趣的人給她發(fā)了一條信息叫她來。
- 換句話說,在商場里越多的人對(duì)X感興趣,Alice與興趣X的關(guān)聯(lián)就越大(在她去的所有其他地方,那么Alice因?yàn)榕d趣X來商場的可能性就越大。
一遍又一遍地瀏覽每個(gè)地方和人。你的猜測(cè)越來越好(畢竟,如果你注意到很多極客在書店里閑逛,而你懷疑Alice她自己也很古怪,那么Alice在書店里是一個(gè)很好的賭注,因?yàn)樗臉O客朋友叫她去那里?,F(xiàn)在你更清楚為什么愛麗絲可能在書店里。你可以反過來使用這些知識(shí)來改善你的猜測(cè),為什么其他人都在哪里),最終你可以停止更新。然后獲取猜測(cè)的快照(或多個(gè)快照),并用它來獲取您想要的所有信息:
對(duì)于每個(gè)類別,您可以計(jì)算分配到該類別的人,以找出哪些人具有此特殊興趣。通過觀察這些人本身,你也可以解釋這個(gè)類別(例如,如果X類包含很多穿著球衣和隨身攜帶籃球的高個(gè)子的人,你可以將X解釋為"籃球運(yùn)動(dòng)員"組)。
對(duì)于每個(gè)地點(diǎn)P和興趣類別C,你可以計(jì)算P中因C(當(dāng)前一組作業(yè)下)而出現(xiàn)的人數(shù)比例,這些為你提供了P的表示。例如,你可能會(huì)了解到,在巴恩斯和諾布爾閑逛的人包括10%的嬉皮士,50%的動(dòng)漫迷,10%的小丑和30%的大學(xué)生。