LDA主題模型:一眼看穿希拉里的郵件

  • 2019 年 11 月 20 日
  • 筆記

目錄

  • 1. LDA模型是什麼
    • 1.1 5個分佈的理解
    • 1.2 3個基礎模型的理解
    • 1.3 LDA模型
  • 2. 怎麼確定LDA的topic個數?
  • 3. 如何用主題模型解決推薦系統中的冷啟動問題?
  • 4. 參考文獻
  • 5. 代碼實現

1. LDA模型是什麼

LDA可以分為以下5個步驟:

  • 一個函數:gamma函數。
  • 四個分佈:二項分佈、多項分佈、beta分佈、Dirichlet分佈。
  • 一個概念和一個理念:共軛先驗和貝葉斯框架。
  • 兩個模型:pLSA、LDA。
  • 一個採樣:Gibbs採樣

關於LDA有兩種含義,一種是線性判別分析(Linear Discriminant Analysis),一種是概率主題模型:隱含狄利克雷分佈(Latent Dirichlet Allocation,簡稱LDA),本文講後者。

按照wiki上的介紹,LDA由Blei, David M.、Ng, Andrew Y.、Jordan於2003年提出,是一種主題模型,它可以將文檔集 中每篇文檔的主題以概率分佈的形式給出,從而通過分析一些文檔抽取出它們的主題(分佈)出來後,便可以根據主題(分佈)進行主題聚類或文本分類。同時,它是一種典型的詞袋模型,即一篇文檔是由一組詞構成,詞與詞之間沒有先後順序的關係。此外,一篇文檔可以包含多個主題,文檔中每一個詞都由其中的一個主題生成。

人類是怎麼生成文檔的呢?首先先列出幾個主題,然後以一定的概率選擇主題,以一定的概率選擇這個主題包含的詞彙,最終組合成一篇文章。如下圖所示(其中不同顏色的詞語分別對應上圖中不同主題下的詞)。

其中,類似Beta分佈是二項式分佈的共軛先驗概率分佈,而狄利克雷分佈(Dirichlet分佈)是多項式分佈的共軛先驗概率分佈。此外,LDA的圖模型結構如下圖所示(類似貝葉斯網絡結構):

1.1 5個分佈的理解

先解釋一下以上出現的概念。

  1. 二項分佈(Binomial distribution)

PLSA模型

理解了pLSA模型後,到LDA模型也就一步之遙——給pLSA加上貝葉斯框架,便是LDA。

在上面的Mixture of unigrams model中,我們假定一篇文檔只有一個主題生成,可實際中,一篇文章往往有多個主題,只是這多個主題各自在文檔中出現的概率大小不一樣。比如介紹一個國家的文檔中,往往會分別從教育、經濟、交通等多個主題進行介紹。那麼在pLSA中,文檔是怎樣被生成的呢?

假定你一共有K個可選的主題,有V個可選的詞,咱們來玩一個扔骰子的遊戲。

**一、**假設你每寫一篇文檔會製作一顆K面的「文檔-主題」骰子(扔此骰子能得到K個主題中的任意一個),和K個V面的「主題-詞項」 骰子(每個骰子對應一個主題,K個骰子對應之前的K個主題,且骰子的每一面對應要選擇的詞項,V個面對應着V個可選的詞)。

比如可令K=3,即製作1個含有3個主題的「文檔-主題」骰子,這3個主題可以是:教育、經濟、交通。然後令V = 3,製作3個有着3面的「主題-詞項」骰子,其中,教育主題骰子的3個面上的詞可以是:大學、老師、課程,經濟主題骰子的3個面上的詞可以是:市場、企業、金融,交通主題骰子的3個面上的詞可以是:高鐵、汽車、飛機。

**二、**每寫一個詞,先扔該「文檔-主題」骰子選擇主題,得到主題的結果後,使用和主題結果對應的那顆「主題-詞項」骰子,扔該骰子選擇要寫的詞。

先扔「文檔-主題」的骰子,假設(以一定的概率)得到的主題是教育,所以下一步便是扔教育主題篩子,(以一定的概率)得到教育主題篩子對應的某個詞:大學。

上面這個投骰子產生詞的過程簡化下便是:「先以一定的概率選取主題,再以一定的概率選取詞」。

**三、**最後,你不停的重複扔「文檔-主題」骰子和」主題-詞項「骰子,重複N次(產生N個詞),完成一篇文檔,重複這產生一篇文檔的方法M次,則完成M篇文檔。

上述過程抽象出來即是PLSA的文檔生成模型。在這個過程中,我們並未關注詞和詞之間的出現順序,所以pLSA是一種詞袋方法。生成文檔的整個過程便是選定文檔生成主題,確定主題生成詞。

反過來,既然文檔已經產生,那麼如何根據已經產生好的文檔反推其主題呢?這個利用看到的文檔推斷其隱藏的主題(分佈)的過程(其實也就是產生文檔的逆過程),便是主題建模的目的:自動地發現文檔集中的主題(分佈)。

  1. 用什麼方法進行估計呢,常用的參數估計方法有極大似然估計MLE、最大後驗證估計MAP、貝葉斯估計等等。因為該待估計的參數中含有隱變量z,所以我們可以考慮EM算法。

1.3 LDA模型

事實上,理解了pLSA模型,也就差不多快理解了LDA模型,因為LDA就是在pLSA的基礎上加層貝葉斯框架,即LDA就是pLSA的貝葉斯版本(正因為LDA被貝葉斯化了,所以才需要考慮歷史先驗知識,才加的兩個先驗參數)。

下面,咱們對比下本文開頭所述的LDA模型中一篇文檔生成的方式是怎樣的:

LDA參數估計:Gibbs採樣,詳見文末的參考文獻。

2. 怎麼確定LDA的topic個數?

  1. 基於經驗 主觀判斷、不斷調試、操作性強、最為常用。
  2. 基於困惑度(主要是比較兩個模型之間的好壞)。
  3. 使用Log-邊際似然函數的方法,這種方法也挺常用的。
  4. 非參數方法:Teh提出的基於狄利克雷過程的HDP法。
  5. 基於主題之間的相似度:計算主題向量之間的餘弦距離,KL距離等。

3. 如何用主題模型解決推薦系統中的冷啟動問題?

推薦系統中的冷啟動問題是指在沒有大量用戶數據的情況下如何給用戶進行個性化推薦,目的是最優化點擊率、轉化率或用戶 體驗(用戶停留時間、留存率等)。冷啟動問題一般分為用戶冷啟動、物品冷啟動和系統冷啟動三大類。

  • 用戶冷啟動是指對一個之前沒有行為或行為極少的新用戶進行推薦;
  • 物品冷啟動是指為一個新上市的商品或電影(這時沒有與之相關的 評分或用戶行為數據)尋找到具有潛在興趣的用戶;
  • 系統冷啟動是指如何為一個 新開發的網站設計個性化推薦系統。

解決冷啟動問題的方法一般是基於內容的推薦。以Hulu的場景為例,對於用 戶冷啟動來說,我們希望根據用戶的註冊信息(如:年齡、性別、愛好等)、搜 索關鍵詞或者合法站外得到的其他信息(例如用戶使用Facebook賬號登錄,並得 到授權,可以得到Facebook中的朋友關係和評論內容)來推測用戶的興趣主題。得到用戶的興趣主題之後,我們就可以找到與該用戶興趣主題相同的其他用戶, 通過他們的歷史行為來預測用戶感興趣的電影是什麼。

同樣地,對於物品冷啟動問題,我們也可以根據電影的導演、演員、類別、關鍵詞等信息推測該電影所屬於的主題,然後基於主題向量找到相似的電影,並將新電影推薦給以往喜歡看這 些相似電影的用戶。可以使用主題模型(pLSA、LDA等)得到用戶和電影的主題。

以用戶為例,我們將每個用戶看作主題模型中的一篇文檔,用戶對應的特徵 作為文檔中的單詞,這樣每個用戶可以表示成一袋子特徵的形式。通過主題模型 學習之後,經常共同出現的特徵將會對應同一個主題,同時每個用戶也會相應地 得到一個主題分佈。每個電影的主題分佈也可以用類似的方法得到。

**那麼如何解決系統冷啟動問題呢?**首先可以得到每個用戶和電影對應的主題向量,除此之外,還需要知道用戶主題和電影主題之間的偏好程度,也就是哪些主題的用戶可能喜歡哪些主題的電影。當系統中沒有任何數據時,我們需要一些先驗知識來指定,並且由於主題的數目通常比較小,隨着系統的上線,收集到少量的數據之後我們就可以對主題之間的偏好程度得到一個比較準確的估計。

4. 參考文獻

通俗理解LDA主題模型

https://blog.csdn.net/v_july_v/article/details/41209515

5. 代碼實現