短文本主題建模方法

1. 引言

許多數(shù)據(jù)分析應(yīng)用都會(huì)涉及到從短文本中提取出潛在的主題,比如微博、短信、日志文件或者評論數(shù)據(jù)。一方面,提取出潛在的主題有助于下一步的分析,比如情感評分或者文本分類模型。另一方面,短文本數(shù)據(jù)存在一定的特殊性,我們無法直接用傳統(tǒng)的主題模型算法來處理它。短文本數(shù)據(jù)的主要難點(diǎn)在于:

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

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

本文將主要從實(shí)際操作的角度來介紹不同的短文本主題建模算法的優(yōu)缺點(diǎn),更多理論上的探討可以參考以下文章。

下文中我將自己創(chuàng)建一個(gè)數(shù)據(jù)集,并利用 Python scikit-learn 來擬合相應(yīng)的主題模型。

2. 主題發(fā)現(xiàn)模型

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

除了這三個(gè)模型外,還有其他一些模型也可以用來發(fā)現(xiàn)文檔的結(jié)構(gòu)。其中最重要的一個(gè)模型就是 KMeans 聚類模型,本文將對比 KMeans 聚類模型和其他主題模型的擬合效果。

首先,我們需要構(gòu)建文本數(shù)據(jù)集。本文將以四個(gè)自己構(gòu)建的文本數(shù)據(jù)集為例來構(gòu)建主題模型:

  • clearcut topics: 該數(shù)據(jù)集中只包含兩個(gè)主題—— "berger-lovers" 和 "sandwich-haters"。
  • unbalanced topics: 該數(shù)據(jù)集與第一個(gè)數(shù)據(jù)集包含的主題信息一致,但是此數(shù)據(jù)集的分布是有偏的。
  • semantic topics: 該數(shù)據(jù)集包含四個(gè)主題,分別是 "berger-lovers", "berger-haters","sandwich-lovers" 和 "sandwich-haters"。此外,該數(shù)據(jù)集中還包含了兩個(gè)潛在的主題 “food” 和 “feelings”。
  • noisy topics: 正如前文所說的,短文本數(shù)據(jù)中經(jīng)常存在多詞一義的現(xiàn)象,該數(shù)據(jù)集主要用于模擬兩個(gè)主題不同類型的文本。該數(shù)據(jù)集文本的篇幅小于其他三個(gè)數(shù)據(jù)集,這可以用來檢驗(yàn)?zāi)P褪欠衲軌蚝芎玫靥幚矶涛谋緮?shù)據(jù)。

首先,我們需要考慮下如何評估一個(gè)主題模型建模效果的好壞程度。多數(shù)情況下,每個(gè)主題中的關(guān)鍵詞有以下兩個(gè)特征:

  • 關(guān)鍵詞出現(xiàn)的頻率得足夠大
  • 足以區(qū)分不同的主題

一些研究表明:關(guān)鍵詞還需具備以下兩個(gè)特征:

  • 相同主題的文檔中關(guān)鍵詞共同出現(xiàn)的頻率應(yīng)該差不多
  • 每個(gè)主題中關(guān)鍵詞的語義應(yīng)該十分接近,比如水果主題中的 “apples” 和 “oranges”,或者情感主題中的 “l(fā)ove” 和 “hate”。

接下來,我們將介紹如何實(shí)現(xiàn)上述的四個(gè)模型——NMF, SVD, LDA 和 KMEANS。對于每個(gè)主題模型,我們將分別采用兩種文本向量化的方法—— TF(Term Frequence) 和 TFIDF(Term-frequence-inverse-document-frequence)。通常情況下,如果你的數(shù)據(jù)集中有許多詞語在多篇文檔中都頻繁出現(xiàn),那么你應(yīng)該選擇采用 TFIDF 的向量化方法。此時(shí)這些頻繁出現(xiàn)的詞語將被視為噪聲數(shù)據(jù),這些數(shù)據(jù)會(huì)影響模型的擬合效果。然而對于短文本數(shù)據(jù)而言,TF和TFIDF方法并沒有顯著的區(qū)別,因?yàn)槎涛谋緮?shù)據(jù)集中很難碰到上述情況。如何將文本數(shù)據(jù)向量化是個(gè)非常熱門的研究領(lǐng)域,比如 基于word embedding模型的方法——word2vec和doc2vec。

主題模型將選擇主題詞語分布中頻率最高的詞語作為該主題的關(guān)鍵詞,但是對于 SVD 和 KMEANS 算法來說,模型得到的主題詞語矩陣中既包含正向值也包含負(fù)向值,我們很難直接從中準(zhǔn)確地提取出主題關(guān)鍵詞。為了解決這個(gè)問題,我選擇從中挑出絕對數(shù)值最大的幾個(gè)詞語作為關(guān)鍵詞,并且根據(jù)正負(fù)值的情況加上相應(yīng)的標(biāo)簽,即對負(fù)向詞語加上 "^" 的前綴,比如"^bergers"。

2.1 SVD: 正交分解

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

對于 clearcut-topic 數(shù)據(jù)集來說,我們分別利用 TF 和 TFIDF方法來向量化文本數(shù)據(jù),并構(gòu)建 SVD 模型,模型的擬合結(jié)果如下所示。正如我們之前所提到的,SVD 模型所提取的關(guān)鍵詞中包含正負(fù)向詞語。為了簡單起見, 我們可以理解為該主題包含正向詞語,不包含負(fù)向的詞語。

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

由于模型的隨機(jī)效應(yīng),所以每次運(yùn)行模型得到的結(jié)果都會(huì)存在細(xì)微的差異。在 SVD 的擬合結(jié)果中我們發(fā)現(xiàn)發(fā)現(xiàn) Topic 3: bergers | ^hate | ^love | sandwiches 成功地提取了 “food” 的主題。


在上述的例子中,我們設(shè)定了過多的主題數(shù)量,這是因?yàn)榇蠖鄶?shù)時(shí)候我們無法事先知道某個(gè)文檔包含多少個(gè)主題。如果我們令主題個(gè)數(shù)等于2,可以得到下述結(jié)果:

當(dāng)我們在解釋 SVD 模擬的擬合結(jié)果時(shí),我們需要對比多個(gè)主題的信息。比如上述的模型擬合結(jié)果可以解釋成:數(shù)據(jù)集中文檔的主要差異是文檔中包含 “l(fā)ove bergers” 但不包含 “hate sandwiches”。

接下來我們將利用 SVD 來擬合 unbalanced topic 數(shù)據(jù)集,檢驗(yàn)該模型處理非平衡數(shù)據(jù)集的效果。

從下述結(jié)果中可以看出,SVD無法處理噪聲數(shù)據(jù),即無法從中提取出主題信息。


2.2 LDA: 根據(jù)詞語的共現(xiàn)頻率來提取主題

LDA 是最常用的主題提取模型之一,因?yàn)樵撃P湍軌蛱幚矶喾N類型的文本數(shù)據(jù),而且模擬的擬合效果非常易于解釋。

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

LDA 算法中主要有兩類參數(shù):

  • 每個(gè)主題中各個(gè)關(guān)鍵詞的分布參數(shù)
  • 每篇文檔中各個(gè)主題的分布參數(shù)

接下來我們將研究這些參數(shù)是如何影響 LDA 模型的計(jì)算過程,人們更多的是根據(jù)經(jīng)驗(yàn)來選擇最佳參數(shù)。

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

  • LDA 模型中可能存在重復(fù)的主題
  • 不同的主題可以共享相同的關(guān)鍵詞,比如單詞 “we” 在所有的主題中都出現(xiàn)了。

此外,對 LDA 模型來說,采用不同的文本向量化方法也會(huì)得到不同的結(jié)果。


在 sklearn 中,參數(shù) topic_word_prior 和 doc_topic_prior 分別用來控制 LDA 模型的兩類參數(shù)。

其中 topic_word_prior 的默認(rèn)值是(1/n_topics),這意味著主題中的每個(gè)詞語服從均勻分布。


選擇更小的 topic_word_prior 參數(shù)值可以提取粒度更小的主題信息,因?yàn)槊總€(gè)主題中都會(huì)選擇更少的詞語。

LDA 模型同樣無法很好地處理 noisy topics 數(shù)據(jù)集,從下述結(jié)果中可以看出 LDA 模型提取的主題相當(dāng)模糊:

2.3 NMF

NMF 可以視為 LDA模型的特例,從理論上來說,這兩個(gè)模型之間的聯(lián)系非常復(fù)雜。但是在實(shí)際應(yīng)用中,NMF 經(jīng)常被視為參數(shù)固定且可以獲得稀疏解的 LDA 模型。雖然 NMF 模型的靈活性不如 LDA 模型,但是該模型可以很好地處理短文本數(shù)據(jù)集。

另一方面,NMF 最大的缺點(diǎn)是擬合結(jié)果的不一致——當(dāng)我們設(shè)置過大的主題個(gè)數(shù)時(shí),NMF 擬合的結(jié)果非常糟糕。相比之下,LDA模型的擬合結(jié)果更為穩(wěn)健。

首先我們來看下 NMF 模型不一致的擬合結(jié)果。對于 clearcut topics 數(shù)據(jù)集來說,當(dāng)我們設(shè)置提取5個(gè)主題時(shí),其結(jié)果和真實(shí)結(jié)果非常相似:


但是當(dāng)我們增加主題個(gè)數(shù)時(shí)(遠(yuǎn)大于真實(shí)主題數(shù)2),NMF 模型將會(huì)得到一些奇異的結(jié)果:

相比之下,LDA模型的結(jié)果十分穩(wěn)健。

對于非平衡數(shù)據(jù)集,設(shè)置好合適的主題個(gè)數(shù),NMF 可以很好地提取出文檔中的主題信息。

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

2.4 KMeans

類似于 KMeans 模型的聚類方法能夠根據(jù)文檔的向量形式對其進(jìn)行分組。然而這個(gè)模型無法看成是主題模型,因?yàn)槲覀兒茈y解釋聚類結(jié)果中的關(guān)鍵詞信息。

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


2.5 尋找具有高語義相關(guān)的主題

最后,我將簡單比較下不同的主題提取模型。大多數(shù)情況下,我們傾向于根據(jù)文檔的主題分布情況對其進(jìn)行分組,并根據(jù)關(guān)鍵詞的分布情況來提取主題的信息。

大多數(shù)研究者都認(rèn)為詞語的語義信息是由其上下文信息所決定的,比如 “l(fā)ove” 和 “hate”可以看成是語義相似的詞語,因?yàn)檫@兩個(gè)詞都可以用在 “I _ apples” 的語境中。事實(shí)上,詞向量最重要的一個(gè)研究就是如何構(gòu)建詞語、短語或者文檔的向量形式,使得新的向量空間中仍然保留著語義信息。

找尋語義相同的詞語不同于計(jì)算詞語的共現(xiàn)頻率。從下述的結(jié)果中可以看出,大多數(shù)主題提取模型只涉及到詞語的共現(xiàn)頻率,并沒有考慮詞語的語義信息,只有 SVD 模型簡單涉及到語義信息。

需要注意的是,本文所采用的數(shù)據(jù)集是根據(jù)一定的規(guī)則隨機(jī)生成的,所以下述結(jié)果更多的是用于說明不同模型之間的區(qū)別:

3. 總結(jié)

  • 短文本數(shù)據(jù)集具有其獨(dú)特的性質(zhì),建模時(shí)需要特別注意。

  • 模型的選擇依賴于主題的定義(共現(xiàn)頻率高或者語義相似性)和主題提取的目的(文檔表示或者是異常值檢驗(yàn))

  • 我們可以首先采用 KMeans 或者 NMF 模型來快速獲取文檔的結(jié)構(gòu)信息:

    • 主題中詞語的分布情況
    • 文檔中主題的分布情況
    • 主題個(gè)數(shù)
    • 每個(gè)主題中詞語的個(gè)數(shù)
  • LDA 模型具有很好的靈活性,可以處理多種類型的文本數(shù)據(jù)。但是調(diào)參過程需要很好地理解數(shù)據(jù)結(jié)構(gòu),因此如果你想構(gòu)建 LDA 模型,你最好先構(gòu)建一個(gè)基準(zhǔn)模型(KMEANS 或 NMF)

  • SVD 模型可以很好地提取出文本的主要信息。比如 SVD 模型可以很好地分析半結(jié)構(gòu)化的數(shù)據(jù)(模板數(shù)據(jù)、截圖或者h(yuǎn)tml中的表格數(shù)據(jù))。

原文鏈接:http://nbviewer.jupyter.org/github/dolaameng/tutorials/blob/master/topic-finding-for-short-texts/topics_for_short_texts.ipynb

原文作者:dolaameng

譯者:Fibears

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容