標籤:

短文本主題建模方法

1. 引言

許多數據分析應用都會涉及到從短文本中提取出潛在的主題,比如微博、簡訊、日誌文件或者評論數據。一方面,提取出潛在的主題有助於下一步的分析,比如情感評分或者文本分類模型。另一方面,短文本數據存在一定的特殊性,我們無法直接用傳統的主題模型演算法來處理它。短文本數據的主要難點在於:

  • 短文本數據中經常存在多詞一義的現象[1],比如 「dollar」, "$", "$$", "fee", "charges" 擁有相同的含義,但是受限於文本篇幅的原因,我們很難直接從短文本數據中提取出這些信息。
  • 與長文檔不同的地方在於,短文本數據中通常只包含一個主題。這看似很好處理,但是傳統的主題模型演算法都假設一篇文檔中包含多個主題,這給建模分析帶來了不小的麻煩。

主題提取模型通常包含多個流程,比如文本預處理、文本向量化、主題挖掘和主題表示過程。每個流程中都有多種處理方法,不同的組合方法將會產生不同的建模結果。

本文將主要從實際操作的角度來介紹不同的短文本主題建模演算法的優缺點,更多理論上的探討可以參考以下文章。

下文中我將自己創建一個數據集,並利用 Python scikit-learn 來擬合相應的主題模型。

2. 主題發現模型

本文主要介紹三個主題模型, LDA(Latent Dirichlet Allocation), NMF(Non-Negative Matrix Factorization)和SVD(Singular Value Decomposition)。本文主要採用 scikit-learn 來實現這三個模型。

除了這三個模型外,還有其他一些模型也可以用來發現文檔的結構。其中最重要的一個模型就是 KMeans 聚類模型,本文將對比 KMeans 聚類模型和其他主題模型的擬合效果。

首先,我們需要構建文本數據集。本文將以四個自己構建的文本數據集為例來構建主題模型:

  • clearcut topics: 該數據集中只包含兩個主題—— "berger-lovers" 和 "sandwich-haters"。
  • unbalanced topics: 該數據集與第一個數據集包含的主題信息一致,但是此數據集的分布是有偏的。
  • semantic topics: 該數據集包含四個主題,分別是 "berger-lovers", "berger-haters","sandwich-lovers" 和 "sandwich-haters"。此外,該數據集中還包含了兩個潛在的主題 「food」 和 「feelings」。
  • noisy topics: 正如前文所說的,短文本數據中經常存在多詞一義的現象,該數據集主要用於模擬兩個主題不同類型的文本。該數據集文本的篇幅小於其他三個數據集,這可以用來檢驗模型是否能夠很好地處理短文本數據。

首先,我們需要考慮下如何評估一個主題模型建模效果的好壞程度。多數情況下,每個主題中的關鍵詞有以下兩個特徵:

  • 關鍵詞出現的頻率得足夠大
  • 足以區分不同的主題

一些研究表明:關鍵詞還需具備以下兩個特徵:

  • 相同主題的文檔中關鍵詞共同出現的頻率應該差不多
  • 每個主題中關鍵詞的語義應該十分接近,比如水果主題中的 「apples」 和 「oranges」,或者情感主題中的 「love」 和 「hate」。

接下來,我們將介紹如何實現上述的四個模型——NMF, SVD, LDA 和 KMEANS。對於每個主題模型,我們將分別採用兩種文本向量化的方法—— TF(Term Frequence) 和 TFIDF(Term-frequence-inverse-document-frequence)。通常情況下,如果你的數據集中有許多詞語在多篇文檔中都頻繁出現,那麼你應該選擇採用 TFIDF 的向量化方法。此時這些頻繁出現的詞語將被視為雜訊數據,這些數據會影響模型的擬合效果。然而對於短文本數據而言,TF和TFIDF方法並沒有顯著的區別,因為短文本數據集中很難碰到上述情況。如何將文本數據向量化是個非常熱門的研究領域,比如 基於word embedding模型的方法——word2vec和doc2vec。

主題模型將選擇主題詞語分布中頻率最高的詞語作為該主題的關鍵詞,但是對於 SVD 和 KMEANS 演算法來說,模型得到的主題詞語矩陣中既包含正向值也包含負向值,我們很難直接從中準確地提取出主題關鍵詞。為了解決這個問題,我選擇從中挑出絕對數值最大的幾個詞語作為關鍵詞,並且根據正負值的情況加上相應的標籤,即對負向詞語加上 "^" 的前綴,比如"^bergers"。

2.1 SVD: 正交分解

sklearn 中的 truncated SVD implementation 類似於主成分分析演算法,它們都試圖利用正交分解的方法選擇出具有最大方差的變數信息。

對於 clearcut-topic 數據集來說,我們分別利用 TF 和 TFIDF方法來向量化文本數據,並構建 SVD 模型,模型的擬合結果如下所示。正如我們之前所提到的,SVD 模型所提取的關鍵詞中包含正負向詞語。為了簡單起見, 我們可以理解為該主題包含正向詞語,不包含負向的詞語。

比如,對於 "Topic 1: bergers | ^hate | love | ^sandwiches" 來說,該文本的主題中包含 "love bergers" 但是不包含 "hate sandwiches"。

由於模型的隨機效應,所以每次運行模型得到的結果都會存在細微的差異。在 SVD 的擬合結果中我們發現發現 Topic 3: bergers | ^hate | ^love | sandwiches 成功地提取了 「food」 的主題。

在上述的例子中,我們設定了過多的主題數量,這是因為大多數時候我們無法事先知道某個文檔包含多少個主題。如果我們令主題個數等於2,可以得到下述結果:

當我們在解釋 SVD 模擬的擬合結果時,我們需要對比多個主題的信息。比如上述的模型擬合結果可以解釋成:數據集中文檔的主要差異是文檔中包含 「love bergers」 但不包含 「hate sandwiches」。

接下來我們將利用 SVD 來擬合 unbalanced topic 數據集,檢驗該模型處理非平衡數據集的效果。

從下述結果中可以看出,SVD無法處理雜訊數據,即無法從中提取出主題信息。

2.2 LDA: 根據詞語的共現頻率來提取主題

LDA 是最常用的主題提取模型之一,因為該模型能夠處理多種類型的文本數據,而且模擬的擬合效果非常易於解釋。

直觀上來看,LDA 根據不同文檔中詞語的共現頻率來提取文本中潛在的主題信息。另一方面,具有相同主題結構的文本之間往往非常相似,因此我們可以根據潛在的主題空間來推斷詞語之間的相似性和文檔之間的相似性。

LDA 演算法中主要有兩類參數:

  • 每個主題中各個關鍵詞的分布參數
  • 每篇文檔中各個主題的分布參數

接下來我們將研究這些參數是如何影響 LDA 模型的計算過程,人們更多的是根據經驗來選擇最佳參數。

與 SVD 模型不同的是,LDA 模型所提取的主題非常好解釋。以 clearcut-topics 數據集為例,LDA 模型中每個主題都有明確的關鍵詞,它和SVD主要有以下兩個區別:

  • LDA 模型中可能存在重複的主題
  • 不同的主題可以共享相同的關鍵詞,比如單詞 「we」 在所有的主題中都出現了。

此外,對 LDA 模型來說,採用不同的文本向量化方法也會得到不同的結果。

在 sklearn 中,參數 topicwordprior 和 doctopicprior 分別用來控制 LDA 模型的兩類參數。

其中 topicwordprior 的默認值是(1/ntopics),這意味著主題中的每個詞語服從均勻分布。

選擇更小的 topicword_prior 參數值可以提取粒度更小的主題信息,因為每個主題中都會選擇更少的詞語。

LDA 模型同樣無法很好地處理 noisy topics 數據集,從下述結果中可以看出 LDA 模型提取的主題相當模糊:

