自然语言处理-LDA主题模型
LDA主題模型
哈爾濱工程大學-537
一、LDA主題模型簡介
LDA(Latent Dirichlet Allocation)中文翻譯為:潛在狄利克雷分布。LDA主題模型是一種文檔生成模型,是一種非監督機器學習技術。它認為一篇文檔是有多個主題的,而每個主題又對應著不同的詞。一篇文檔的構造過程,首先是以一定的概率選擇某個主題,然后再在這個主題下以一定的概率選出某一個詞,這樣就生成了這篇文檔的第一個詞。不斷重復這個過程,就生成了整篇文章(當然這里假定詞與詞之間是沒有順序的,即所有詞無序的堆放在一個大袋子中,稱之為詞袋,這種方式可以使算法相對簡化一些)。
LDA的使用是上述文檔生成過程的逆過程,即根據一篇得到的文檔,去尋找出這篇文檔的主題,以及這些主題所對應的詞。
白話解釋:比如document1的內容為:[自從喬布斯去世之后,iPhone再難以產生革命性的創新了]?
通過上述的方法,document1將對應兩個主題topic1,topic2,進而,主題topic1會對應一些詞:[蘋果創始人][蘋果手機],主題topic2會對應一些詞:[重大革新][技術突破]。于是LDA模型的好處顯而易見,就是可以挖掘文檔中的潛在詞或者找到兩篇沒有相同詞的文檔之間的聯系。
二、算法流程
(超詳細,超通俗易懂,邏輯脈絡超清晰)
我們以文檔集合D中的文檔d為例,文檔d中包含單詞序列<w1,w2,...wn><w1,w2,...wn>,wiwi表示第ii個單詞,設d中有nn個單詞;?
文檔集合D中出現的全部詞組成VocabularyVocabulary;?
首先將文檔d作為算法的輸入,并輸入主題數K,此時d對應到各個主題的概率為θd=(pt1,pt2,...ptk)θd=(pt1,pt2,...ptk),ptipti為d對應第ii個主題的概率;?
此時輸入到算法中的只有文檔d和主題數K,那么pt1,pt2...ptkpt1,pt2...ptk的數值從何而來?
我們首先人為設置文檔d中對應主題t1,t2,...tkt1,t2,...tk的詞的個數,比如文檔d中5個詞對應主題t1t1,7個詞對應主題t2t2,…,4個詞對應主題tktk,那么此時,我們就人為確定了一個參數向量(5,7,…4),將這個向量記作α??α→,這個我們人為設置的參數向量稱為超參數。?
那么如何將超參數α??α→轉化為概率分布θd=(pt1,pt2,...ptk)θd=(pt1,pt2,...ptk)呢?
這里我們引入狄利克雷分布函數:?
Dirichlet(p1,p2,p3|α1,α2,α3)=Γ(α1+α2+α3)Γ(α1)Γ(α2)Γ(α3)pα1?11pα2?22pα3?33
Dirichlet(p1,p2,p3|α1,α2,α3)=Γ(α1+α2+α3)Γ(α1)Γ(α2)Γ(α3)p1α1?1p2α2?2p3α3?3
它所表達的含義簡單來說就是,已知α1,α2,α3α1,α2,α3的條件下,概率p1,p2,p3p1,p2,p3的概率分布,也就是概率的概率,分布的分布。再直觀點說就是:比如在已知α1,α2,α3α1,α2,α3為(5,7,4)(5,7,4)的條件下,樣本點p1,p2,p3p1,p2,p3為(0.4,0.5,0.1)(0.4,0.5,0.1)的概率是多少。
那么我們將上述的三維DirichletDirichlet函數擴展為KK維,即在已知α??α→的條件下,得到p??p→的分布(α??,p??α→,p→分別為K維向量)。KK維DirichletDirichlet公式如下:?
Dirichlet(p??|α??)=Γ(∑Kk=1αk)∏Kk=1Γ(αk)∏k=1Kpαk?1k
Dirichlet(p→|α→)=Γ(∑k=1Kαk)∏k=1KΓ(αk)∏k=1Kpkαk?1
至此,我們通過輸入超參數α??α→得到了文檔d的關于K個主題的狄利克雷分布:?
θd=Dirichlet(α??)
θd=Dirichlet(α→)
其含義顯然,DirichletDirichlet的輸入參數為α??α→,得到的輸出為可以理解為一個矩陣:?
(pt1,pt2,...ptk)(pt1,pt2,...ptk)?
............?
............?
(pt1,pt2,....ptk)(pt1,pt2,....ptk)?
即文檔d對應各個主題tktk的概率分布的分布。
同理,我們可以將任一主題tktk產生各個詞的概率表示出來。人為設置主題tktk產生的各個詞的數量,即設置超參數,用向量η??η→來表示。同上所述,將η??η→作為DirichletDirichlet函數的輸入參數,得到主題tktk產生各個詞的狄利克雷分布:?
βk=Dirichlet(η??)
βk=Dirichlet(η→)
此時我們已經得到了文檔d對應各個主題的概率分布的分布(即狄利克雷分布)θdθd,以及文檔tktk產生各個詞的概率分布的分布βkβk,那么接下來,我們要從文檔d中取出第i個詞,求這個詞對應各個主題的分布;?
換句大家熟悉的話來說就是:已知第i個詞wiwi在文檔d中出現n次,且已知它對應各個主題的概率(這里每個詞對應各個主題的概率就是文檔d對應各個主題的概率,二者同分布),求該詞被各個主題產生的次數;?
這就等同于我們熟知的一共有n個球,且已知紅球、黃球、綠球的概率分別為p1,p2,p3p1,p2,p3,求這n個求當中紅球、黃球、綠球的個數。
那么如何通過文檔d對應各個主題的分布θdθd得到文檔中的每個詞被各個主題產生的次數,進而重新得到文檔d中對應各個主題的詞的個數呢?
首先我們引入十分熟悉的多項式分布:?
multi(m1,m2,m3|n,p1,p2,p3)=n!m1!m2!m3!pm11pm22pm33
multi(m1,m2,m3|n,p1,p2,p3)=n!m1!m2!m3!p1m1p2m2p3m3
這個公式的意義總所周知:已知一共n個球,且知道每種顏色球的概率,就可以得到有m1m1個紅球,m2m2個黃球,m3m3個綠球的概率。
那么同樣將其擴展為K維,將θdθd作為參數,就可以得到文檔d中第i個詞wiwi對應的各個主題的多項式分布zdn=multi(θd)zdn=multi(θd)?
于是,非常值得慶幸,我們通過文檔d對應各個主題的概率θdθd,進而得知文檔d中各個詞對應各個主題的概率,且知道這個詞在文檔d中的出現次數,于是求得這個詞被各個主題的產生次數,遍歷文檔d中的每一個詞,就可以得到新的文檔d中對應各個主題的詞的個數。?
白話舉例:文檔d對應主題t1,t2t1,t2的概率分別為pt1,pt2,pt1,pt2,,于是文檔d中詞w1w1對應的主題t1,t2,t1,t2,的概率也分別為pt1,pt2pt1,pt2,又得知詞w1w1在文檔d中出現了15次,于是得到詞w1w1由主題t1,t2t1,t2產生的次數分別為10次、5次(這個是假設的);?
對文檔d中的每個詞都執行此操作,(假設文檔中只有兩個詞)詞w2w2由主題t1,t2t1,t2產生的次數分別為13次、2次,于是就能重新得到文檔d中對應各個主題的詞的數量,即對應主題t1,t2t1,t2的詞的數量分別為2個、0個(初始的d中對應各個主題的詞的數量是人為設定的超參數α??α→)。
于是,我們最終得到了文檔d對應各個主題的詞的個數的更新值:記作向量n??n→,我們將更新后的向量n??n→再次作為狄利克雷分布的輸入向量,即Dirichlet(θd|n??)Dirichlet(θd|n→),就會又會得到文檔d對應各個主題的概率的更新值,即更新的θdθd,如此反復迭代,最終得到收斂的θdθd,即為我們要的結果。
有了以上的經驗,主題tktk產生各個詞的概率βkβk可以同樣處理,對于產生文檔d中的第ii個詞wiwi的各個主題的分布為:?
multi(βi)multi(βi),于是用同上面相同的方法,可以得到更新后的各個主題產生各個單詞的數量:記作向量m??m→,將向量m??m→作為新的參數再次帶入狄利克雷分布Dirichlet(βk|m??)Dirichlet(βk|m→),就又會得到每個主題產生各個詞的概率,即更新的βkβk,如此反復迭代,最終得到收斂的βkβk,即所求結果。
得到了收斂的θdθd和βkβk,算法就大功告成了,這時,該算法就會根據輸入的文檔d,找到潛在主題下的相關詞啦!!!!
————————————————
版權聲明:本文為CSDN博主「weixin_41090915」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_41090915/article/details/79058768
總結
以上是生活随笔為你收集整理的自然语言处理-LDA主题模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2018年计算机CPU纳米制程,AMD发
- 下一篇: 爬虫小案例:基于Bing关键词批量下载图