Python之LDA主題模型算法應用

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

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

安裝lda

簡而言之,兩種方法:測試

  • 方法1

我將以用戶身份安裝ldaui

$ pip install --user lda

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

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

lda已經安裝好了。讓咱們一塊兒完成示例。code

一個例子

查看路透社新聞發佈的語料庫。首先,咱們作一些導入:orm

import numpy as np

import lda

import lda.datasets

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

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

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)

先前有幾個參數是咱們保留默認值。據我所知,這裏只使用對稱先驗 。get

主題字

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

從輸出的大小咱們能夠看出,對於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:

文件 總和 1.0

文件 總和 1.0

文件 總和 1.0

文件 總和 1.0

文件 總和 1.0

咱們能夠對最可能的主題進行抽樣:

for n in range(10):
    topic\_most\_pr = doc_topic\[n\].argmax

可視化

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

plt.tight_layout()
plt.show()

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

plt.tight_layout()
plt.show()

 

相關文章
相關標籤/搜索