人民日報的文章普遍為長篇大論,包含的訊息量多且雜。我們可以將文章內容簡化,抽離出文章的主題,便於後續的分析與比較。我們假設文章由不同的主題所構成,人民日報的一篇報導,可能涉及效忠黨國、國際關係、經濟發展、基礎建設等諸多面向,這些面向就是我們所謂的主題。一篇文章可能包括多個主題,這些主題不會平均分配,總會偏某個主題多些,另一個主題少些。傳統的研究,用人工的方式區分主題,這樣做不僅曠日費時,而且經常出錯,文字探勘則藉數學演算法之助,迅速找到文章的主題,並決定文章中主題的佔比。
在討論主題分析的具體操作之前,必須先瞭解「自然語言處理」。自然語言處理將文字資料轉換為數字資料的方法。前幾章字詞的計算,字或詞只是一個符號或代碼,符號、代碼本身沒有意義。自然語言處理就是要賦予這些沒有意義的東西「意義」。基本的做法是讓字詞變成一個高維度的向量。向量有長度、彼此之間有夾角,向量化之後,文字變成數字,可以進行數學計算,例如相似性、降維、分佈、核心點、平均、分群、分類等。
向量化有很多做法,最傳統的做法是製作「字詞-文章」向量。亦即做一個矩陣,列(rows)為每一個字詞,欄(columns)為每一篇文章,這是一個很大的矩陣,例如人民日報有二十萬個字詞,有兩百萬篇文章,這就是一個兩百萬乘兩萬的矩陣,矩陣內的元素,代表字詞在文章中出現的個數。如此,每個列代表某個字詞的向量(term vector),維度為兩百萬。同樣地,我們也可以製作「文章-字詞」向量,每個列代表某篇文章的向量(document vector),維度為二十萬。如此,文章的向量與字詞的向量就被定義出來了。
文章的屬性,由字詞依不同的權重所構成;同樣地,字詞的屬性由文章依不同的權重所構成,向量中的數字愈大,代表相對應的字詞或文章愈重要。不過,這種說法有問題。舉例來說,一個文章矩陣,某個詞A廣泛的出現在許多文件中,而另一個詞B卻只出現在少數特定的幾份文件中,而查考某一篇文章的向量,發現 A 與 B 出現的次數一樣多,我們可能會認為這兩個字詞有同樣的重要性。但事實不然,B更具有代表性,詞 A 可能是一些沒有意義的虛字,例如「的」、「了」、「而且」、「以及」、「然而」、「亦即」、「當今」等,這種字詞在每篇文章都出現,但無助於瞭解文意。這個時候就要使用文字加權的技巧了。常用的方法是 TF-IDF(Term Frequency – Inverse Document Frequency) 主要精神是降低普遍都會出現的字詞的權重,同時,文章中出現的字詞數要除以文章的總字數,排除文章長短造成的影響。綜合這兩個指標,設定字詞的權重。當然,我們也可以把這些沒有意義的「虛詞」直接刪除(停用字),達成同樣的目的。
經過自然語言處理之後,就可進行主題分析了。主題分析最常用的方法是「降維」,不管是主成分分析法,或特異矩陣分解法 (通稱為 SVD),文章降維後由少數幾個維度所構成,這些維度就是所謂的主題(topics),或稱之為概念(concepts),通常也稱之為成份(components),它本身就是一個高維度的向量。每一篇文章在各軸上都有投影,也就是說,每一篇文章都是由幾個概念,依不同的比重 所構成,而比重的大小由投影量所決定。概念由字詞所組成,依貢獻度高低排序,就可以知道這概念代表什麼意義。
除了主成分分析法、特異矩陣分解法之外,另外兩種常見的方法有「潛在狄利克雷分布」(Latent Dirichlet Allocation, 通稱為 LDA)和 非負矩陣分解(Non-negative Matrix Factorization, 通稱為 NMF)。SVD和NMF最大的差異在於,前者的矩陣向量投影值有正值和負值,而NMF的向量投影值都是正值,在計算上較為簡便,也較容易解讀。LDA 在各主題上的佔比是機率的概念,亦即加起來是百分之一百。其實,每一種演算法跑出的結果略有差異,通常研究者都會跑一次,再選擇一個最易於解釋的模型為基準。
簡單地說,進行主題分析研究者要先設定維度數量。接著選取一種降維方式,萃取若干數量的軸。各篇文章在軸上都有投影量,投影量愈大,即表示該篇文章與該軸愈接近,而不同的軸代表不同的意義或「概念」,每篇文章便是由這些概念,依不同的比重所構成。
本章的學習包,我們以《人民日報》 textrank 欄位的資料,進行主題分析。共萃取出十個主題,繪製時間趨勢圖,觀察在不同的時間點,各主題的佔比差異。
現在請大家打開學習包: