1. 程式人生 > >R語言實現LDA主題模型分析知乎話題

R語言實現LDA主題模型分析知乎話題



這是一篇關於文字主題分析的應用實踐,主要嘗試聚焦幾個問題,什麼是LDA主題模型?如何使用LDA主題模型進行文字?我們將知乎上面的轉基因話題精華帖下面的提問分成六大主題進行實踐。

轉基因“風雲再起”

2017年5月18日璞谷塘悄然開張,這是小崔線上販賣非轉基因食品的網店,所賣的商品價格平均高於市場價5倍,小崔打著反轉基因的名號賣著反轉基因的食品,不由得令人想起了那些年小崔引發的轉基因爭議——

▲2015-3-25 崔永元和盧大儒教授的激烈爭辯

轉基因在國內外研究來說不是一個新話題,以中國為例,我們可以從新浪微指數的時序圖裡面發現,轉基因問題一直是大家廣泛討論的話題,而轉基因面臨的爭論主要和名人“崔永元”相關。

由於新浪微指數的時間限制,只能搜尋在2014年之後的關鍵詞資料,其中我們可以發現,在2015年之前,大家在微博上討論轉基因還是相當頻繁:

  • 在2013年底出現了一個最高峰。此次引發了網民的廣泛關注和討論的微博熱點是崔永元和方舟子之間關於轉基因的爭辯的升級,小崔和小方“互相問候了家人”;

  • 在2014年3月左右的一個小高潮就是崔永元的報告性影片《小崔考察轉基因》的推出;

  • 但是2015後我們可以發現,微博上的討論不如之前那樣劇烈,就連稍近一些的熱點:崔永元“大戰”盧大儒教授這一事件,似乎也沒有引發像之前那樣的廣泛微博關注。

網路上關於轉基因的討論,似乎主戰場已經從新浪微博進行了轉移。

網民關於轉基因的討論遷移去了哪裡?

比較幾個主流的新媒體平臺,可以發現:

LDA主題模型進行文字分析

LDA主題模型,即Latent Dirichlet Allocation,是自然語言處理(NLP)中對於隱藏主題進行挖掘分析的重要模型之一。之所以稱之為“隱藏”,是因為主題在這個模型中不必求出的變數,隱藏在“主題-詞語概率分佈”和“文件-主題概率分佈”裡,使用狄利克雷分佈求解最終概率分佈,確定潛在的主題,該模型由Blei提出。

▼如果我們用矩陣的乘法可以比較簡單地瞭解這個模型的初步機制,

可以認為,LDA主題模型在某種程度上模擬人腦對於語料的主題分類,內容分析過程中研究員所進行的類目建構過程,模型假定每篇文章中作者選擇的詞語都是通過以下這一過程:“以某種概率選擇了某個主題,並從這個主題中以一定概率選擇某個詞語”。所以我們對於語料進行LDA建模,就是從語料庫中挖掘出不同主題並進行分析,換言之,LDA提供了一種較為方便地量化研究主題的機器學習方法。

付諸實踐

1. 火車頭爬取知乎“轉基因”話題精華帖前10頁

▲爬取時間為2017年5月15日。本次研究共抓取197條知乎問題及問題建立的時間,問題共計4,655字,回答共計248,292個字。

2.分詞

▲用R對知乎問題進行切分,使用jiebaR對採集到的文字資料進行初步分詞,生成初步分詞文字。

由於本次分詞內容是較為專業化的生物領域,預設分詞系統詞典覆蓋範圍不夠,導致初步分詞結果不甚理想,筆者發現分詞結果中出現不少錯誤,比如無法正確分出相關詞彙:

  • “轉基因”被分成了“轉基”、“因”;

  • “盧大儒”容易被識別成“盧”、“大儒”;

  • “馬兜鈴內醯胺”被分成“馬”、“兜鈴”、“內醯胺”等

所以筆者對jiebaR中使用者分詞詞典(user.dict.utf8)添加了搜狗細胞詞庫中生物詞典以及搜狗詞典,使分詞文本里的有些固定詞語得以識別,同時也增加中文停用詞表(stop_word.utf8),能夠對虛詞(比如“的”、“了”、“吧”等)、助詞(比如“啊”、“呀”、“罷”等)、無義常用詞和標點符號進行過濾。搜狗細胞詞庫下載的詞典格式為.scel,但是匯入R中的詞典的格式需要為utf-8編碼的txt,所以使用R中的cidian包,對詞典格式進行轉化匯入。

3.資料探索

▲對list中的分詞用R中以Tf-Idf權重統計,我們再以wordcloud2包進行的視覺化詞雲展現,通過Tf-Idf權重統計,從詞雲中,我們可以發現知乎上面對於轉基因問題的討論比較多且具有一定區分度的詞語為“食品”、“崔永元”、“知乎”、“支援”或“反對”等,當然也存在“是否”這樣的詞語需要進行去除。

之後,使用tm包對分詞文字處理,對jieba分詞之後的list建立語料庫(corpus),並建立文件-單詞矩陣(DTM),在建立矩陣的過程中的約束條件(control)為該分詞出現的最小頻率(minDocFreq)是2,出現頻率過低沒有錄入的必要,分詞的長度(wordLengths)是2個字元以上(因為現代漢語中一般單字不太會有含義,所以此處刪去了長度為1個字元的分詞),每個矩陣中的元素是以詞頻(Tf)作為分詞的權重,這也是對文字特徵選擇的過程。

▲稀鬆矩陣的行變數為文件的編號,矩陣的列變數為語料庫中的分詞。

4.似然對數優化主題數目

LDA主題模型是無監督機器學習,使用最大似然估計進行最優化主題個數的選取

▲從似然估計的結果可以看出,當主題個數定為6的時候,似然估計數最大,即知乎問題分為6個主題的可能性比較大,所以LDA模型中的主題個數引數定為k = 6。

5.LDA主題模型建構

最後,使用topicmodels對已經分詞好的DTM進行LDA主題建模

▲將模型生成的六個主題中的前五個高頻詞取出,進行主題分析,我們可以發現最終我們得到了六個主題。

6.主題分析

▼將主題以年作為時間維度進行統計,再用Tableau進行視覺化,限於篇幅不在此展開

最後……

▲知乎也已經在做這方面的嘗試,比如說“知乎索引”,就是對一個話題下面的問題進行主題分類,但更多地,知乎僱傭人力去進行索引的編纂,而LDA主題模型可以在一定程度上分攤部分人工的工作,尤其是前期大量資料混雜的情況下,對於文字的主題的初分。