深入瞭解LDA以及其在推薦系統上的引用

作者:Kung-Hsiang, Huang

編譯:ronghuaiyang

導讀

LDA是文檔分類上的經典算法,如何應用到推薦系統上,大家可以看看。

深入瞭解LDA以及其在推薦系統上的引用

Latent Dirichlet Allocation(LDA)是一種無監督發現語料庫底層主題的主題建模算法。它已被廣泛應用於各種領域,特別是在自然語言處理和推薦系統中。這篇博文將帶你從LDA的概況介紹到詳細的技術說明,最後我們將討論LDA在推薦系統上的應用!

概要介紹

LDA是語料庫/文檔的生成概率模型。它基於“詞袋”假設,即詞語和文檔是可互換的。也就是說,忽略了文檔中文字的順序,或者忽略了文檔的順序。其基本思想是每個文檔都是由不同的主題組合而成,而每個主題的是通過單詞的分佈來描述。

深入瞭解LDA以及其在推薦系統上的引用

每個文檔都由一個主題分佈組成

深入瞭解LDA以及其在推薦系統上的引用

每個主題都用單詞的分佈來表示

LDA假設單個文檔的生成都是通過從每個文檔中抽取主題,然後從每個抽取的主題中抽取單詞來生成的。為了獲得單詞和主題的適當分佈,我們可以使用Gibbs Sampling、Maximum a Posteriori (MAP)或expect Maximization (EM)來訓練LDA。

Plate表示法

為了更深入一點,讓我們討論一下LDA的符號表示法。在貝葉斯推理中,Plate表示法是一種圖形化的表示隨機變量抽樣的重複過程的方法。每個plate可以看作是一個“循環”,其中plate右下角的變量表示循環的迭代次數。下面是LDA的Plate表示法。

深入瞭解LDA以及其在推薦系統上的引用

LDA plate 表示法

在上面的圖中有兩個組件。上面的plate,有K個主題,這些主題的詞的狄利克雷分佈由超參數β控制。同樣,下面的表格描述了有M個文檔,每個文檔包含N個單詞。灰色的圓圈w是觀察到的單詞,圓圈代表不同的潛在變量。z指的是與w相關聯的主題,θ是文檔主題的狄利克雷分佈,由另一個超參數⍺控制。

生成過程

現在我們大致瞭解瞭如何通過plate表示法來生成文檔。讓我們用數學來表示它。

  1. 從狄利克雷分佈(θ_i ~ Dir(⍺),i從1到M)中採樣θ
  2. 從另一個狄利克雷分佈(φ_k ~ Dir(β) k從1到K)中採樣φ
  3. 從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採樣得到一個單詞。這個過程通過下面的圖來表示。

深入瞭解LDA以及其在推薦系統上的引用

生成過程的可視化

狄利克雷分佈

我們一直把狄利克雷作為黑盒子,卻沒有給出任何解釋。讓我們簡要地討論一下狄利克雷分佈背後的直覺。一個k維狄利克雷分佈由一個k維參數向量控制。下面我們展示一個狄利克雷分佈的三維例子。基本思想是,alpha值越大,分佈被推到中心的概率越大。這種分佈使得確定與主題/文檔相關聯的單詞/主題的部分具有很高的靈活性,因為一些主題/文檔可能與一組很大的單詞/主題相關聯,而其他的可能不相關聯。

深入瞭解LDA以及其在推薦系統上的引用

狄利克雷分佈

學習

學習LDA模型的問題稱為“推理”問題。給定觀測變量w,以及超參數⍺和β,我們如何估計潛變量的後驗概率。

深入瞭解LDA以及其在推薦系統上的引用

然而,分母中計算的積分在計算上是很麻煩的。

深入瞭解LDA以及其在推薦系統上的引用

因此,必須使用近似推理。常用的方法是吉布斯抽樣和變分推論。在這篇文章中,我們將重點討論前者。

吉布斯抽樣

利用吉布斯採樣,我們可以避免直接計算棘手的積分。基本的想法是,我們想從p (w |⍺,β)中採樣來估計這個分佈,但我們不能直接這樣做。相反,Gibbs抽樣允許我們迭代地計算一個潛在變量的後驗值,同時固定所有其他變量。通過這種方式,我們可以獲得後驗分佈p(θ, z, φ| w, ⍺, β)。

對於每次迭代,我們交替採樣w,⍺,β,並固定所有其他變量。算法如下面的偽代碼所示:

For i from 1 to MaxIter:

  1. Sample θ_i} ~p(θz= z_{i-1, φ = φ_{i-1}w, ⍺, β)
  2. Sample z_i} ~p(zθ =θ_{i, φ = φ_{i-1}w, ⍺, β)
  3. Sample φ_i} ~p(φθ = θ_{i, z= z_{i}w, ⍺, β)

由於來自早期迭代的樣本不穩定,我們將丟棄樣本的第一個B次迭代,稱為“老化”。

LDA在推薦系統上的應用

LDA通常用於兩種情況下的推薦系統:

  1. 協同過濾(CF)
  2. 基於內容的推薦

協同過濾

當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


分享到:


相關文章: