標籤:

主題模型初學者指南[Python]

引言

近年來湧現出越來越多的非結構化數據,我們很難直接利用傳統的分析方法從這些數據中獲得信息。但是新技術的出現使得我們可以從這些輕易地解析非結構化數據,並提取出重要信息。

主題模型是處理非結構化數據的一種常用方法,從名字中就可以看出,該模型的主要功能就是從文本數據中提取潛在的主題信息。主題模型不同於其他的基於規則或字典的搜索方法,它是一種無監督學習的方法。

主題可以由語料庫中的共現詞項所定義,一個好的主題模型的擬合結果應該如下所示——「health」、「doctor」、「patient」、「hospital」構成醫療保健主題,而「farm」、「crops」、「wheat」則構成農業主題。

主題模型的適用領域有:文檔聚類、信息提取和特徵選擇。比如,紐約時報利用主題模型的結果來提升文章推薦引擎的功能。許多專家將主題模型應用到招聘領域中,利用主題模型來提取工作要求中的潛在信息,並用模型的擬合結果來匹配候選人。此外,主題模型還被用於處理大規模的非結構化數據,如郵件、顧客評論和用戶社交數據。

如果你不熟悉主題模型的話,那麼本文將告訴你主題模型的原理以及如何利用Python來構建主題模型。

目錄

  • LDA(Latent Dirichlet Allocation) 模型
    • LDA 模型的參數
  • Python 實現過程
    • 數據準備
    • 數據清洗與預處理
    • 計算文檔詞頻矩陣
    • 構建 LDA 模型
    • 擬合結果
  • 建議
    • 頻數過濾法
    • 標記過濾法
    • Batch Wise LDA
  • 特徵選擇

LDA 模型

我們可以用多種方法來處理文本數據,比如 TF 和 IDF 方法。LDA模型是最流行的主題模型,我們接下來將詳細介紹 LDA 模型。

LDA 模型假設文檔是由一系列主題構成的,然後再從這些主題中依據相應的概率分布生成詞語。給定一個文檔數據集,LDA 模型主要用於識別文檔中的主題分布情況。

LDA 模型是一種矩陣分解技術,在向量空間模型中,任何語料都能被表示成一個文檔詞頻矩陣。如下所示,矩陣中包含 N 篇文檔,M 個詞語,矩陣中的數值表示詞語在文檔中出現的頻率。

LDA 模型將上述的文檔詞頻矩陣轉換成兩個低維的矩陣—— M1 和 M2。其中 M1 表示文檔主題矩陣,M2 表示主題詞語矩陣,它們的維度分別是 N*K 和 K*M,K 表示文檔中主題的個數,M 表示詞語的數量。

需要注意的是,上述兩個矩陣提供了文檔主題和主題詞語的初始分布情況,LDA 模型通過抽樣的方法來更新這兩個矩陣。該模型通過更新文檔中每個詞語的主題歸屬情況來調整模型的參數值 p1 和 p2,其中 $p1 = p(frac{topict}{documentd})$,$p2 = p(frac{wordw}{topict})$。經過一系列的迭代計算後,LDA 模型達到收斂狀態,此時我們即可得到一組最佳參數值。

LDA 模型的參數

超參數 alpha 和 beta —— alpha 表示文檔—主題密度,beta 則表示主題—詞語密度,其中 alpha 值越大表示文檔中包含更多的主題,而更大的 beta 值則表示主題中包含更多的詞語。

主題個數——我們可以利用 KL 散度得分來計算最佳的主題個數,由於這部分內容過於學術,我將不詳細介紹這些內容,有興趣的讀者可以參閱相關文獻(On Finding the Natural Number of Topics with Latent Dirichlet Allocation: Some Observations)。

主題中的詞數——這個參數取決於你的真實需求,如果你的目標是提取主題信息,那麼你最好選擇較多的詞語。如果你的目標是提取特徵,那麼你應該選擇較少的詞項。

迭代次數—— LDA 演算法的迭代次數

Python 實現

數據準備

以下是一些示例數據:

數據清洗與預處理

數據清洗是文本建模分析過程中的一個重要環節,在這個過程中我們將移除標點符號、停止詞並規整數據集:

計算文檔詞頻矩陣

構建 LDA 模型

擬合結果

建議

主題模型的擬合結果完全取決於語料庫中的特徵項,而語料是由一個稀疏的文檔詞頻矩陣所構成的。降低該矩陣的維度可以提升主題模型的擬合結果,根據我的個人經驗,主要有以下幾個降維方法:

頻數過濾法

我們可以按照詞語的頻數進行排序,然後保留頻數較高的詞語並將頻數較低的詞語剔除掉。此外我們還可以藉助探索性分析的方法來決定如何設置閾值。

標記過濾法

通常情況下,標記過濾法的效果優於頻數過濾法。主題模型通過詞語的共現情況來反映主題信息,然而在每個主題中並不是所有的詞語都是同等重要的。我們可以將這些無關緊要的詞語剔除掉,提升模型的擬合效果。

Batch Wise LDA

為了提取出文檔中最重要的主題信息,我們可以將語料庫分割成一系列固定大小的子集。然後我們可以對每個子集數據構建多個 LDA 模型,出現次數最多的主題就是該文檔中最重要的主題信息。

特徵選擇

有些時候,我們還可以利用 LDA 模型來選擇特徵。以文本分類問題為例,如果訓練集中包含多個類別的文檔,我們可以首先構建 LDA 模型,然後剔除掉不同類別文檔中共同出現的主題信息,剩餘的特徵即為有助於提升文本分類模型的準確率。

結語

到此為止,我們已經介紹完主題模型了,我希望本文能夠幫你了解如何處理文本數據。如果你想加深對主題模型的理解,那麼我建議你最好親自練習下本文的代碼並檢查模型的擬合結果。

如果你覺得本文對你有幫助的話,你可以將此文分享給你的朋友。

***

原文鏈接:analyticsvidhya.com/blo

原文作者:Shivam Bansal

譯者:Fibears


推薦閱讀:

學會最簡單的資料庫|看完這7招就夠了
Python 高級編程:理解生成器
Python Generator漫談
在 Pycom 使用 Python + Micropython + MQTT 進行物聯網編程
Python 字元編碼的二三事

TAG:Python |