Python中的端對端主題建模: 隱含狄利克雷分布(LDA)

2021-12-25 Python程式設計師

主題模型: 簡而言之,它是一種統計模型,用於標記出現在文檔集合中的抽象「主題」,這些主題最能代表這個文檔集合中的信息。

獲取主題模型使用了許多技術。本文旨在演示LDA的實現:一種廣泛使用的主題建模技術。

隱含狄利克雷分布(LDA)

根據定義,LDA是給定語料庫的生成概率模型。其基本思想是將文檔表示為潛在主題的隨機混合,並對每個主題通過單詞分布進行特徵化。

LDA的底層算法

http://chdoig.github.io/pytexas2015-topic-modeling/#/3/4 

給定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 
譯者:野生大熊貓

相關焦點

  • 推薦 :使用Python的LDA主題建模(附連結)
    引言主題建模包括從文檔術語中提取特徵,並使用數學結構和框架(如矩陣分解和奇異值分解)來生成彼此可區分的術語聚類(cluster)或組,這些單詞聚類繼而形成主題或概念。主題建模是一種對文檔進行無監督分類的方法,類似於對數值數據進行聚類。這些概念可以用來解釋語料庫的主題,也可以在各種文檔中一同頻繁出現的單詞之間建立語義聯繫。
  • 【主題模型】隱含狄利克雷分布(LDA)-基礎主題模型
    LDA基礎在前面我們講到了基於矩陣分解的LSI和NMF主題模型,這裡我們開始討論被廣泛使用的主題模型:隱含狄利克雷分布(Latent Dirichlet Allocation,以下簡稱LDA)。文本關注於隱含狄利克雷分布對應的LDA。1.1 LDA貝葉斯模型LDA是基於貝葉斯模型的,涉及到貝葉斯模型離不開「先驗分布」,「數據(似然)」和"後驗分布"三塊。
  • Python文本挖掘——LDA模型實現
    1、簡介在機器學習領域,LDA是兩個常用模型的簡稱:Linear Discriminant Analysis和Latent Dirichlet Allocation
  • 獨家 | 利用Python實現主題建模和LDA 算法(附連結)
    主題建模是一種用於找出文檔集合中抽象「主題」的統計模型。LDA(Latent Dirichlet Allocation)是主題模型的一個示例,用於將文檔中的文本分類為特定的主題。LDA算法為每一個文檔構建出一個主題,再為每一個主題添加一些單詞,該算法按照Dirichlet分布來建模。
  • 數據挖掘之--LDA主題建模
    無論你的手裡是文本、圖片還是其他的非結構化、結構化數據,都可用這個方法進行主題建模。今天我們通過一個新聞文本數據集進行 LDA 主題建模。觀察數據中有哪些主題、這些主題的分布如何,以及每個主題都包含哪些關鍵元素。
  • 《Python語言數據分析》----8.2.4 向量模型_3)LDA模型
    ###############8.2.4  向量模型_3)LDA模型import nltkfrom nltk.corpus import PlaintextCorpusReadercorpus_root = r"D:\python
  • 基於財經新聞的LDA主題模型實現:Python
    LDA主題模型雖然有時候結果難以解釋,但由於其無監督屬性還是廣泛被用來初步窺看大規模語料(如財經新聞)的主題分布。
  • 乾貨 | 一文詳解隱含狄利克雷分布(LDA)
    作者 | 玉龍一、簡介隱含狄利克雷分布
  • 人工智慧領域最重要的概率分布你必須知道:狄利克雷分布
    LDA也就是隱含狄利克雷分布(Latent Dirichlet Allocation)模型在無監督學習理論中有極為廣泛的應用,LDA
  • Python之LDA主題模型算法應用
    p=5318在這篇文章中,我將介紹用於Latent Dirichlet Allocation(LDA)的lda Python包的安裝和基本用法。我不會在這篇文章中介紹該方法的理論基礎。將語料庫(文檔集)中的文檔分配給基於單詞矢量的潛在(隱藏)主題的主要思想是相當容易理解的,而這個例子(來自lda)將有助於鞏固我們對LDA模型的理解。
  • R語言中的LDA模型:對文本數據進行主題模型topic modeling分析
    p=4333 主題建模在文本挖掘中,我們經常收集一些文檔集合,例如博客文章或新聞文章,我們希望將其分成組,以便我們可以分別理解它們。主題建模是對這些文檔進行無監督分類的一種方法,類似於對數字數據進行聚類,即使我們不確定要查找什麼,也可以找到分組。潛在狄利克雷分配(LDA)是擬合主題模型特別流行的方法。
  • 【乾貨】利用NLTK和Gensim進行主題建模(附完整代碼)
    參與 | XiaowenTopic Modelling in Python with NLTK and Gensim利用NLTK和Gensim進行主題建模研究論文主題建模是一種無監督的機器學習方法,它幫助我們發現論文中隱藏的語義結構,使我們能夠在語料庫中學習論文的主題表示。
  • Appium+Python做移動端自動化測試
    原生的webdriverapi為web端設計,因此擴展到移動端要拓展。Appium官方提供了一套appium client,涵蓋多種語言ruby/java/python等。  2.4 會話Session  在webdriver/appium,所有測試都必須在Appium Server和行動裝置之間創建會話(Session)後才可以進行。
  • 專欄 | 技術乾貨:一文詳解LDA主題模型
    LDA 在主題模型中佔有非常重要的地位,常用來文本分類。LDA由Blei, David M.、Ng, Andrew Y.、Jordan於2003年提出,用來推測文檔的主題分布。它可以將文檔集中每篇文檔的主題以概率分布的形式給出,從而通過分析一些文檔抽取出它們的主題分布後,便可以根據主題分布進行主題聚類或文本分類。
  • 商品評論情感化分析案例(LDA主題分析)
    Name: content, dtype: object將詞語轉為DataFrame;刪除標點符號# 將詞語轉為dataframe形式,一列是詞,一列是詞語所在的句子ID,最後一列是詞語在該句子的位置# 每一評論中詞的個數n_word =
  • 【Python】建立gRPC服務端與.Net Core 客戶端
    服務端代碼 cd python-dirpython -m grpc_tools.protoc -I ../protos --python_out=. --grpc_python_out=. ../protos/vcenter.proto這裡會生成兩個python文件[proto-file-name]_pb2.py[proto-file-name]_pb2_grpc.py6.編寫服務端代碼 1.
  • 小白數據分析——Python職位數據分析全鏈路
    (pivot_table),它很容易將二維的指標聚合出來,並且得到我們想要的數據,最後將維度和指標展示在3d柱狀圖中。3.2 主題模型分析LDA(Latent Dirichlet Allocation)是一種文檔主體生成模型。該模型假設文檔的主題服從Dirichlet分布,某個主題裡的詞也服從Dirichlet分布,經過各種優化算法來解出這兩個隱含的分布。
  • NLP筆記之LDA
    •隱含狄利克雷分布(LatentDirichlet Allocation,簡稱LDA)是由David M.
  • 帶你讀論文 | 端到端語音識別模型
    本文將通過六篇論文,從建模方法、響應時間優化、數據增強等不同方面講解端到端語音模型的發展,並探討不同端到端語音識別模型的優缺點。在講述語音識別建模之前,首先明確端到端語音識別的輸入和輸出。輸入:目前端到端語音識別常用的輸入特徵為 fbank。