獨家 | 利用Python實現主題建模和LDA 算法(附鏈接)



作者: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】至聯繫郵箱,申請白名單授權並按要求編輯。

發佈後請將鏈接反饋至聯繫郵箱(見下方)。未經許可的轉載以及改編者,我們將依法追究其法律責任。


 

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章