王立平,趙暉
(新疆大學信息科學與工程學院,烏魯木齊830046)
在當前的Web3.0 時代,微信、微博等新興社交軟件的出現,熱點話題的傳播速度變得前所未有。越來越多的人開始通過互聯網表達他們的主觀想法。產生了大量的短文本,如微博中的博文、評論、轉發內容等。一些熱點問題在此類社交媒體中的傳播速度比現實生活中的報紙雜志要快得多。作為網絡輿論的重要組成部分,熱門話題往往與微博緊密聯系。微博上對不同事件、商品和公眾人物的評論往往主導輿論的方向。此外,有關部門的決策行為往往受到公眾意見和行為的影響。因此,如何從微博上檢測當前熱門話題顯得尤為重要。
與普通文本不同,短文本具有稀疏性和高維性,對于微博短文本的主題聚類[1]顯得十分關鍵。一種設計良好的短文本聚類算法能夠極大地促進其實際應用,如主題檢測、個性化推薦、圖像或視頻標簽、信息檢索等。傳統的熱點話題檢測方法,常常依賴文本詞頻特征的提取,然而同樣的的詞匯在不同句子中往往代表不同的含義,例如“蘋果”這個詞匯,在“喬布斯創辦蘋果公司”和“我喜歡吃蘋果”這兩句話中意義不同,前者代表一種手機,后者則表示一種水果。在文本特征提取方面,獲取詞在句子的上下文[2]關聯關系是自然語言處理的重要前提。
傳統的獨熱表示(one-hot representation)將詞從文本轉化成計算機可以運算的數學符號,無法表示出語義層面上詞與詞之間的相關信息。Firth 闡述了詞的分布式表示假說:“詞的語義由其上下文決定”。傳統的自然語言處理模型N-Gram 模型,通過計算詞在一個句子中的概率表示其存在的可能性。這種方法在一定程度上可以保留一定的詞序信息,抓住一個詞的上下文信息。隨著深度學習的快速發展,2001 年Bengio[3]等人提出神經網絡語言模型(NNLM),在學習語言模型的同時,也得到了基于上下文與目標詞之間的關系建模的詞向量。谷歌推出的CBOW 和Skip-gram 語言模型給我們提供了更好更快的詞向量[4]訓練方法。
話題檢測與追蹤問題(TDT)[5]從上個世紀90 年代被提出,近年來,隨著機器學習和自然語言處理領域的快速發展,大多數話題檢測的方法都以機器學習為基礎核心。在最初的研究方法中,人們從文本中提取一些關鍵詞[6],并統計它們的詞頻來檢測這些關鍵詞是否與新興的話題有關聯。
在短文本熱點話題發現方面,國外對于社交網絡主題檢測研究較早,文獻[7]提出使用IDF 加權系數來計算文本間的相似度,并設定相應的閾值來進行主題檢測。文獻[8]基于改進的TF-IDF 模型,對相似性評分進行標準化并對術語進行加權,提出一種對新的事件檢測系統。文獻[9]提出一種自學習卷積神經網絡模型方法,首先將無監督聚類結果作為模型訓練標簽,再進行有監督的模型訓練,用于短文本聚類。文獻[10]提出一種基于時間分布信息和用戶關注的TF-IDF 改進算法,根據熱點詞使用K-means 聚類算法實現對熱點新聞的檢測。
國內對微博等短文本話題檢測研究較多。黃賢英[11]等基于多視角的微博文本特征如微博發布時間、轉發評論能信息修正語義相似度,設計增量聚類Singlepass 算法來挖掘微博主題。葉成緒[12]等提出基于主題詞的微博熱點話題發現的研究方法,并認為:“話題的本質往往是對高重復出現的文本內容進行概括”,利用外部維基百科知識對短語和詞匯進行篩選過濾,獲取可作為話題的關鍵詞語。左笑晨[13]等利用微博熱門話題挖掘用戶潛在的購物傾向,為電商平臺提供技術支持,提升用戶搜索的購物轉化率,改善人們生活品質。上述論文研究主要使用LDA 模型[14]或者根據詞頻和逆文檔頻率來提取文本中詞的特征,注重博文中的關鍵詞的提取和優化,而往往忽略了詞語在句子中的語義關系,將提取的詞語特征應用于聚類算法時,可能會造成詞與詞的相似度權重相應會降低,從而減少一些話題的發現。
本文主要有以下貢獻:
①采用神經網絡模型來提取詞在句子中的語義特征得到詞向量,來代替傳統的文本特征提取所使用的詞頻特征。
②使用圖排序算法利用詞與詞之間的關聯關系提取微博文本中關鍵詞特征,并與上述聚類結果進行共現和篩選,從而獲取語義特征較強的微博話題。
③使用真實的微博數據集,將本文提出的方法與傳統的詞頻特征提取方法在不同聚類算法上進行實驗對比分析。
實際上,話題檢測一直是自然語言處理和信息檢索的一個熱門問題[15,16]。這項任務可以定義為:將我們所討論的同一個事件歸結為一個話題。我們常用機器學習方法來解決這一問題,將機器學習方法細分可以分為3 類:有監督、無監督和半監督。在大量的微博文本中很難通過人工來標記先驗知識,無法采用近幾年來比較火熱的深度神經網絡方法。因此,在微博話題檢測研究領域,大多采用無監督的機器學習方法。
對于微博文本話題的研究本質上是對高稀疏的短文本聚類的過程。整個問題的解決流程可以描述為:首先提取文本特征、定義這些特征如何表示微博之間的主題關系、然后結合這些特征計算微博之間的聚類。再設計和使用一定的聚類方法,將微博聚類成不同簇的集合,最后對每個話題群里,選擇代表性的術語來表示話題。
本文對微博話題檢測的流程主要如圖1 所示。

