天天看點

python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)

python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)

主題模組化是一種用于找出文檔集合中抽象“主題”的統計模型。LDA(Latent Dirichlet Allocation)是主題模型的一個示例,用于将文檔中的文本分類為特定的主題。LDA算法為每一個文檔建構出一個主題,再為每一個主題添加一些單詞,該算法按照Dirichlet分布來模組化。

那便開始吧!

資料

在這裡将使用到的資料集是15年内釋出的100多萬條新聞标題的清單,可以從Kaggle下載下傳。

python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)

先來看看資料。

python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)

1048575

python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)

圖1

資料預處理

執行以下步驟:

  • 标記化——将文本分成句子,将句子分成單詞,把單詞變為小寫,去掉标點符号。
  • 删除少于3個字元的單詞。
  • 删除所有的句号。
  • 詞形還原——将第三人稱的單詞改為第一人稱,将過去和未來時态中的動詞改為現在時。
  • 詞根化——将單詞簡化為詞根形式。
加載gensim 和nltk庫
python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)

[nltk_data] Downloading package wordnet to[nltk_data] C:UsersSusanLiAppDataRoamingnltk_data…[nltk_data] Package wordnet is already up-to-date!True

編寫一個函數,對資料集執行詞形還原和詞幹預處理。

python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)

預處理之後選擇要預覽的文檔。

python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)

源檔案:[‘rain’, ‘helps’, ‘dampen’, ‘bushfires’]标記化和詞形還原後的檔案:[‘rain’, ‘help’, ‘dampen’, ‘bushfir’]成了!預處理标題文本,将結果儲存為“processed_docs’

python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)
python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)

圖2

資料集的詞袋

由 “processed_docs”建立一個字典,其中包含單詞出現在訓練集中的次數。

python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)

0 broadcast1 communiti2 decid3 licenc4 awar5 defam6 wit7 call8 infrastructur9 protect10 summit

Gensim filter_extremes

過濾出以下幾種情況下的單詞:

  • 在少于15個文檔中出現(絕對數)或
  • 在總語料庫中占比分數超過0.5

以上兩步之後,隻保留前10萬最頻繁出現的單詞。

python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)
Gensim doc2bow

為每個文檔建立一個字典來報告單詞和這些單詞出現的次數,将其儲存到“bow_corpus”,然後再次檢查標明的文檔。

python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)

[(76, 1), (112, 1), (483, 1), (3998, 1)]

預覽樣本預處理檔案的詞袋。

python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)

Word 76 (“bushfir”) appears 1 time.Word 112 (“help”) appears 1 time.Word 483 (“rain”) appears 1 time.Word 3998 (“dampen”) appears 1 time.

TF-IDF

利用models.TfidfModel模型,建立 ‘bow_corpus’的 tf-idf模型對象,并将其儲存到“tfidf”。對整個語料庫進行tfidf轉換,并将其命名為“corpus_tfidf’。最後,預覽第一份檔案的TF-IDF分數值。

python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)
使用詞袋運作LDA

使用gensim.models.LdaMulticore訓練LDA模型并将其儲存到“lda_model’

python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)

計算每個主題下出現的單詞及其相對權重。

python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)
python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)

圖3

你能用每個主題中的單詞及其相應的權重來區分不同的主題嗎?

利用TF-IDF 運作LDA
python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)

圖4

現在,你能用每個主題中的單詞及其相應的權重來區分不同的主題嗎?

評估利用LDA詞袋模型對樣本文檔進行分類的效果

檢查将測試檔案歸為哪一類。

python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)
python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)

圖5

測試文檔被模型精确歸類為可能性最大的那個主題,說明分類準确。

評估LDA TF-IDF模型對樣本文檔進行分類的效果
python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)

圖6

測試文檔被模型精确歸類為可能性最大的那個主題,說明分類準确。

隐含文檔上的測試模型
python實作背景模組化方法_利用Python實作主題模組化和LDA 算法(附連結)

圖7

源代碼可以在GitHub上找到。期待聽到您的回報或問題。

參考資料:

https://www.udacity.com/course/natural-language-processing-nanodegree--nd892

原文标題:利用Python實作主題模組化和LDA 算法原文連結:https://towardsdatascience.com/topic-modeling-and-latent-dirichlet-allocation-in-python-9bf156893c24