王立平,趙暉
(新疆大學信息科學與工程學院,烏魯木齊830046)
在當前的Web3.0 時代,微信、微博等新興社交軟件的出現(xiàn),熱點話題的傳播速度變得前所未有。越來越多的人開始通過互聯(lián)網(wǎng)表達他們的主觀想法。產(chǎn)生了大量的短文本,如微博中的博文、評論、轉(zhuǎn)發(fā)內(nèi)容等。一些熱點問題在此類社交媒體中的傳播速度比現(xiàn)實生活中的報紙雜志要快得多。作為網(wǎng)絡(luò)輿論的重要組成部分,熱門話題往往與微博緊密聯(lián)系。微博上對不同事件、商品和公眾人物的評論往往主導輿論的方向。此外,有關(guān)部門的決策行為往往受到公眾意見和行為的影響。因此,如何從微博上檢測當前熱門話題顯得尤為重要。
與普通文本不同,短文本具有稀疏性和高維性,對于微博短文本的主題聚類[1]顯得十分關(guān)鍵。一種設(shè)計良好的短文本聚類算法能夠極大地促進其實際應(yīng)用,如主題檢測、個性化推薦、圖像或視頻標簽、信息檢索等。傳統(tǒng)的熱點話題檢測方法,常常依賴文本詞頻特征的提取,然而同樣的的詞匯在不同句子中往往代表不同的含義,例如“蘋果”這個詞匯,在“喬布斯創(chuàng)辦蘋果公司”和“我喜歡吃蘋果”這兩句話中意義不同,前者代表一種手機,后者則表示一種水果。在文本特征提取方面,獲取詞在句子的上下文[2]關(guān)聯(lián)關(guān)系是自然語言處理的重要前提。
傳統(tǒng)的獨熱表示(one-hot representation)將詞從文本轉(zhuǎn)化成計算機可以運算的數(shù)學符號,無法表示出語義層面上詞與詞之間的相關(guān)信息。Firth 闡述了詞的分布式表示假說:“詞的語義由其上下文決定”。傳統(tǒng)的自然語言處理模型N-Gram 模型,通過計算詞在一個句子中的概率表示其存在的可能性。這種方法在一定程度上可以保留一定的詞序信息,抓住一個詞的上下文信息。隨著深度學習的快速發(fā)展,2001 年Bengio[3]等人提出神經(jīng)網(wǎng)絡(luò)語言模型(NNLM),在學習語言模型的同時,也得到了基于上下文與目標詞之間的關(guān)系建模的詞向量。谷歌推出的CBOW 和Skip-gram 語言模型給我們提供了更好更快的詞向量[4]訓練方法。
話題檢測與追蹤問題(TDT)[5]從上個世紀90 年代被提出,近年來,隨著機器學習和自然語言處理領(lǐng)域的快速發(fā)展,大多數(shù)話題檢測的方法都以機器學習為基礎(chǔ)核心。在最初的研究方法中,人們從文本中提取一些關(guān)鍵詞[6],并統(tǒng)計它們的詞頻來檢測這些關(guān)鍵詞是否與新興的話題有關(guān)聯(lián)。
在短文本熱點話題發(fā)現(xiàn)方面,國外對于社交網(wǎng)絡(luò)主題檢測研究較早,文獻[7]提出使用IDF 加權(quán)系數(shù)來計算文本間的相似度,并設(shè)定相應(yīng)的閾值來進行主題檢測。文獻[8]基于改進的TF-IDF 模型,對相似性評分進行標準化并對術(shù)語進行加權(quán),提出一種對新的事件檢測系統(tǒng)。文獻[9]提出一種自學習卷積神經(jīng)網(wǎng)絡(luò)模型方法,首先將無監(jiān)督聚類結(jié)果作為模型訓練標簽,再進行有監(jiān)督的模型訓練,用于短文本聚類。文獻[10]提出一種基于時間分布信息和用戶關(guān)注的TF-IDF 改進算法,根據(jù)熱點詞使用K-means 聚類算法實現(xiàn)對熱點新聞的檢測。
國內(nèi)對微博等短文本話題檢測研究較多。黃賢英[11]等基于多視角的微博文本特征如微博發(fā)布時間、轉(zhuǎn)發(fā)評論能信息修正語義相似度,設(shè)計增量聚類Singlepass 算法來挖掘微博主題。葉成緒[12]等提出基于主題詞的微博熱點話題發(fā)現(xiàn)的研究方法,并認為:“話題的本質(zhì)往往是對高重復出現(xiàn)的文本內(nèi)容進行概括”,利用外部維基百科知識對短語和詞匯進行篩選過濾,獲取可作為話題的關(guān)鍵詞語。左笑晨[13]等利用微博熱門話題挖掘用戶潛在的購物傾向,為電商平臺提供技術(shù)支持,提升用戶搜索的購物轉(zhuǎn)化率,改善人們生活品質(zhì)。上述論文研究主要使用LDA 模型[14]或者根據(jù)詞頻和逆文檔頻率來提取文本中詞的特征,注重博文中的關(guān)鍵詞的提取和優(yōu)化,而往往忽略了詞語在句子中的語義關(guān)系,將提取的詞語特征應(yīng)用于聚類算法時,可能會造成詞與詞的相似度權(quán)重相應(yīng)會降低,從而減少一些話題的發(fā)現(xiàn)。
本文主要有以下貢獻:
①采用神經(jīng)網(wǎng)絡(luò)模型來提取詞在句子中的語義特征得到詞向量,來代替?zhèn)鹘y(tǒng)的文本特征提取所使用的詞頻特征。
②使用圖排序算法利用詞與詞之間的關(guān)聯(lián)關(guān)系提取微博文本中關(guān)鍵詞特征,并與上述聚類結(jié)果進行共現(xiàn)和篩選,從而獲取語義特征較強的微博話題。
③使用真實的微博數(shù)據(jù)集,將本文提出的方法與傳統(tǒng)的詞頻特征提取方法在不同聚類算法上進行實驗對比分析。
實際上,話題檢測一直是自然語言處理和信息檢索的一個熱門問題[15,16]。這項任務(wù)可以定義為:將我們所討論的同一個事件歸結(jié)為一個話題。我們常用機器學習方法來解決這一問題,將機器學習方法細分可以分為3 類:有監(jiān)督、無監(jiān)督和半監(jiān)督。在大量的微博文本中很難通過人工來標記先驗知識,無法采用近幾年來比較火熱的深度神經(jīng)網(wǎng)絡(luò)方法。因此,在微博話題檢測研究領(lǐng)域,大多采用無監(jiān)督的機器學習方法。
對于微博文本話題的研究本質(zhì)上是對高稀疏的短文本聚類的過程。整個問題的解決流程可以描述為:首先提取文本特征、定義這些特征如何表示微博之間的主題關(guān)系、然后結(jié)合這些特征計算微博之間的聚類。再設(shè)計和使用一定的聚類方法,將微博聚類成不同簇的集合,最后對每個話題群里,選擇代表性的術(shù)語來表示話題。
本文對微博話題檢測的流程主要如圖1 所示。
圖1 話題發(fā)現(xiàn)框架圖
①通過新浪微博爬蟲Scrapy 爬取一些相關(guān)話題的微博博文,并將獲取的微博文本進行去噪處理,去除一些符號和停用詞,使用jieba 分詞工具進行分詞。②將第一步處理后的數(shù)據(jù)通過Google 提供的Word2vec工具進行詞向量訓練。③將得到的詞向量進行平均和歸一化得到句子向量,利用句子之間的相似度分析,通過聚類算法得到聚類結(jié)果。④使用圖排序算法TextRank提取各個簇文本的關(guān)鍵詞并與第3 步簇中心的詞條進行共現(xiàn)分析和篩選作為微博話題。
本文的數(shù)據(jù)來源于新浪微博網(wǎng)站。由于新浪微博官方提供的API 接口對獲取新浪微博博文有諸多限制,而且配置較為繁瑣,無法獲取有效的數(shù)據(jù)。本文采用Scrapy 爬蟲框架對新浪微博手機版網(wǎng)站weibo.cn 進行爬取,通過搜索策略爬取特定主題的相關(guān)微博,便于通過聚類算法進行聚類分析。爬蟲爬取微博的主要原理如下:通過模擬登陸方式登陸微博,并獲取相關(guān)博文的源代碼,通過正則表達式對源代碼里所包含的有效數(shù)據(jù)信息如:時間、微博、評論、點贊等數(shù)據(jù)信息進行匹配,將篩選得到的信息存儲到MongoDB 數(shù)據(jù)庫中。
微博博文中常常包含一些鏈接、符號、語氣詞等無效的數(shù)據(jù)信息,對新浪微博處理如下:
①通過停用詞詞表,將數(shù)據(jù)中包含的無價值的信息進行剔除;
②使用正則表達式,過濾英文及一些符號信息;
③剔除文本長度小于5 的微博;
④使用結(jié)巴工具包對上述微博數(shù)據(jù)進行分詞,人工的加入一些未登錄詞如:人名、術(shù)語等。
文字作為幾千年人類智慧的結(jié)晶,它不同于語音和圖像,將文本數(shù)據(jù)通過特征提取得到計算機能夠識別和利用的數(shù)值性數(shù)據(jù),往往難以有效和準確的表達。傳統(tǒng)方法的利用詞頻特征通過(Vector Space Model)VSM 模型轉(zhuǎn)化為詞向量,它的詞向量維度是文本中所有單詞的個數(shù),數(shù)據(jù)稀疏性大往往需要(Principal Component Analysis)PCA、(Singular Value Decomposition)SVD 等方法進行降維處理,對于大規(guī)模文本往往會造成維度災難,缺乏對詞的語義表示。
本文采用Google 提供的Word2Vec 工具包,使用CBOW 模型訓練微博文本詞向量。該模型包含三層:輸入層、投影層和輸出層。在已知當前詞wt 的上下文wt-2,wt+1,wt+2 的前提下預測當前詞wt,如圖2 所示。
圖2 連續(xù)詞袋模型圖
對于Word2Vec 中基于Hierarchical Softmax 的CBOW 模型,首先要構(gòu)造條件概率函數(shù)p(w|Context(w))的構(gòu)造,然后對如下目標函數(shù)進行優(yōu)化:
通過學習詞在上下文的詞的共現(xiàn)關(guān)系訓練出每個單詞的數(shù)值表示,即單詞的詞向量。
聚類是一種無監(jiān)督的學習,它將相似的對象歸到同一簇中,聚類的方法幾乎可以應(yīng)用所有對象,簇內(nèi)的對象越相似,聚類的效果越好,本文使用2 種聚類算法進行實驗分析,一個是K-means 算法,另一個是Single-pass 算法。
算法一:K-means 算法
K-means 算法本質(zhì)上是一種期望最大化算法,首先隨機設(shè)定k 個簇中心,計算數(shù)據(jù)中向量與簇的距離,和均值向量,不斷更新簇的中心點,直到收斂或者均值向量的誤差小于特定的閾值。
算法二:Single-pass 算法
Single-pass 算法是基于k 近鄰算法的一種改進,前者是無監(jiān)督的機器學習算法,首先初始化簇中心,把相似度大于特定閾值劃分成一個類,后者屬于一種簡單的有監(jiān)督機器學習算法。二者都是通過計算各個數(shù)據(jù)點的距離用于聚類或者分類。算法簡單、易于理解和實現(xiàn)。
K-means 算法和Single-pass 算法是話題聚類的常用方法,前者需要設(shè)定超參數(shù)k,后者需要設(shè)定閾值θ,二者的核心思想都是盡可能地把相似大的文本聚集在一起,將相似度小的文本盡可能劃分到不同簇中。
谷歌兩位創(chuàng)始人佩奇和布林提出了PageRank 方法來計算網(wǎng)頁的重要性,當一個網(wǎng)頁被其他網(wǎng)頁鏈接到,說明這個網(wǎng)頁比較重要,如果一個PageRank 值很高的網(wǎng)頁鏈接到一個其他網(wǎng)頁,那么被鏈接到的網(wǎng)頁的PageRank 值會相應(yīng)提高。
TextRank 借鑒了PageRank 算法的思想,計算詞在文檔中的重要性,即TextRank 值,它的公式(2)如下:
其中d 表示阻尼系數(shù),一般d 設(shè)置為0.85,k 表示窗口大小,即共現(xiàn)k 個單詞。S( )
vi表示詞匯vi的TextRank 值,
一個單詞i 的權(quán)重取決于與在i 前面的各個點j組成的(j,i)這條邊的權(quán)重,以及j 這個點到其他邊的權(quán)重之和。
TextRank 提取文本關(guān)鍵詞有如下流程:
①對每個句子進行分詞和詞性標注處理。
②過濾掉停用詞,保留動詞、名詞、形容詞等,保留后的候選詞匯。
③構(gòu)建候選關(guān)鍵詞圖G=(V,E),其中V 為節(jié)點集,由2 中候選詞組成,循環(huán)選擇一個候選詞,將其與后面k 個單詞分別組合成k 條邊,記錄每條邊的權(quán)權(quán)值為1,當這條邊在后面文本再次出現(xiàn)時,權(quán)值在基礎(chǔ)上加1。
④利用TextRank 公式,迭代傳播各節(jié)點的權(quán)值,直到收斂。
⑤詞節(jié)點的TextRank 值進行倒序排序,得到重要的T 個詞匯,作為關(guān)鍵詞。
微博話題就是微博熱點、用戶興趣、網(wǎng)民討論等多種內(nèi)容,它常常使用一些話題詞來表示。本文通過對微博博文數(shù)據(jù)的處理、分析得到一些關(guān)鍵詞來表示微博話題。其實現(xiàn)流程如下:
①利用連續(xù)詞袋模型對預處理過的新浪微博文本進行特征提取,得到文本中的詞向量,將每條微博文本中的單詞的詞向量,進行平均得到微博文本向量。
②將①中微博文本向量通過Single-pass 算法和K-means 算法得到聚類結(jié)果。
③分類后的微博文本利用圖排序算法TextRank進行提取關(guān)鍵詞。
④將②中聚類簇中心的詞匯與③中得到關(guān)鍵詞詞匯進行共現(xiàn)和篩選,作為微博話題。
本文通過話題搜索爬蟲程序抓取了2019 年2 月10 日到2019 年3 月31 日的新浪微博熱點事件的數(shù)據(jù),下表1 給出了數(shù)據(jù)集的基本描述,并人工的對話題微博進行分類,包括10 個話題類別,17179 條微博,實驗平臺是Intel i5-4230m(2.6GHz)處理器,內(nèi)存容量為8GB,編程語言環(huán)境Python3.6。
表1 微博數(shù)據(jù)
對于短文本話題發(fā)現(xiàn)的研究,不同于文本分類,它是一種短文本聚類研究,沒有統(tǒng)一的數(shù)據(jù)集,主要評價指標有兩大類,一種對具有標簽的數(shù)據(jù)集進行計算準確率、召回率等,第二種計算聚類的效果,一般有(Silhouette Coefficient)CH 指 數(shù)、(Calinski Harabaz)SH 指數(shù)等。
對經(jīng)過預處理過的微博短文本進行實驗,首先通過兩種不同的特征提取方法將文本數(shù)據(jù)處理為數(shù)值型數(shù)據(jù),在通過對比兩種聚類算法單一聚類和k 均值聚類方法,來檢驗實驗結(jié)果如表2 所示。
表2 聚類算法比較
(1)準確率,對微博文本數(shù)據(jù)集聚類后,劃分準確的文本數(shù)量a 與微博文本總數(shù)b 的比值,公式如下所示。
(2)CH 指數(shù),即輪廓系數(shù)(Sihouette Coefficient),是一種聚類效果好壞的一種評價方式。它主要結(jié)合內(nèi)聚度和分離度兩種因素,可以用來在無標簽數(shù)據(jù)的基礎(chǔ)上,評價算法聚類結(jié)果的有好壞。
計算a(i)=average(i 向量到所有它屬于的簇中其他點的距離)
計算b(i)=min(i 向量到其他簇的所有樣本點的平均距離)
i 向量的輪廓系數(shù)就為:
輪廓系數(shù)的值是介于[-1,1]之間,趨近與1 代表內(nèi)聚度和分離度都相對較優(yōu)。
聚類結(jié)果總的輪廓系數(shù):
使用上述表2 中的K 均值算法處理微博文本,劃分出不同類別的話題,將聚類每個簇中心最近的詞匯作為話題詞條,如表3 所示,部分相關(guān)數(shù)據(jù)和話題結(jié)果。
表3 算法聚類結(jié)果
上述結(jié)果可以看出,整體聚類結(jié)果較好,但是“導師辱罵學生”這一話題沒有明顯劃分出來,話題詞匯“導師”和“學生”雜糅在編號為7 即“9 歲開車”話題中,話題編號0 和話題編號8 均是描述“武大櫻花”,顯得有些重復。
關(guān)鍵詞在一定程度上能夠表達出短文本的主要信息,圖排序算法通過計算微博短文本中詞與詞的共現(xiàn)頻率并按照詞的關(guān)聯(lián)程度來提取短文本中Topk 個關(guān)鍵詞匯。如表4 所示,對聚類后的微博短文本進行關(guān)鍵詞提取,每個話題簇文本提取前10 個詞語作為關(guān)鍵詞。
通過對上述微博短文本聚類的結(jié)果即不同簇的中心詞匯與TextRank 圖排序算法獲取的關(guān)鍵詞進行共先分析,提取二者相似度大于特定閾值的詞匯以及共同出現(xiàn)的詞匯,來更有效的對相關(guān)微博話題進行表示。如表5 所示,得到的主題詞匯表示微博話題。
通過共現(xiàn)分析更加完善了微博話題的表示,如“百米沖刺碰瓷”話題中增加了地點“便利店”和“遼寧大連”。在“空姐遇害”這一話題中增加了人物信息“劉振華”。
表4 TextRank 提取文本數(shù)據(jù)關(guān)鍵詞結(jié)果
表5 聚類結(jié)果的話題詞條與關(guān)鍵詞提取進行共現(xiàn)分析
本文通過Word2Vec 的CBOW 模型來進行文本特征提取,通過真實的微博數(shù)據(jù)與傳統(tǒng)的TF-IDF 文本特征提取方法進行對比實驗,在聚類算法K-means 中,文本劃分準確率與輪廓系數(shù)有所提升。在Singlepass 算法中輪廓系數(shù)與運行時間上有所提升。將聚類后的話題詞匯與使用TextRank 算法提取的關(guān)鍵詞進行共現(xiàn)、篩選分析,得到更能表現(xiàn)微博相關(guān)話題的詞匯。更加有相關(guān)部分利于對微博用戶的輿情分析與把控。在今后對社交網(wǎng)絡(luò)文本研究中,如何提取更有效的文本特征即:將抽象的文本數(shù)據(jù)轉(zhuǎn)化成計算機能識別的數(shù)值型數(shù)據(jù),顯得尤為重要,這更有利于對數(shù)據(jù)的劃分與聚類。