天天看點

拓端tecdat|Python之LDA主題模型算法應用安裝lda一個例子選擇模型主題字文檔主題可視化

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

原文出處:拓端資料部落公衆号

在這篇文章中,我将介紹用于Latent Dirichlet Allocation(LDA)的lda Python包的安裝和基本用法。我不會在這篇文章中介紹該方法的理論基礎。将語料庫(文檔集)中的文檔配置設定給基于單詞矢量的潛在(隐藏)主題的主要思想是相當容易了解的,而這個例子(來自lda)将有助于鞏固我們對LDA模型的了解。

安裝lda

簡而言之,兩種方法:

  • 方法1:

我将以使用者身份安裝lda

$ pip install --user lda

           

這也将安裝所需的pbr包。現在我将 在一個設定中提供lda,其中包含我之前安裝的所有其他軟體包。使用此方法,您應該在安裝後得到類似的内容:

$ pip show lda
---
Name: lda
Requires: pbr, numpy
           

lda已經安裝好了。讓我們一起完成示例。

一個例子

檢視路透社新聞釋出的語料庫。首先,我們做一些導入:

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]))
           

選擇模型

接下來,我們初始化并拟合LDA模型。我們必須選擇主題的數量(其他方法也可以嘗試查找主題的數量,但對于LDA,我們必須假設一個數字)。繼續我們選擇的示例:

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

先前有幾個參數是我們保留預設值。據我所知,這裡隻使用對稱先驗 。

主題字

從拟合模型中我們可以看到主題詞機率:

從輸出的大小我們可以看出,對于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

- 辛普森 億 年前 南

- 紅衣主教 癌症 教會 生活

* 主題 17

- 喪葬 教會 城市 死亡

* 主題 18

- 博物館  文化 城市 文化

* 主題 19

- 藝術 展 世紀 城市 之旅
           

這讓我們了解了20個主題可能是什麼含義。

文檔主題

我們從模型中獲得文檔主題機率:

doc_topic = model.doc_topic_
           

檢視輸出的大小,我們可以看到395個文檔中的每個文檔都有20個主題的分布。這些應該針對每個文檔進行标準化,讓我們測試前5個:

for n in range
   document: 0 sum: 1.0
   document: 1 sum: 
           

檔案: 0 總和: 1.0

檔案: 1 總和: 1.0

檔案: 2 總和: 1.0

檔案: 3 總和: 1.0

檔案: 4 總和: 1.0

我們可以對最可能的主題進行抽樣:

for n in range(10):
    topic_most_pr = doc_topic[n].argmax
           

可視化

 讓我們看看主題詞分布是什麼樣的。每個主題應該有一個獨特的單詞分布。在下面的詞幹圖中,每個詞幹的高度反映了主題中單詞的機率:

plt.tight_layout()
plt.show()
           
拓端tecdat|Python之LDA主題模型算法應用安裝lda一個例子選擇模型主題字文檔主題可視化

最後,讓我們看一下幾個文檔的主題分布。這些分布給出了每個文檔的20個主題中每個主題的機率。

plt.tight_layout()
plt.show()
           
拓端tecdat|Python之LDA主題模型算法應用安裝lda一個例子選擇模型主題字文檔主題可視化
拓端tecdat|Python之LDA主題模型算法應用安裝lda一個例子選擇模型主題字文檔主題可視化