作者:Kung-Hsiang, Huang
編譯:ronghuaiyang
導讀
LDA是文檔分類上的經典算法,如何應用到推薦系統上,大家可以看看。
Latent Dirichlet Allocation(LDA)是一種無監督發現語料庫底層主題的主題建模算法。它已被廣泛應用於各種領域,特別是在自然語言處理和推薦系統中。這篇博文將帶你從LDA的概況介紹到詳細的技術說明,最後我們將討論LDA在推薦系統上的應用!
概要介紹
LDA是語料庫/文檔的生成概率模型。它基於“詞袋”假設,即詞語和文檔是可互換的。也就是說,忽略了文檔中文字的順序,或者忽略了文檔的順序。其基本思想是每個文檔都是由不同的主題組合而成,而每個主題的是通過單詞的分佈來描述。
LDA假設單個文檔的生成都是通過從每個文檔中抽取主題,然後從每個抽取的主題中抽取單詞來生成的。為了獲得單詞和主題的適當分佈,我們可以使用Gibbs Sampling、Maximum a Posteriori (MAP)或expect Maximization (EM)來訓練LDA。
Plate表示法
為了更深入一點,讓我們討論一下LDA的符號表示法。在貝葉斯推理中,Plate表示法是一種圖形化的表示隨機變量抽樣的重複過程的方法。每個plate可以看作是一個“循環”,其中plate右下角的變量表示循環的迭代次數。下面是LDA的Plate表示法。
在上面的圖中有兩個組件。上面的plate,有K個主題,這些主題的詞的狄利克雷分佈由超參數β控制。同樣,下面的表格描述了有M個文檔,每個文檔包含N個單詞。灰色的圓圈w是觀察到的單詞,圓圈代表不同的潛在變量。z指的是與w相關聯的主題,θ是文檔主題的狄利克雷分佈,由另一個超參數⍺控制。
生成過程
現在我們大致瞭解瞭如何通過plate表示法來生成文檔。讓我們用數學來表示它。
- 從狄利克雷分佈(θ_i ~ Dir(⍺),i從1到M)中採樣θ
- 從另一個狄利克雷分佈(φ_k ~ Dir(β) k從1到K)中採樣φ
- 從z_ij ~ Multinomial(θ_i) 採樣,從w_ij ~ Multinomial(φ_z_ij) 中採樣,i從1到M,j從1到N
以《紐約時報》為例。首先,對於每個新聞文章,我們對整個文檔的主題分佈θ_i_進行採樣。對每個主題中詞的分佈φ_k_進行採樣。然後,對於每個文檔中的詞j,我們從給定的主題分佈Multinomial(θ_i)中得到一個主題z_ij,然後從給定的詞的分佈Multinomial(φ_z_ij)中的到w_ij,並基於w_ij採樣得到一個單詞。這個過程通過下面的圖來表示。
狄利克雷分佈
我們一直把狄利克雷作為黑盒子,卻沒有給出任何解釋。讓我們簡要地討論一下狄利克雷分佈背後的直覺。一個k維狄利克雷分佈由一個k維參數向量控制。下面我們展示一個狄利克雷分佈的三維例子。基本思想是,alpha值越大,分佈被推到中心的概率越大。這種分佈使得確定與主題/文檔相關聯的單詞/主題的部分具有很高的靈活性,因為一些主題/文檔可能與一組很大的單詞/主題相關聯,而其他的可能不相關聯。
學習
學習LDA模型的問題稱為“推理”問題。給定觀測變量w,以及超參數⍺和β,我們如何估計潛變量的後驗概率。
然而,分母中計算的積分在計算上是很麻煩的。
因此,必須使用近似推理。常用的方法是吉布斯抽樣和變分推論。在這篇文章中,我們將重點討論前者。
吉布斯抽樣
利用吉布斯採樣,我們可以避免直接計算棘手的積分。基本的想法是,我們想從p (w |⍺,β)中採樣來估計這個分佈,但我們不能直接這樣做。相反,Gibbs抽樣允許我們迭代地計算一個潛在變量的後驗值,同時固定所有其他變量。通過這種方式,我們可以獲得後驗分佈p(θ, z, φ| w, ⍺, β)。
對於每次迭代,我們交替採樣w,⍺,β,並固定所有其他變量。算法如下面的偽代碼所示:
For i from 1 to MaxIter:
- Sample θ_i} ~p(θz= z_{i-1, φ = φ_{i-1}w, ⍺, β)
- Sample z_i} ~p(zθ =θ_{i, φ = φ_{i-1}w, ⍺, β)
- Sample φ_i} ~p(φθ = θ_{i, z= z_{i}w, ⍺, β)
由於來自早期迭代的樣本不穩定,我們將丟棄樣本的第一個B次迭代,稱為“老化”。
LDA在推薦系統上的應用
LDA通常用於兩種情況下的推薦系統:
- 協同過濾(CF)
- 基於內容的推薦
協同過濾
當LDA應用於基於物品的CF時,物品和用戶類似於我們一直在討論的文檔和單詞(基於用戶的CF正好相反)。換句話說,每個物品都與用戶組(主題)上的分佈相關聯,每個用戶組都是用戶的分佈。使用LDA,我們可以發現用戶和物品之間的隱藏關係。
基於內容的推薦
第二個應用是基於內容的推薦,非常簡單。我們不只是利用普通的TF-IDF來提取每個物品的文本數據的特徵向量,而且還通過LDA來對這些文本數據的主題進行建模。下面提供了用於訓練LDA和推斷給定文檔主題的示例代碼。
<code>from gensim.test.utils import common_textsfrom gensim.corpora.dictionary import Dictionaryfrom gensim.models import LdaModel# Create a corpus from a list of textscommon_dictionary = Dictionary(common_texts)common_corpus = [common_dictionary.doc2bow(text) for text in common_texts]# Train the model on the corpus.lda = LdaModel(common_corpus, num_topics=10)/<code>
訓練LDA
<code># infer the topic distribution of the second corpus.lda[common_corpus[1]]'''output[(0, 0.014287902), (1, 0.014287437), (2, 0.014287902), (3, 0.014285716), (4, 0.014285716), (5, 0.014285714), (6, 0.014285716), (7, 0.014285716), (8, 0.014289378), (9, 0.87141883)]'''/<code>
推斷主題的分佈向量
總結
在這篇博文中,我們討論了LDA從高層到詳細的數學解釋。另外,我們還討論了LDA在推薦系統上的應用,並提供瞭如何使用的示例代碼。我希望這篇文章對你有幫助,下次再見:)
英文原文:https://blog.rosetta.ai/a-deep-dive-into-latent-dirichlet-allocation-lda-and-its-applications-on-recommender-system-e2e8ea5e661c
閱讀更多 AI公園 的文章