圖1 話題發現框架圖
①通過新浪微博爬蟲Scrapy 爬取一些相關話題的微博博文,并將獲取的微博文本進行去噪處理,去除一些符號和停用詞,使用jieba 分詞工具進行分詞。②將第一步處理后的數據通過Google 提供的Word2vec工具進行詞向量訓練。③將得到的詞向量進行平均和歸一化得到句子向量,利用句子之間的相似度分析,通過聚類算法得到聚類結果。④使用圖排序算法TextRank提取各個簇文本的關鍵詞并與第3 步簇中心的詞條進行共現分析和篩選作為微博話題。
本文的數據來源于新浪微博網站。由于新浪微博官方提供的API 接口對獲取新浪微博博文有諸多限制,而且配置較為繁瑣,無法獲取有效的數據。本文采用Scrapy 爬蟲框架對新浪微博手機版網站weibo.cn 進行爬取,通過搜索策略爬取特定主題的相關微博,便于通過聚類算法進行聚類分析。爬蟲爬取微博的主要原理如下:通過模擬登陸方式登陸微博,并獲取相關博文的源代碼,通過正則表達式對源代碼里所包含的有效數據信息如:時間、微博、評論、點贊等數據信息進行匹配,將篩選得到的信息存儲到MongoDB 數據庫中。
微博博文中常常包含一些鏈接、符號、語氣詞等無效的數據信息,對新浪微博處理如下:
①通過停用詞詞表,將數據中包含的無價值的信息進行剔除;
②使用正則表達式,過濾英文及一些符號信息;
③剔除文本長度小于5 的微博;
④使用結巴工具包對上述微博數據進行分詞,人工的加入一些未登錄詞如:人名、術語等。
文字作為幾千年人類智慧的結晶,它不同于語音和圖像,將文本數據通過特征提取得到計算機能夠識別和利用的數值性數據,往往難以有效和準確的表達。傳統方法的利用詞頻特征通過(Vector Space Model)VSM 模型轉化為詞向量,它的詞向量維度是文本中所有單詞的個數,數據稀疏性大往往需要(Principal Component Analysis)PCA、(Singular Value Decomposition)SVD 等方法進行降維處理,對于大規模文本往往會造成維度災難,缺乏對詞的語義表示。
本文采用Google 提供的Word2Vec 工具包,使用CBOW 模型訓練微博文本詞向量。該模型包含三層:輸入層、投影層和輸出層。在已知當前詞wt 的上下文wt-2,wt+1,wt+2 的前提下預測當前詞wt,如圖2 所示。

