Python中的端對端主題建模: 隱含狄利克雷分布(LDA)
主題模型: 簡而言之,它是一種統計模型,用於標記出現在文檔集合中的抽象「主題」,這些主題最能代表這個文檔集合中的信息。
獲取主題模型使用了許多技術。本文旨在演示LDA的實現:一種廣泛使用的主題建模技術。
隱含狄利克雷分布(LDA)
根據定義,LDA是給定語料庫的生成概率模型。其基本思想是將文檔表示為潛在主題的隨機混合,並對每個主題通過單詞分布進行特徵化。
LDA的底層演算法
http://chdoig.github.io/pytexas2015-topic-modeling
給定M個文檔、N個單詞和估計的K個主題, LDA使用這些信息輸出(1)K個主題,(2)psi,表示每個主題K的單詞分布,(3)phi,表示文檔 i 的主題分布。
α參數是Dirichlet先驗濃度參數,表示文檔-主題密度,α值越高,就可以假定文檔由更多的主題組成,從而導致每個文檔的主題分布更加具體。
β參數與先驗濃度參數相同,表示主題詞密度的,β值越高,就可以假定主題由大部分單片語成,從而導致每個主題的單詞分布更加具體。
LDA 的實現
完整的代碼可以在GitHub上以Jupyter Notebook的形式獲得。(https://github.com/kapadias/ml-directory/blob/master/medium_posts/Introduction%20to%20Topic%20Modeling.ipynb )
- 載入數據
- 數據清洗
- 探索性分析
- 為LDA分析準備數據
- LDA模型訓練
- 分析LDA模型結果
載入數據
NIPS(神經信息處理系統)標識
在本教程中,我們將使用NIPS大會上發表的論文數據集。NIPS大會(神經信息處理系統)是機器學習領域最負盛名的年度事件之一。在每次的NIPS大會上,參會者都會發表大量的研究論文。此CSV文件包含了從1987年到2016年(29年!)發表的不同的NIPS論文的信息。這些論文討論了機器學習領域的各種各樣的主題,從神經網路到優化方法等等。
首先,我們將研究CSV文件,以確定我們可以使用什麼類型的數據進行分析,以及它的結構是怎樣的。一篇研究論文通常由標題、摘要和正文組成。
原始數據示例
數據清洗
去掉多餘列
對於論文的分析,我們只對與論文相關的文本數據以及論文發表年份感興趣。由於該文件包含一些元數據,如id和文件名,因此刪除所有不包含有用文本信息的列是很有必要的。
刪除標點符號/轉換為小寫
現在,我們將對論文文本內容執行一些簡單的預處理,以便它們更易於分析。我們將使用一個正則表達式來刪除標題中的任何標點符號。然後我們將執行小寫字母轉換。
探索性分析
為了驗證預處理是否正確執行,我們可以對研究論文的文本創建一個詞雲。這將給我們一個最常見單詞的可視化表示。可視化是理解我們是否仍然在正確的軌道上的關鍵!此外,它還允許我們在進一步分析文本數據之前驗證是否需要對文本數據進行額外的預處理。
Python有大量的開放庫!我們將使用Andreas Mueller的wordcloud庫,而不是自己開發一種方法來創建詞云:
為LDA分析準備文本
LDA不直接處理文本數據。首先,需要將文檔轉換為簡單的向量表示形式。然後,LDA將使用這個表示來確定主題。「文檔向量」的每個條目都對應於一個單詞在文檔中出現的次數(詞袋模型,即BOW表示)。
接下來,我們將把標題列錶轉換為向量列表,所有向量的長度都等於對應的辭彙。
然後,我們將根據這個操作的結果(文檔向量列表)來標出最常見的10個單詞。作為檢查,這些單詞也應該出現在詞雲中。
前10個最相同的詞
LDA 模型訓練和結果可視化
我們唯一要調整的參數是LDA演算法中的主題數量。通常,人們會計算「perplexity(困惑度)」指標來確定多少數量的主題是最好的,然後迭代不同數量的主題,直到找到最低的「perplexity」。在下一篇文章中,我們將介紹模型評估和調優概念,並探討廣泛使用的自然語言處理工具包Gensim。
通過LDA找到的最終主題
分析 LDA 模型結果
pyLDAvis包的目的是幫助用戶在主題模型中解釋適合於文本數據集的主題。pyLDAvis開發的互動式可視化工具對以下兩方面都很有幫助:
- 更好地理解和解釋個別主題
- 更好地理解主題之間的關係。
對於(1),通過使用不同的λ參數,你可以手動選擇每個主題以查看其最頻繁的和/或「相關的」詞語。當你試圖為每個主題指定一個人可解釋的名稱或「含義」時,這將有所幫助。
對於(2),探索主題間距圖(Intertopic Distance Plot )可以幫助你了解主題之間的關係,包括主題組之間潛在的高級結構。
在過去的十年里,機器學習已經變得越來越流行,最近在計算可用性方面的進步已經導致研究該領域的人數的指數級增長,人們正在尋找如何將新方法結合起來,從而推動自然語言處理領域的發展。通常,我們將主題模型視為黑箱演算法,但我希望這篇文章能夠闡明它背後的數學原理、直覺和高級代碼,並幫助你開始處理任何文本數據。
如上所述,在下一篇文章中,我們將更深入地了解如何評估主題模型的性能,優化超參數,使其能夠部署到生產環境中。
參考資料:
[1] 主題模型—?維基百科。 https://en.wikipedia.org/wiki/Topic_model
[2] 用於主題建模的分散式策略。 https://www.ideals.illinois.edu/bitstream/handle/2142/46405/ParallelTopicModels.pdf?sequence=2&isAllowed=y
[3] 主題映射?—?軟體?—?資源—?Amaral Lab.。https://amaral.northwestern.edu/resources/software/topic-mapping
如果你有任何反饋,請對本文進行評論,也可以在LinkedIn(https://www.linkedin.com/in/shashankkapadia/ )上給我發信息,或者給我發郵件(shmkapadia[at]gmail.com)。
英文原文:https://qiniumedia.freelycode.com/vcdn/1/%E4%BC%98%E8%B4%A8%E6%96%87%E7%AB%A0%E9%95%BF%E5%9B%BE3/end-to-end-topic-modeling-in-python-latent-dirichlet-allocation-lda.pdf
譯者:野生大熊貓
![](https://pic.pimg.tw/zzuyanan/1488615166-1259157397.png)
![](https://pic.pimg.tw/zzuyanan/1482887990-2595557020.jpg)
※理解 Python 的 for 循環
※遠程訪問虛擬化應用 無需公網IP 這款軟體太強大了
TAG:Python部落 |