NLP:使用LDA在幾分鐘內從數據集中提取主題!

點擊上方關注,All in AI中國

讓我們一起用數據來做一些很酷的事情!

NLP:使用LDA在幾分鐘內從數據集中提取主題!

最近我開始學習關於主題建模方面的文檔主題生成模型(LDA),並對它強大的功能和快速的運行感到驚訝。主題建模是使用無監督學習提取文檔集合中出現的主要主題(通常表示為一組單詞)的一項任務。

我在20個新聞組數據集上測試了該算法。該數據集包含來自眾多新聞報道/媒體的上千篇新聞文章。在這個數據集中,我提前知道了這些新聞的主要主題,以驗證LDA是識別是否正確。

代碼運行起來非常簡單和快速。你可以在GitHub裡面找到它們。我覺得你有必要親自嘗試一下(https://github.com/priya-dwivedi/Deep-Learning/blob/master/topic_modeling/LDA_Newsgroup.ipynb)。

關於LDA

LDA用於將文檔中的文本分類為特定的主題。它根據文檔模型構建主題,根據主題模型構建單詞,建模為狄利克雷分佈(Dirichlet distributions)。

1.每個文檔建模為主題的多項分佈,每個主題建模為單詞的多項分佈。

2.LDA假設我們輸入的每一個文本塊都會包含一些相關的詞。因此,選擇正確的語料庫至關重要。

3.它還假設文檔是由多個主題混合生成的。然後這些主題根據它們的概率分佈生成單詞。

要了解更多關於LDA的信息,請查看此鏈接:http://www.jmlr.org/papers/volume3/blei03a/blei03a.pdf。

NLP:使用LDA在幾分鐘內從數據集中提取主題!

使用數據集

我使用的數據集是20個新聞組數據集。它可在sklearn數據集下使用,而且可以輕鬆地下載為:

NLP:使用LDA在幾分鐘內從數據集中提取主題!

這個數據集已經通過主題對新聞做出分類。你可以通過:

NLP:使用LDA在幾分鐘內從數據集中提取主題!

數據集中有20個目標/主題:

  • 無神論
  • 圖形學
  • 微軟公司的視窗操作系統
  • windows電腦硬件
  • 蘋果電腦硬件
  • windows X系統
  • 待售
  • 汽車
  • 摩托車
  • 棒球
  • 曲棍球
  • crypt命令
  • 電子
  • 微電子裝置
  • 空間
  • 基督徒
  • 槍支
  • 中東地區
  • 多元政治
  • 多元宗教信仰

簡單的看,我們可以說這個數據集有幾個廣泛的主題,如:

1.科學

2.政壇

3.體育

4.宗教

5.技術等

NLP:使用LDA在幾分鐘內從數據集中提取主題!

在Python中使用LDA提取主題

1.對原始文本進行預處理

涉及的方法有:

標記化:將文本分成句子,句子分成單詞。將單詞小寫,並刪除標點符號。

少於3個字符的單詞將被刪除。

停止詞都刪除。

把文中的詞按屈折變化形式進行歸類:第三人稱的詞變成了第一人稱,過去時態和將來時態的動詞變成了現在時態。

單詞還原:調整單複數等變化,回到單詞最初的樣子。

我們使用NLTK和gensim庫來執行預處理。

NLP:使用LDA在幾分鐘內從數據集中提取主題!

NLP:使用LDA在幾分鐘內從數據集中提取主題!

NLP:使用LDA在幾分鐘內從數據集中提取主題!

文本結果如下:

NLP:使用LDA在幾分鐘內從數據集中提取主題!

NLP:使用LDA在幾分鐘內從數據集中提取主題!

2.將文本轉換成詞袋

在進行主題建模之前,我們將標記化和屈折變化的文本轉換為詞袋——你可以將其看作是一個字典,關鍵是單詞,最有價值的部分是單詞在整個語料庫中出現的次數。

NLP:使用LDA在幾分鐘內從數據集中提取主題!

我們可以進一步過濾出現次數很少或頻繁出現的單詞。

現在,對於每個預處理文檔,我們使用剛剛創建的字典對象將文檔轉換為詞袋。也就是說對於每個文檔,我們創建一個字典來報告這些單詞的數量和出現次數。

NLP:使用LDA在幾分鐘內從數據集中提取主題!

結果如下:

NLP:使用LDA在幾分鐘內從數據集中提取主題!

NLP:使用LDA在幾分鐘內從數據集中提取主題!

NLP:使用LDA在幾分鐘內從數據集中提取主題!

3.運行LDA

這實際上非常簡單,因為我們可以使用gensim LDA模型。我們需要指定數據集中有多少個主題。在我看來,我們從8個獨特的主題開始。pass的數量是通過文檔訓練的次數。

NLP:使用LDA在幾分鐘內從數據集中提取主題!

結果和原理解釋

就這樣模型建立了。現在讓我們來看看結果是否有意義。

模型的輸出是8個主題,每個主題由一系列單詞分類。LDA模型沒有給這些詞取一個主題名稱,需要我們作出解釋。請參閱下面的模型輸出示例,並弄清楚LDA是如何為這些詞分配潛在的主題的。

NLP:使用LDA在幾分鐘內從數據集中提取主題!

NLP:使用LDA在幾分鐘內從數據集中提取主題!

NLP:使用LDA在幾分鐘內從數據集中提取主題!

NLP:使用LDA在幾分鐘內從數據集中提取主題!

NLP:使用LDA在幾分鐘內從數據集中提取主題!

檢查GitHub代碼查看所有的主題。並使用模型來增加減少主題的數量(https://github.com/priya-dwivedi/Deep-Learning/blob/master/topic_modeling/LDA_Newsgroup.ipynb)。

意見/看法

1.該模型在提取數據集中獨特主題方面做得非常好,如果我們知道具體名稱,我們可以確認這些主題。

2.模型運行得很快。我可以在幾分鐘內從數據集中提取主題。

3.它運行的前提是假設數據集中有不同的主題。因此,如果數據集中是一堆隨機編寫的推文,那麼模型結果可能無法解釋。

未來如何改進

我對Guided LDA很感興趣,想嘗試一下:https://medium.freecodecamp.org/how-we-changed-unsupervised-lda-to-semi-supervised-guidedlda-e36a95f3a164。

其他作品

http:/DepplearningAnalytics.org/blog

我喜歡在有趣的問題上工作。我已經幫助幾家初創企業部署了最新的基於人工智能的解決方案。你可以看一看:http://deeplearninganalytics.org/。

參考文獻

1.非常感謝Udacity,特別是他們的NLP 納米學位,讓學習變得非常有趣。

2.LDA論文:http://www.jmlr.org/papers/volume3/blei03a/blei03a.pdf

NLP:使用LDA在幾分鐘內從數據集中提取主題!


分享到:


相關文章: