R語言中對文本數據進行主題模型topic modeling分析

2020-08-13     tecdat拓端

原標題:R語言中對文本數據進行主題模型topic modeling分析

原文連結:http://tecdat.cn/?p=4333

主題建模

在文本挖掘中,我們經常收集一些文檔集合,例如博客文章或新聞文章,我們希望將其分成自然組,以便我們可以分別理解它們。主題建模是對這些文檔進行無監督分類的一種方法,類似於對數字數據進行聚類,即使我們不確定要查找什麼,也可以找到自然的項目組。

潛在狄利克雷分配(LDA)是擬合主題模型特別流行的方法。它將每個文檔視為主題的混合體,並將每個主題看作是單詞的混合體。這允許文檔在內容方面相互「重疊」,而不是分離成離散的組,以反映自然語言的典型用法。

結合主題建模的文本分析流程圖。topicmodels包採用Document-Term Matrix作為輸入,並生成一個可以通過tidytext進行處理的模型,以便可以使用dplyr和ggplot2對其進行處理和可視化。

潛在狄利克雷分配

潛在Dirichlet分配是主題建模中最常用的算法之一。沒有深入模型背後的數學,我們可以理解它是由兩個原則指導的。

每個文檔都是主題的混合體。我們設想每個文檔可能包含來自幾個主題的文字,特別是比例。例如,在雙主題模型中,我們可以說「文檔1是90%的主題A和10%的主題B,而文檔2是30%的主題A和70%的主題B.」

每個主題都是詞彙的混合。例如,我們可以想像一個美國新聞的兩個主題模型,一個話題是「政治」,一個是「娛樂」。政治話題中最常見的詞語可能是「總統」,「國會」和「政府「,而娛樂主題可以由諸如」電影「,」電視「和」演員「之類的詞組成。重要的是,話題可以在話題之間共享; 像「預算」這樣的詞可能同時出現在兩者中。

LDA是一種同時估計這兩種情況的數學方法:查找與每個主題相關的單詞混合,同時確定描述每個文檔的主題混合。這個算法有很多現有的實現,我們將深入探討其中的一個。

  1. library(topicmodels)data("AssociatedPress")AssociatedPress
  2. : term frequency (tf)

我們可以使用LDA()topicmodels包中的函數設置k = 2來創建兩個主題的LDA模型。

實際上幾乎所有的主題模型都會使用更大的模型k,但我們很快就會看到,這種分析方法可以擴展到更多的主題。

此函數返回一個包含模型擬合完整細節的對象,例如單詞如何與主題關聯以及主題如何與文檔關聯。

# set a seed so that the output of the model is predictableap_lda <- LDA(AssociatedPress,k =2,control =list(seed =1234))ap_lda

擬合模型是「簡單部分」:分析的其餘部分將涉及使用整理tidytext軟體包中的函數來探索和解釋模型。

單詞主題機率

tidytext包提供了這種方法來提取每個主題的每個詞的機率,稱為ββ (「測試版」)。

## # A tibble: 20,946 x 3## topic term beta## ## 1 1 aaron 1.69e-12## 2 2 aaron 3.90e- 5## 3 1 abandon 2.65e- 5## 4 2 abandon 3.99e- 5## 5 1 abandoned 1.39e- 4## 6 2 abandoned 5.88e- 5## 7 1 abandoning 2.45e-33## 8 2 abandoning 2.34e- 5## 9 1 abbott 2.13e- 6## 10 2 abbott 2.97e- 5## # ... with 20,936 more rows

每個主題中最常見的術語

這種可視化讓我們了解從文章中提取的兩個主題。話題1中最常見的詞語包括「百分比」,「百萬」,「十億」和「公司」,這表明它可能代表商業或財務新聞。話題2中最常見的包括「總統」,「政府」和「蘇維埃」,表示這個話題代表政治新聞。關於每個主題中的單詞的一個重要觀察是,在這兩個主題中,諸如「新」和「人」等一些詞語是常見的。與「硬聚類」方法相反,這是話題建模的優勢:自然語言中使用的話題可能在話語方面存在一些重疊。

作為替代方案,我們可以認為有條款最大的區別在ββ在主題1和主題2之間。

## # A tibble: 198 x 4## term topic1 topic2 log_ratio## ## 1 administration 0.000431 0.00138 1.68## 2 ago 0.00107 0.000842 -0.339## 3 agreement 0.000671 0.00104 0.630## 4 aid 0.0000476 0.00105 4.46## 5 air 0.00214 0.000297 -2.85## 6 american 0.00203 0.00168 -0.270## 7 analysts 0.00109 0.000000578 -10.9## 8 area 0.00137 0.000231 -2.57## 9 army 0.000262 0.00105 2.00## 10 asked 0.000189 0.00156 3.05## # ... with 188 more rows

圖顯示了這兩個主題之間差異最大的詞。

圖β中差異最大的詞β 在主題2和主題1之間

我們可以看到,話題2中更常見的詞包括「民主」和「共和黨」等政黨,以及「dukakis」和「gorbachev」等政治家的名字。主題1的特點是「日元」和「美元」等貨幣以及「指數」,「價格」和「利率」等金融術語。這有助於確認算法確定的兩個主題是政治和財務新聞。

文檔 - 主題機率

除了將每個主題評估為單詞混合之外,LDA還將每個文檔建模為混合主題。我們可以檢查每個文檔的每個主題機率,稱為γγ(「伽瑪」) 。

## # A tibble: 4,492 x 3## document topic gamma## ## 1 1 1 0.248## 2 2 1 0.362## 3 3 1 0.527## 4 4 1 0.357## 5 5 1 0.181## 6 6 1 0.000588## 7 7 1 0.773## 8 8 1 0.00445## 9 9 1 0.967## 10 10 1 0.147## # ... with 4,482 more rows

這些值中的每一個都是該文檔中從該主題生成的單詞的估計比例。例如,該模型估計文檔1中單詞的大約24.8%是從主題1生成的。

我們可以看到,這些文檔中的許多文檔都是從兩個主題的混合中抽取出來的,但文檔6幾乎完全是從主題2中得出的,其中有一個γγ從主題1接近零。為了檢查這個答案,我們可以tidy()使用文檔術語矩陣,並檢查該文檔中最常見的詞。

## # A tibble: 287 x 3## document term count## ## 1 6 noriega 16.## 2 6 panama 12.## 3 6 jackson 6.## 4 6 powell 6.## 5 6 administration 5.## 6 6 economic 5.## 7 6 general 5.## 8 6 i 5.## 9 6 panamanian 5.## 10 6 american 4.## # ... with 277 more rows

根據最常見的詞彙,這似乎是一篇關於美國政府與巴拿馬獨裁者曼努埃爾諾列加之間關係的文章,這意味著該算法將其置於專題2(作為政治/國家新聞)是正確的。

文章來源: https://twgreatdaily.com/zh-tw/PioG6HMBLq-Ct6CZ9XTv.html