2.3 NMF

NMF 可以視為 LDA模型的特例,從理論上來說,這兩個模型之間的聯繫非常複雜。但是在實際應用中,NMF 經常被視為參數固定且可以獲得稀疏解的 LDA 模型。雖然 NMF 模型的靈活性不如 LDA 模型,但是該模型可以很好地處理短文本數據集。

另一方面,NMF 最大的缺點是擬合結果的不一致——當我們設置過大的主題個數時,NMF 擬合的結果非常糟糕。相比之下,LDA模型的擬合結果更為穩健。

首先我們來看下 NMF 模型不一致的擬合結果。對於 clearcut topics 數據集來說,當我們設置提取5個主題時,其結果和真實結果非常相似:

但是當我們增加主題個數時(遠大於真實主題數2),NMF 模型將會得到一些奇異的結果:

相比之下,LDA模型的結果十分穩健。

對於非平衡數據集,設置好合適的主題個數,NMF 可以很好地提取出文檔中的主題信息。

值得注意的是,NMF 是本文提到的四個模型中唯一一個能夠較好地處理 noisy topics 數據的模型:

2.4 KMeans

類似於 KMeans 模型的聚類方法能夠根據文檔的向量形式對其進行分組。然而這個模型無法看成是主題模型,因為我們很難解釋聚類結果中的關鍵詞信息。

但是如果結合 TF或TFIDF方法,我們可以將 KMeans 模型的聚類中心視為一堆詞語的概率組合:

2.5 尋找具有高語義相關的主題

最後,我將簡單比較下不同的主題提取模型。大多數情況下,我們傾向於根據文檔的主題分布情況對其進行分組,並根據關鍵詞的分布情況來提取主題的信息。

大多數研究者都認為詞語的語義信息是由其上下文信息所決定的,比如 「love」 和 「hate」可以看成是語義相似的詞語,因為這兩個詞都可以用在 「I _ apples」 的語境中。事實上,詞向量最重要的一個研究就是如何構建詞語、短語或者文檔的向量形式,使得新的向量空間中仍然保留著語義信息。

找尋語義相同的詞語不同於計算詞語的共現頻率。從下述的結果中可以看出,大多數主題提取模型只涉及到詞語的共現頻率,並沒有考慮詞語的語義信息,只有 SVD 模型簡單涉及到語義信息。

需要注意的是,本文所採用的數據集是根據一定的規則隨機生成的,所以下述結果更多的是用於說明不同模型之間的區別:

3. 總結

  • 短文本數據集具有其獨特的性質,建模時需要特別注意。
  • 模型的選擇依賴於主題的定義(共現頻率高或者語義相似性)和主題提取的目的(文檔表示或者是異常值檢驗)
  • 我們可以首先採用 KMeans 或者 NMF 模型來快速獲取文檔的結構信息:

    • 主題中詞語的分布情況
    • 文檔中主題的分布情況
    • 主題個數
    • 每個主題中詞語的個數

  • LDA 模型具有很好的靈活性,可以處理多種類型的文本數據。但是調參過程需要很好地理解數據結構,因此如果你想構建 LDA 模型,你最好先構建一個基準模型(KMEANS 或 NMF)

  • SVD 模型可以很好地提取出文本的主要信息。比如 SVD 模型可以很好地分析半結構化的數據(模板數據、截圖或者html中的表格數據)。

weixin.qq.com/r/WkMCGqv (二維碼自動識別)

原文鏈接:nbviewer.jupyter.org/gi

原文作者:dolaameng

譯者:Fibears

推薦閱讀:

Scala 包、類、特質和泛型
「這一夜,數據死了」——總統大選給數字時代的一堂課
「現有人工智慧都是二流的」
全域旅遊時代帶來全域數據,行業自身得有桿秤
谷歌大神帶你十分鐘看懂TensorFlow

TAG:大数据 |