R語言文字探勘&語意分析applying on MOOC-實作

林
Jul 25, 2017 · 6 min read

大數據(big data)的技術從大概4、5年前開始被極力鼓吹,到有些各個其他領域開始注重這樣的技術應用,如資料新聞學、客評經濟等等。如果真的要實作資料新聞學,對記者來說的難度不低,畢竟要去抓取大範圍的數據或資料,進一步整理篩選,再來用電腦輔助分析,沒有一點程式語言的底子確實是窒礙難行。但是新聞從業人員說故事的能力也不容被小覷。

一開始筆者是在GitHub上逛到微博的爬蟲程式碼(可點擊這裡),經過一些本地電腦的調整與安裝套件後總算可行了,這樣就解決了資料來源的問題。(如果想研究Facebook呢?可試試Netvizz、或是R裡的Rfacebook套件)

再來就是這麼多的文字資料,我們要如何進行分析,用什麼角度分析?主要參考了陳嘉葳在2014寫的推廣PPT以及chengjunwang對於宋詞的文本分析採取的方法(還有網路上眾多其他資源,基本的Google搜尋可以知道其他人如何解決R語言進行時的編碼問題)。參閱過兩位前輩的方法,可以得知R語言透過套件的指令操作,可以幫我們達成以下幾個目的:

※詞彙頻率

※文字雲

※詞彙重要程度(TF-IDF)

※詞彙彼此間重要程度關聯

※共現詞組

※語意主題多樣性以及視覺化

其中詞彙頻率與文字雲都有現成的網路工具可以完成,如果只是想完成前兩個目的可以不用親自操作到R語言。而TF-IDF是種平衡浮濫字詞如常見的連接詞:「的」、「在」等等的一種計算方式,他的計算可以找出在資料文本裡詞頻不是那麼高,但的確在某個時間範圍或是部分文本裡有出現的特殊詞彙。然後透過TF-IDF計算後的權重,可以再依據R語言裡的dendrogram作圖方式,將權重值相似的cluster在一起,在視覺上可以更直覺清楚資料的群聚效應。

共現詞組(co-occurrence)以往在R語言裡會透過將字詞切割斷詞後後填入矩陣,透過矩陣間關聯度的計算來達到發現與某一字詞關聯性最高,也就是最常一起出現的字詞有哪些,稱為findAssocia函數的使用。但這邊另闢蹊徑使用的是Appriori的關聯分析。再來是LDA裡面Gibbs的取樣方式,在這麼多的文本裡面讓電腦去辨別最佳主題數量為多少,再來決定各個主題應該要呈現的詞彙數量,然後讓這些字詞連成一個線。各個主題有可能會透過共同的字詞而相交,那麼相交的字詞就是這個文本資料裡相對重要性高、使用程度高的字詞。

最後我會利用Google的Word2vec開源套件來辨別文字資料前後期的趨勢變化。這部分屬於機器學習領域的應用實作。話不多說,就開始R語言程式碼的範例。


這個部分是TF-IDF的操作,前兩行指令是將需要用到的套件匯進來(安裝過後,重新開啟工作專案皆要輸入)。第4行是將整理好的文字資料指定到csv。最後一行則是將分析過後的結果寫到指定目錄。

分析過後的結果就是一個EXCEL檔,像是:


再來是這個稱為SVD,奇異值分解的語意分析技術。這個技術可以應用在電腦協助處理的文本分類,若是應用在社群媒體,透過R語言裡ggplot的繪圖套線呈現出分類結果,可以知道第幾號貼文與其他貼文在點狀分布象限圖上距離較遠,那麼較表示這號貼文談論的主題與其他貼文比較不同。若是貼文數量很多,從他們的點狀群聚分布,可以知道這個文本範圍內的資料,談論的主題多樣性高不高。

以下第一張圖是MOOC學院的分析結果,要有其他的文本研究對象,且文本數量相近會比較好知道分析結果:

與第二張圖學堂在線比對可知道學堂在線的語意分布較廣,學堂在線幾乎是無所不聊,回頭去看他貼文內容可以娛樂性也包含了時事新聞:


這部分是依據第一部份TF-IDF的權重值來做dendrogram的圖示。可以注意到的是第20行 removeSparseTerms這個函數,可以在全部資料構成的矩陣中,手動剔除一些權重值較低的字詞,這邊設為0.95出來的圖示適中,文字不會太擁擠。若0.9又會太稀疏,這邊需要依據資料狀況自行判斷。

以下可以看到皮鞭一詞的使用在MOOC學院裡,電腦判別它的重要性程度高,因此在最上方,最下方不重要的是那些網址字符。(dendrogram的圖可以搜尋其他資源,得知如何看圖。應用在巨量文字資料這個方式不是那麼合適,因資料量太多,在視覺化上無法窮盡。)


這個部分是依據關聯規則Apriori來做共現詞組分析。第10行將一些無意義的字詞寫成一個函數,把這些字詞先排除再來做圖示。第22行可以調整支持度(supp),篩選出來的圖示就會不一樣。

以下是圖示結果,可以發現MOOC學院在提到MOOC時會提到果殼網、心理學,以及其他平台業者如:學堂在線(這邊因為簡體字抓回來會先經過word轉成繁體所以呈現「學堂線上」)、FutureLearn:


這部分屬於LDA(隱含狄利克雷分布)的程式碼,沒有變動太多,只修改定義抓取每個主題的前五個字詞,其他是直接從chengjunwang的Blog上抓過來的,而主題數量辨別也可以參考chengjunwang的Blog。應用最常用的Gibbs取樣方式,主題分類結果如下:

以上實作方式如有問題可以留言,善盡個人能力範圍內交流解決,希望可以達到推廣R語言使用的目的。
而Word2vec的實作,請先等待一陣子。近日忙碌呀......

林

Written by

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade