獨家 | 利用Python實現主題建模和LDA 演算法(附連結)

語言: CN / TW / HK


作者:Susan Li翻譯:陳之炎校對:陳漢青

本文約1900字,建議閱讀5分鐘在這篇文章,我們將LDA應用於一組文件,並將文件按照主題分類。

標籤:LDA 演算法

主題建模是一種用於找出文件集合中抽象“主題”的統計模型。LDA(Latent Dirichlet Allocation)是主題模型的一個示例,用於將文件中的文字分類為特定的主題。LDA演算法為每一個文件構建出一個主題,再為每一個主題新增一些單詞,該演算法按照Dirichlet分佈來建模。

那便開始吧!

資料

在這裡將使用到的資料集是15年內釋出的100多萬條新聞標題的列表,可以從Kaggle下載。

先來看看資料。

1048575


圖1

資料預處理

執行以下步驟:

  • 標記化——將文字分成句子,將句子分成單詞,把單詞變為小寫,去掉標點符號。

  • 刪除少於3個字元的單詞。

  • 刪除所有的句號。

  • 詞形還原——將第三人稱的單詞改為第一人稱,將過去和未來時態中的動詞改為現在時。

  • 詞根化——將單詞簡化為詞根形式。

載入gensim 和nltk庫

[nltk_data] Downloading package wordnet to[nltk_data] 
C:\Users\SusanLi\AppData\Roaming\nltk_data…[nltk_data] Package wordnet is already up-to-date!
True

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

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

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

圖2

資料集的詞袋

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

0 broadcast
1 communiti
2 decid
3 licenc
4 awar
5 defam
6 wit
7 call
8 infrastructur
9 protect
10 summit


Gensim filter_extremes

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

  • 在少於15個文件中出現(絕對數)或

  • 在總語料庫中佔比分數超過0.5

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

Gensim doc2bow

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

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

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

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分數值。

[(0, 0.5907943557842693),
(1, 0.3900924708457926),
(2, 0.49514546614015836),
(3, 0.5036078441840635)]

使用詞袋執行LDA

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

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

圖3

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

利用TF-IDF 執行LDA 

圖4

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

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

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

[‘rain’, ‘help’, ‘dampen’, ‘bushfir’]

 

圖5

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

評估LDA TF-IDF模型對樣本文件進行分類的效果

圖6

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

隱含文件上的測試模型

圖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

編輯:王菁

校對:汪雨晴

譯者簡介

陳之炎,北京交通大學通訊與控制工程專業畢業,獲得工學碩士學位,歷任長城計算機軟體與系統公司工程師,大唐微電子公司工程師,現任北京吾譯超群科技有限公司技術支援。目前從事智慧化翻譯教學系統的運營和維護,在人工智慧深度學習和自然語言處理(NLP)方面積累有一定的經驗。業餘時間喜愛翻譯創作,翻譯作品主要有:IEC-ISO 7816、伊拉克石油工程專案、新財稅主義宣言等等,其中中譯英作品“新財稅主義宣言”在GLOBAL TIMES正式發表。能夠利用業餘時間加入到THU 資料派平臺的翻譯志願者小組,希望能和大家一起交流分享,共同進步。

翻譯組招募資訊

工作內容:需要一顆細緻的心,將選取好的外文文章翻譯成流暢的中文。如果你是資料科學/統計學/計算機類的留學生,或在海外從事相關工作,或對自己外語水平有信心的朋友歡迎加入翻譯小組。

你能得到:定期的翻譯培訓提高志願者的翻譯水平,提高對於資料科學前沿的認知,海外的朋友可以和國內技術應用發展保持聯絡,THU資料派產學研的背景為志願者帶來好的發展機遇。

其他福利:來自於名企的資料科學工作者,北大清華以及海外等名校學生他們都將成為你在翻譯小組的夥伴。

點選文末“閱讀原文”加入資料派團隊~

轉載須知

如需轉載,請在開篇顯著位置註明作者和出處(轉自:資料派ID:DatapiTHU),並在文章結尾放置資料派醒目二維碼。有原創標識文章,請傳送【文章名稱-待授權公眾號名稱及ID】至聯絡郵箱,申請白名單授權並按要求編輯。

釋出後請將連結反饋至聯絡郵箱(見下方)。未經許可的轉載以及改編者,我們將依法追究其法律責任。


 

點選“閱讀原文”擁抱組織