1. 程式人生 > >關於評論話題挖掘的研究及其實現程式碼(一)LDA

關於評論話題挖掘的研究及其實現程式碼(一)LDA

引言

在 2016年中,我們參加了一個由廈門信研院舉辦的大資料比賽。當時,我們拿到的題目為影迷關注點分析。資料是來自於微博與豆瓣的影迷評論資料,其資料量達600多萬條評論資料,分別對應於2000多部不同的電影。我們的想法是將影迷關注點分析儘量往評論話題挖掘模型中靠攏。

LDA話題模型

在一開始的時候,我們打算採用LDA話題識別模型。LDA( Latent Dirichlet Allocation) 主題模型由 Blei 於 2003 年提出,是在概率隱性語義索引 ( probabilistic Latent Semantic Indexing, pLSI) 上擴充套件得到的三層貝葉斯概率模型,是文件生成概率模型。LDA 模型包含詞項、主題和文件三層結構,其基本思想是把文件看成其隱含主題的混合,而每個主題則表現為跟該主題相關的詞項的概率分佈。

詳細的實現過程我放在了百度文庫當中,百度文庫連結
實現的程式碼放置我github上:LDAgithub連結
主要是通過python實現,分詞工具為結巴分詞。
關於LDA的原理介紹,我極力推薦這份部落格:LDA原理通俗講解
實現的效果是如圖所示:
python的LDA實現效果

利用LDA模型挖掘影迷關注點

由於python的程式碼無法處理上萬條的評論,所以我轉採用了spark的mllib中的LDA模型。經過一番周折,我總算實現出來。

k:主題數,或者聚類中心數
DocConcentration:文章分佈的超引數
TopicConcentraion:主題分佈的超引數
MaxIterations:迭代次數
Seed:隨即種子

雖然實現的出來,但實現的效果卻讓我大失所望。前k個熱門話題中的關鍵詞幾乎一模一樣,其效果圖如下:
spark中的LDA實現效果

原因分析

我反覆審閱自己的程式碼,覺得應該是ok的。後來深思了一下,我認為最大的原因是我們獲取的電影評論屬於短評類,字數一般不會超過200字。單個電影的所有評論詞語的當中有極高的關聯性程度,一個詞語出現在多個評論的情況很普遍。而LDA本身就是基於概率統計模型,因此,一些高頻詞語或者具有中心性的詞語在不同話題中的重要性排位具有非常大的噪音影響,從而導致模型出現的效果基本是中心詞涵蓋了所有的話題。

後記

可以說,我們的努力並沒有得到我們當初想要的結果。當然,如果對LDA模型進一步地調優,如過濾掉一些中心性詞語,效果應該得到不錯的提升。但是我覺得LDA在本次專案中並沒有很大的優勢。於是乎,我就將評論挖掘模型轉變成為詞圖切分的問題。從圖論的研究角度來挖掘出評論中話題。該嘗試收穫了巨大的成功,也幫助我們獲得了比賽的第一名。

我將會在下一份部落格中詳細說明,關於評論話題挖掘的研究及其實現程式碼(二)詞圖切分