圖2 連續詞袋模型圖
對于Word2Vec 中基于Hierarchical Softmax 的CBOW 模型,首先要構造條件概率函數p(w|Context(w))的構造,然后對如下目標函數進行優化:

通過學習詞在上下文的詞的共現關系訓練出每個單詞的數值表示,即單詞的詞向量。
聚類是一種無監督的學習,它將相似的對象歸到同一簇中,聚類的方法幾乎可以應用所有對象,簇內的對象越相似,聚類的效果越好,本文使用2 種聚類算法進行實驗分析,一個是K-means 算法,另一個是Single-pass 算法。
算法一:K-means 算法

K-means 算法本質上是一種期望最大化算法,首先隨機設定k 個簇中心,計算數據中向量與簇的距離,和均值向量,不斷更新簇的中心點,直到收斂或者均值向量的誤差小于特定的閾值。
算法二:Single-pass 算法

Single-pass 算法是基于k 近鄰算法的一種改進,前者是無監督的機器學習算法,首先初始化簇中心,把相似度大于特定閾值劃分成一個類,后者屬于一種簡單的有監督機器學習算法。二者都是通過計算各個數據點的距離用于聚類或者分類。算法簡單、易于理解和實現。
K-means 算法和Single-pass 算法是話題聚類的常用方法,前者需要設定超參數k,后者需要設定閾值θ,二者的核心思想都是盡可能地把相似大的文本聚集在一起,將相似度小的文本盡可能劃分到不同簇中。
谷歌兩位創始人佩奇和布林提出了PageRank 方法來計算網頁的重要性,當一個網頁被其他網頁鏈接到,說明這個網頁比較重要,如果一個PageRank 值很高的網頁鏈接到一個其他網頁,那么被鏈接到的網頁的PageRank 值會相應提高。
TextRank 借鑒了PageRank 算法的思想,計算詞在文檔中的重要性,即TextRank 值,它的公式(2)如下:

其中d 表示阻尼系數,一般d 設置為0.85,k 表示窗口大小,即共現k 個單詞。S( )
vi表示詞匯vi的TextRank 值,
一個單詞i 的權重取決于與在i 前面的各個點j組成的(j,i)這條邊的權重,以及j 這個點到其他邊的權重之和。
TextRank 提取文本關鍵詞有如下流程:
①對每個句子進行分詞和詞性標注處理。
②過濾掉停用詞,保留動詞、名詞、形容詞等,保留后的候選詞匯。
③構建候選關鍵詞圖G=(V,E),其中V 為節點集,由2 中候選詞組成,循環選擇一個候選詞,將其與后面k 個單詞分別組合成k 條邊,記錄每條邊的權權值為1,當這條邊在后面文本再次出現時,權值在基礎上加1。
④利用TextRank 公式,迭代傳播各節點的權值,直到收斂。
⑤詞節點的TextRank 值進行倒序排序,得到重要的T 個詞匯,作為關鍵詞。
微博話題就是微博熱點、用戶興趣、網民討論等多種內容,它常常使用一些話題詞來表示。本文通過對微博博文數據的處理、分析得到一些關鍵詞來表示微博話題。其實現流程如下:
①利用連續詞袋模型對預處理過的新浪微博文本進行特征提取,得到文本中的詞向量,將每條微博文本中的單詞的詞向量,進行平均得到微博文本向量。
②將①中微博文本向量通過Single-pass 算法和K-means 算法得到聚類結果。
③分類后的微博文本利用圖排序算法TextRank進行提取關鍵詞。
④將②中聚類簇中心的詞匯與③中得到關鍵詞詞匯進行共現和篩選,作為微博話題。
本文通過話題搜索爬蟲程序抓取了2019 年2 月10 日到2019 年3 月31 日的新浪微博熱點事件的數據,下表1 給出了數據集的基本描述,并人工的對話題微博進行分類,包括10 個話題類別,17179 條微博,實驗平臺是Intel i5-4230m(2.6GHz)處理器,內存容量為8GB,編程語言環境Python3.6。

表1 微博數據
對于短文本話題發現的研究,不同于文本分類,它是一種短文本聚類研究,沒有統一的數據集,主要評價指標有兩大類,一種對具有標簽的數據集進行計算準確率、召回率等,第二種計算聚類的效果,一般有(Silhouette Coefficient)CH 指 數、(Calinski Harabaz)SH 指數等。
對經過預處理過的微博短文本進行實驗,首先通過兩種不同的特征提取方法將文本數據處理為數值型數據,在通過對比兩種聚類算法單一聚類和k 均值聚類方法,來檢驗實驗結果如表2 所示。

表2 聚類算法比較
(1)準確率,對微博文本數據集聚類后,劃分準確的文本數量a 與微博文本總數b 的比值,公式如下所示。

(2)CH 指數,即輪廓系數(Sihouette Coefficient),是一種聚類效果好壞的一種評價方式。它主要結合內聚度和分離度兩種因素,可以用來在無標簽數據的基礎上,評價算法聚類結果的有好壞。
計算a(i)=average(i 向量到所有它屬于的簇中其他點的距離)
計算b(i)=min(i 向量到其他簇的所有樣本點的平均距離)
i 向量的輪廓系數就為:

輪廓系數的值是介于[-1,1]之間,趨近與1 代表內聚度和分離度都相對較優。
聚類結果總的輪廓系數:

使用上述表2 中的K 均值算法處理微博文本,劃分出不同類別的話題,將聚類每個簇中心最近的詞匯作為話題詞條,如表3 所示,部分相關數據和話題結果。

表3 算法聚類結果
上述結果可以看出,整體聚類結果較好,但是“導師辱罵學生”這一話題沒有明顯劃分出來,話題詞匯“導師”和“學生”雜糅在編號為7 即“9 歲開車”話題中,話題編號0 和話題編號8 均是描述“武大櫻花”,顯得有些重復。
關鍵詞在一定程度上能夠表達出短文本的主要信息,圖排序算法通過計算微博短文本中詞與詞的共現頻率并按照詞的關聯程度來提取短文本中Topk 個關鍵詞匯。如表4 所示,對聚類后的微博短文本進行關鍵詞提取,每個話題簇文本提取前10 個詞語作為關鍵詞。
通過對上述微博短文本聚類的結果即不同簇的中心詞匯與TextRank 圖排序算法獲取的關鍵詞進行共先分析,提取二者相似度大于特定閾值的詞匯以及共同出現的詞匯,來更有效的對相關微博話題進行表示。如表5 所示,得到的主題詞匯表示微博話題。
通過共現分析更加完善了微博話題的表示,如“百米沖刺碰瓷”話題中增加了地點“便利店”和“遼寧大連”。在“空姐遇害”這一話題中增加了人物信息“劉振華”。

表4 TextRank 提取文本數據關鍵詞結果

表5 聚類結果的話題詞條與關鍵詞提取進行共現分析
本文通過Word2Vec 的CBOW 模型來進行文本特征提取,通過真實的微博數據與傳統的TF-IDF 文本特征提取方法進行對比實驗,在聚類算法K-means 中,文本劃分準確率與輪廓系數有所提升。在Singlepass 算法中輪廓系數與運行時間上有所提升。將聚類后的話題詞匯與使用TextRank 算法提取的關鍵詞進行共現、篩選分析,得到更能表現微博相關話題的詞匯。更加有相關部分利于對微博用戶的輿情分析與把控。在今后對社交網絡文本研究中,如何提取更有效的文本特征即:將抽象的文本數據轉化成計算機能識別的數值型數據,顯得尤為重要,這更有利于對數據的劃分與聚類。