Python代寫LDA主題模型算法應用

原文連接:http://tecdat.cn/?p=5318

 

在這篇文章中,我將介紹用於Latent Dirichlet Allocation(LDA)的lda Python包的安裝和基本用法。我不會在這篇文章中介紹該方法的理論基礎。然而,這個模型的主要參考,Blei etal 2003能夠在線免費得到,我認爲將語料庫(文檔集)中的文檔分配給基於單詞矢量的潛在(隱藏)主題的主要思想是至關容易理解的而這個例子(來自lda)將有助於鞏固咱們對LDA模型的理解。那麼,讓咱們開始......python

安裝lda

在以前的帖子中,我介紹了使用pip和 virtualenwrapper安裝Python包,請參閱帖子瞭解更多詳細信息:git

  • 在Ubuntu 14.04上安裝Python包
  • 在Ubuntu 14.04上的virtualenv和virtualenvwrapper

簡而言之,我將提到兩種方法:github

  • 方法1

我將以用戶身份安裝lda微信

$ pip install --user lda

這也將安裝所需的pbr包。如今我將 在一個設置中提供lda,其中包含我以前安裝的全部其餘軟件包(再次參見上文)。使用此方法,您應該在安裝後獲得相似的內容:app

$ pip show lda

---

名稱:ldadom

版本:0.3.2python2.7

位置:/home/cstrelioff/.local/lib/python2.7/site-packagespost

須要:pbr,numpy測試

我已經安裝了numpy,所以沒有修改。大數據

因此,就是這樣,lda已經安裝好了。讓咱們一塊兒完成隨包提供的示例。

一個例子

lda github存儲庫中的示例查看路透社新聞發佈的語料庫 - 讓咱們複製一下並添加一些細節以更好地瞭解正在發生的事情。此要點提供了一個包含全部要遵循的代碼的腳本,名爲 ex002_lda.py。首先,咱們作一些導入:

import numpy as np

import lda

import lda.datasets

接下來,咱們導入用於示例的數據。這包含在 lda包中,所以這一步很簡單(我還打印出每一個項目的數據類型和大小):

從上面咱們能夠看到有395個新聞項目(文檔)和一個大小爲4258的詞彙表。文檔術語矩陣X具備395個詞彙表中每一個4258個詞彙單詞的出現次數。文檔。例如,X [0,3117]是單詞3117在文檔0中出現的次數。咱們能夠找出計數和與之對應的單詞(讓咱們也獲得文檔標題):

doc_id = 0

word_id = 3117

print (「doc id:{} word id:{}」 。format (doc_id , word_id ))

print (「 - count:{}」 。format (X [ doc_id , word_id ]))

print (「 - word:{}」 。format (vocab [ word_id ]))

print (「 - doc:{}」 。format (titles [ doc_id ]))

doc id : 0 word id : 3117

- count : 2

- word : heir - to - the - throne

 固然咱們應該指望X 矩陣中有不少零 - 我選擇這個例子來得到非零結果。

選擇模型

接下來,咱們初始化並擬合LDA模型。要作到這一點,咱們必須選擇主題的數量(其餘方法也能夠嘗試查找主題的數量,但對於LDA,咱們必須假設一個數字)。繼續咱們選擇的示例:

model = lda 。LDA (n_topics = 20 , n_iter = 500 , random_state = 1 )

先前有幾個參數咱們保留默認值。據我所知,這隻使用對稱先驗 - 我將不得不更多地研究它(參見Wallach etal 2009討論這個問題)。

主題字

從擬合模型中咱們能夠看到主題詞機率:

從輸出的大小咱們能夠看出,對於20個主題中的每個,咱們在詞彙表中分配了4258個單詞。對於每一個主題,應該對單詞的機率進行標準化。咱們來看看前5:

for n in range (5 ):

sum_pr = sum (topic_word [ n ,:])

print (「topic:{} sum:{}」 。format (n , sum_pr ))

 

咱們還能夠得到每一個主題的前5個單詞(按機率):

 * 主題 6

- 德國 德國 戰爭 政治 政府

* 主題 7

- 哈里曼 你。小號 克林頓 丘吉爾 大使

* 主題 8

- 葉利欽 的俄羅斯 俄羅斯 總統 克里姆林宮

* 主題 9

- 王子 女王 鮑爾斯 教會 王

* 主題 10

- 辛普森 億 年前 南

- bernardin 紅衣主教 癌症 教會 生活

* 主題 17

- 死於 喪葬 教會 城市 死亡

* 主題 18

- 博物館 肯尼迪 文化 城市 文化

* 主題 19

- 藝術 展 世紀 城市 之旅

這讓咱們瞭解了20個主題可能意味着什麼 - 你能看到模式嗎?

文檔主題

咱們從模型中得到的其餘信息是文檔主題機率:

doc_topic = model 。doc_topic_

查看輸出的大小,咱們能夠看到395個文檔中的每一個文檔都有20個主題的分佈。這些應該針對每一個文檔進行標準化,讓咱們測試前5個:

for n in range (5 ):

sum_pr = sum (doc_topic [ n ,:])

print (「document:{} sum:{}」 。format (n , sum_pr ))

文件 總和 1.0

文件 總和 1.0

文件 總和 1.0

文件 總和 1.0

文件 總和 1.0

使用新故事的標題,咱們能夠對最可能的主題進行抽樣:

for n in range (10 ):

topic_most_pr = doc_topic [ n ] 。argmax ()

print (「doc:{} topic:{} \ n {} ...」 。format (n ,

topic_most_pr ,

titles [ n ] [:50 ]))

 

可視化

 讓咱們看看一些主題詞分佈是什麼樣的。這裏的想法是每一個主題應該有一個獨特的單詞分佈。在下面的詞幹圖中,每一個詞幹的高度反映了焦點主題中單詞的機率:

plt 。tight_layout ()

plt 。show ()

 

​最後,讓咱們看一下幾個文檔的主題分佈。這些分佈給出了每一個文檔的20個主題中每一個主題的機率。我只會畫一些:

plt 。tight_layout ()

plt 。show ()

 

    

若是您有任何疑問,請在下面發表評論。 

 

大數據部落 -中國專業的第三方數據服務提供商,提供定製化的一站式數據挖掘和統計分析諮詢服務

統計分析和數據挖掘諮詢服務:y0.cn/teradat(諮詢服務請聯繫官網客服

點擊這裏給我發消息QQ:3025393450

 

​QQ交流羣:186388004 

【服務場景】  

科研項目; 公司項目外包;線上線下一對一培訓;數據爬蟲採集;學術研究;報告撰寫;市場調查。

【大數據部落】提供定製化的一站式數據挖掘和統計分析諮詢

歡迎選修咱們的R語言數據分析挖掘必知必會課程!

 

 
歡迎關注 微信公衆號,瞭解更多數據乾貨資訊!
 
相關文章
相關標籤/搜索