趙姝穎,肖寧,曾華圣,王海兮,常明芳
中國電子科技集團公司 第三十研究所,四川 成都 610000
立場檢測源于人工智能自然語言處理技術(shù),是情感分類技術(shù)的一個前沿分支,可以看作是針對特定目標(biāo)話題進行的情感分析任務(wù)[1]。立場檢測也是自然語言處理研究的一個熱門主題,Mohammad等[2]在2016年構(gòu)建了基于 Twitter數(shù)據(jù)的立場檢測英文數(shù)據(jù)集,并用于SemEval 2016會議的Task 6:立場檢測。由于中文語言的多義性、復(fù)雜性和語法的獨特性,面向中文的立場檢測更具有挑戰(zhàn)性。2016年中國的相關(guān)學(xué)者構(gòu)建了基于中文微博的立場檢測數(shù)據(jù)集,并將其用于2016年的自然語言處理與中文計算會議發(fā)表的任務(wù)中,進一步推動了中文立場檢測的研究。
立場檢測任務(wù)使用自然語言處理(NLP)技術(shù),根據(jù)對目標(biāo)話題的文本內(nèi)容分析其立場傾向是“贊成”、 “反對”,還是“中立”[3]。立場檢測主要強調(diào)根據(jù)特定的目標(biāo)話題環(huán)境來分析判斷文本內(nèi)容的立場,雖然與情感分析相似,但不同點在于情感分析側(cè)重于一段文本中情感特征的極性,在很多情況下,分析文本內(nèi)容的立場傾向僅根據(jù)文本的情感極性是無法準(zhǔn)確判斷的。 例如,某些微博在不考慮任何目標(biāo)話題的前提, 其情感極性是消極反對的,但是當(dāng)把它放在某個指定的話題環(huán)境中時,其立場可能與單獨分析得到的情感極性恰恰相反。通過這個例子可以看出,相比于情感分析任務(wù),立場檢測任務(wù)對人工智能模型的文本理解能力提出了更高的要求,不僅需要去識別句子中能代表用戶情感態(tài)度的關(guān)鍵詞,還需要去理解完整的句意,并且通過計算機語言表述出來,即得到句意的特征表示。然后,從大量的數(shù)據(jù)集中學(xué)習(xí)到從特征表示到用戶立場的映射函數(shù),從而完成對文本所持有的立場進行精準(zhǔn)判斷。
針對立場檢測任務(wù),國內(nèi)外研究人員目前使用的方法主要包括:基于特征工程的機器學(xué)習(xí)方法和基于神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)方法。
基于特征工程的機器學(xué)習(xí)方法:從微博話題文本中提取出有關(guān)情感和主題的詞匯,然后將這些詞匯作為特征詞,并使用Word2Vec進行詞向量的訓(xùn)練,再將詞向量求平均后,作為該文本的特征傳給SVM分類器中進行立場檢測的立場傾向分類。相關(guān)實驗表明,當(dāng)文本特征分析僅使用情感詞時,情緒并不能準(zhǔn)確地反映作者的立場傾向,其立場分類效果并不理想,而加入主題和情感的相關(guān)詞匯共同作為特征時的選取效果更好。一些學(xué)者也探究了文本的多種特征,諸如基于同義詞典的詞袋特征、文本的Word2Vec的字向量和詞向量等不同的特性交叉組合,分析其對立場檢測的影響,并且分別使用SVM、隨機森林以及決策樹對進行立場分類。實驗表明,對于立場分類結(jié)果,詞與立場標(biāo)簽的共現(xiàn)關(guān)系同Word2Vec的字與詞向量的組合的改善最為明顯。
近年來,深度學(xué)習(xí)的迅猛發(fā)展,也促進了自然語言處理的進步。基于深度學(xué)習(xí)的方法是直接將文本內(nèi)容全部映射為向量,再通過多層神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)標(biāo)簽并自動提取文本特征,相比于需要人工特征抽取工作的基于特征工程的機器學(xué)習(xí)方法而言,基于深度學(xué)習(xí)的方法能夠讓機器智能提取特征,這是一種優(yōu)勢。目前,在有關(guān)立場檢測的現(xiàn)有研究中,基于深度學(xué)習(xí)的工作主要有2種主流的思路,一是通過使用不同方式將目標(biāo)話題信息添加到微博文本內(nèi)容中來提升立場檢測效果,二是從語言學(xué)的角度,對深度學(xué)習(xí)模型的結(jié)構(gòu)進行創(chuàng)新,使得模型能夠?qū)W習(xí)到文本的句意信息,從而達到更為精準(zhǔn)的立場檢測結(jié)果?;诰矸e神經(jīng)網(wǎng)絡(luò)(CNN)的立場檢測使用基于Yoon Kim的卷積神經(jīng)網(wǎng)絡(luò)對微博文本進行分類,它使用了一種模型投票機制,在每一個迭代周期訓(xùn)練步驟結(jié)束后,通過融合訓(xùn)練過程中產(chǎn)生的各模型結(jié)果,迭代出一些測試集數(shù)據(jù)并用于預(yù)測學(xué)習(xí)標(biāo)簽,最后在所有的迭代周期訓(xùn)練完成時,從測試集數(shù)據(jù)中選擇被預(yù)測次數(shù)最多的標(biāo)簽并作為最終結(jié)果輸出,但這僅適用于對微博文本進行了特征提取和分類,而忽略了在立場檢測中目標(biāo)話題的作用。針對這個問題,部分學(xué)者提出了一個雙向條件編碼模型將目標(biāo)話題與微博文本進行拼接,其中微博文本BiLSTM的cell狀態(tài)層的初始值,是通過使用BiLSTM將目標(biāo)話題cell狀態(tài)層的輸出而來的,因而完成目標(biāo)話題與微博文本序列的拼接,并且目標(biāo)話題和微博文本使用隱層狀態(tài)的BiLSTM編碼后彼此之間是相互獨立的[4]。針對目標(biāo)話題,為了增強雙向條件編碼模型對立場檢測的影響,一些學(xué)者接著提出了一種基于注意力的BiLSTM-CNN模型用來協(xié)助檢測中文微博立場。該方法首先使用BiLSTM獲取文本的全局特征,使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)來獲取文本的局部卷積特征;然后將文本的 BiLSTM輸出通過使用基于注意力(Attention)的權(quán)重矩陣方法將其加到CNN的輸出中;最后,向Softmax層中輸入所獲取到的 CNN的句子表示并對其進行立場分類。一些學(xué)者在基于注意力機制的方法上提出了基于兩階段注意力機制的立場檢測模型,首先使用Word2Vec表示詞向量;然后通過Attention計算微博文本的詞向量和目標(biāo)話題的詞向量,BiLSTM用于提取微博文本的特征,將目標(biāo)話題再次與所提取到的特征進行Attention 計算,并使用Softmax對最終的結(jié)果進行分類[5]。
然而以上方法的思路在實踐中的效果均不太理想,隨 著Google公 司BERT(Bidirectional Encoder Representations from Transformers)模型的推出,將深度學(xué)習(xí)模型對文本語義的理解能力提高到了一個里程碑的高度,該模型在立場檢測領(lǐng)域也展現(xiàn)出了優(yōu)異的能力。因而本項目將會基于BERT模型進行立場檢測技術(shù)的研發(fā)。
2018年谷歌公司AI團隊發(fā)布了BERT模型,該模型在機器閱讀理解頂級水平測試SQuAD1.1中展示了驚人的結(jié)果:它在2個衡量指標(biāo)上均超過了人類,并且還在11種不同NLP測試中獲得了最好的成績,成就包括將GLUE基準(zhǔn)推至80.4%(絕對改進7.6%),以及MultiNLI準(zhǔn)確度達到86.7% (絕對改進率5.6%)等方面??梢灶A(yù)見的是,BERT將為NLP帶來重大改變,也是近兩年中NLP領(lǐng)域最突出的進展[6]。
RoBERTa(Robustly Optimized BERT Pretraining Approach)模型是基于BERT 的一種改進版本,是BERT 在多個層面上的重大改進。RoBERTa 在模型規(guī)模、算力和數(shù)據(jù)上,主要比 BERT 提升了以下幾點。
1) 更大的模型參數(shù)量(從RoBERTa論文提供的訓(xùn)練時間來看,模型使用1 024塊V100 GPU訓(xùn)練了1 d的時間)。
2) 更多的訓(xùn)練數(shù)據(jù)(包括CC-NEWS等在內(nèi)的160 GB純文本)[7]。
RoBERTa 還有很多訓(xùn)練方法上的改進。
1) 動態(tài)掩碼:BERT依賴隨機掩碼和預(yù)測token。原版的BERT實現(xiàn)在數(shù)據(jù)預(yù)處理期間執(zhí)行1次掩碼以獲得1個靜態(tài)掩碼。而RoBERTa在每次將1個序列輸入模型時都會生成1個新的掩碼模式,通過動態(tài)掩碼進行更新。這樣,在連續(xù)輸入海量數(shù)據(jù)的過程中,模型會逐漸適應(yīng)不同的動態(tài)掩碼策略并學(xué)習(xí)不同的語言表示特征。
2) 更大批次:RoBERTa在訓(xùn)練過程中使用了更大的批數(shù)量。研究人員嘗試過從256~8 000不等的批數(shù)量[8]。
3)文本編碼:Byte-Pair Encoding(BPE)是字符級表示和詞級表示特征的混合,并支持處理自然語言語料庫中的許多常見詞匯。原版的BERT實現(xiàn)使用大小為30 KB的字符級別的BPE詞匯,該詞匯表是在利用啟發(fā)式分詞規(guī)則對輸入進行預(yù)處理之后學(xué)習(xí)得到的。Facebook研究者沒有采用這種方式,而是考慮使用更大的字節(jié)級別BPE詞匯表來訓(xùn)練BERT,這一詞匯表包含50 KB的subword單元,并且在輸入時沒有做任何額外的預(yù)處理或分詞工作[9]。
立場檢測模塊是本系統(tǒng)的核心組成部件,精準(zhǔn)畫像功能和群體決策預(yù)測功能皆建立在該功能模塊的實現(xiàn)之上。本系統(tǒng)的立場檢測技術(shù)總體來講,結(jié)合了中文自然語言處理領(lǐng)域目前表現(xiàn)最為優(yōu)異的深度學(xué)習(xí)模型RoBERTa以及Softmax分類器。通過RoBERTa預(yù)訓(xùn)練模型對輸入的中文文本數(shù)據(jù)集進行學(xué)習(xí),從而得到文本的特征表示,最后通過Softmax分類器對特征表示進行分類判斷得到結(jié)果,其架構(gòu)如圖1所示。
圖1 立場檢測模型系統(tǒng)框架
系統(tǒng)運行邏輯如下所述。
1) 立場檢測模塊從文件系統(tǒng)取“文本數(shù)據(jù)”,而后根據(jù)預(yù)先設(shè)定的字典,將文本中的文字和文字在字典中對應(yīng)的數(shù)字進行映射,即Token化,形成數(shù)字序列。
2) 將數(shù)字序列輸入已預(yù)訓(xùn)練好的RoBERTa模型,得到數(shù)字序列的特征表示,而后取這一特征表示輸入進Softmax分類器進行立場識別。立場分為3種:贊同、中立、反對,分別對應(yīng)分值1、0、?1。
3) 最后將立場分值附加到最初的文本數(shù)據(jù)后面,形成“文本+立場”的新數(shù)據(jù)結(jié)構(gòu),并根據(jù)控制臺的指令送往輸出模塊或群體決策分析模塊。
具體的實現(xiàn)方式如下。
1) 將數(shù)據(jù)采集系統(tǒng)采集的文本信息Token化,然后逐條輸入進Pre-trained RoBERTa模型,從而通過多個Transformer層學(xué)習(xí)到文本信息的抽象表示。
2) 取Pre-trained RoBERTa模型輸出層的頭部位置的表示向量,將該向量輸入Softmax分類器。
3) 通過Softmax分類器形成1個三元組數(shù)值,分別表示贊同、中立、反對對應(yīng)的概率,概率最高的即為該文本針對某一主題的實際觀點。
本系統(tǒng)在LSTM模型的基礎(chǔ)上構(gòu)建立場趨勢預(yù)測模型。模型細節(jié)如下所述。
2.3.1 數(shù)據(jù)處理
訓(xùn)練數(shù)據(jù)采集于互聯(lián)網(wǎng)論壇,數(shù)據(jù)為某時間區(qū)間內(nèi)某個話題的所有用戶立場占比的時間序列數(shù)據(jù),訓(xùn)練時一共使用了11個話題的數(shù)據(jù)。預(yù)測的輸入是5個時間點的立場占比,輸出是接下來的2個時間點的立場占比。因此,訓(xùn)練時將數(shù)據(jù)集分割成7個一組的形式,前5個數(shù)據(jù)作為輸入,后2個數(shù)據(jù)作為輸出的標(biāo)簽。
2.32 模型結(jié)構(gòu)
模型采用4層LSTM加上1個全連接層(Full Connected Layer)的輸出節(jié)點為2個,對應(yīng)于要預(yù)測的2個時間節(jié)點。模型的loss采用MSE(Mean Square Error)均方差誤差,優(yōu)化器采用Adam算法。具體模型結(jié)構(gòu)如圖2所示。
圖2 趨勢預(yù)測模型結(jié)構(gòu)
2.3.3 與前端的交互設(shè)計
趨勢預(yù)測模塊采用RabbitMQ消息隊列中間件與前端進行交互。具體工作流程如下:1)用戶通過前端接口選擇預(yù)測的“話題” “預(yù)測開始時間” “預(yù)測時間粒度”,點擊“篩選”按鈕后,前端將這3個數(shù)據(jù)發(fā)送到RabbitMQ消息隊列;2)趨勢預(yù)測模塊通過訂閱模式,實時地獲取到前端發(fā)送到RabbitMQ中的前述數(shù)據(jù);3)根據(jù)這些數(shù)據(jù),從數(shù)據(jù)庫篩選特定話題,特定預(yù)測開始時間的數(shù)據(jù),以特定時間粒度整合數(shù)據(jù),然后形成預(yù)測模型的輸入;4)通過模型得到預(yù)測結(jié)果,發(fā)送到RabbitMQ隊列中;5)前端從隊列中讀取數(shù)據(jù),通過UI界面展示預(yù)測曲線。
系統(tǒng)運用立場檢測算法對后端數(shù)據(jù)庫抓取到的輿情數(shù)據(jù)分析出個體用戶的立場,從而形成用戶的精準(zhǔn)畫像。立場檢測系統(tǒng)功能流程如圖3所示。
圖3 網(wǎng)絡(luò)群體決策分析系統(tǒng)流程圖
根據(jù)圖3,系統(tǒng)的組成部分如下。
1)數(shù)據(jù)預(yù)處理
決策分析系統(tǒng)首先從輿情數(shù)據(jù)采集系統(tǒng)的Redis和MongoDB數(shù)據(jù)庫中獲取原始數(shù)據(jù),然后從原始數(shù)據(jù)中解析出2部分信息:一是用戶針對某一特定話題發(fā)布的文本信息,該信息用于后續(xù)進行立場分析;二是用戶的基本信息,作為精準(zhǔn)畫像功能的部分輸入。
2)用戶立場分析
鑒于社交媒體輿論的特點,用戶的觀點一般顯性或隱性地體現(xiàn)在用戶發(fā)布的文本信息中。為了便于掌握所有用戶的立場和觀點,讓計算機學(xué)會自動識別用戶立場是極其必要的。因此,本系統(tǒng)圍繞某些有意義的話題,根據(jù)用戶在社交媒體上發(fā)布的文本信息,利用自然語言處理技術(shù)對這些文本信息所透露出的觀點進行立場檢測,能夠?qū)崿F(xiàn)對用戶潛在觀點的識別,并且將此結(jié)果作為精準(zhǔn)畫像和群體決策分析的部分輸入。
根據(jù)系統(tǒng)的組成原理,詳細的系統(tǒng)結(jié)構(gòu)框架如圖4所示。
圖4 系統(tǒng)結(jié)構(gòu)框架
系統(tǒng)主要包括了以下的功能模塊。
1)信息篩選與整合模塊:從控制臺接收指令后從數(shù)據(jù)庫獲取相應(yīng)信息,并將信息通過整合,形成數(shù)據(jù)存儲文件(例如txt文件)存入文件系統(tǒng),并向控制臺反饋結(jié)果。
2)立場檢測模塊:從文件系統(tǒng)中讀取包含用戶數(shù)據(jù)文件,獲取用戶數(shù)據(jù),通過立場檢測模型進行立場判斷,給每條文本打上分數(shù)標(biāo)簽,而后根據(jù)控制臺的指令,將打上標(biāo)簽的文本數(shù)據(jù)傳遞給輸出模塊或群體立場預(yù)測模塊做進一步處理。
3)立場趨勢預(yù)測模塊:接收立場檢測模塊傳來的數(shù)據(jù),通過群體立場預(yù)測算法進行處理,最終形成針對某一話題的立場趨勢預(yù)測,并將結(jié)果傳遞給輸出模塊。
4)輸出模塊:完成兩方面功能。一是接收立場檢測模塊傳來的數(shù)據(jù),將數(shù)據(jù)進行整合和轉(zhuǎn)化,形成用戶新的屬性標(biāo)簽,用以描述用戶的精準(zhǔn)畫像;二是將精準(zhǔn)畫像的標(biāo)簽數(shù)據(jù)或立場趨勢預(yù)測模塊傳遞來的數(shù)據(jù)進行整合和處理,形成表格或圖像形式的分析結(jié)果,用于前端展示,同時提供將表格或圖像數(shù)據(jù)存儲到數(shù)據(jù)庫中的功能。
5)文件系統(tǒng):對用戶數(shù)據(jù)文件進行分布式存儲與管理。
6)控制臺:作為用戶接口,進行系統(tǒng)配置和系統(tǒng)控制。
系統(tǒng)運行的內(nèi)部接口主要集中在3個方面,包括:1)用戶與請求之間的接口;2)請求與數(shù)據(jù)庫之間的接口;3)Java后端與Python程序之間的接口。
用戶與請求之間的接口交互通過瀏覽器來實現(xiàn),如圖5所示。
圖5 用戶與請求之間的接口框架
請求與數(shù)據(jù)庫之間的接口描述,如圖6所示。
圖6 請求與數(shù)據(jù)庫的接口框架
Java后端和Python進程之間的通信架構(gòu)通過Shell命令進行交互,后臺執(zhí)行Shell命令,運行python程序,獲取命令行輸出結(jié)果。
根據(jù)前述總體設(shè)計,本系統(tǒng)由控制臺、信息篩選與整合模塊、立場檢測模塊、趨勢預(yù)測模塊和輸出模塊等組成。本節(jié)將詳細闡述3個核心功能塊在運行過程中與其他輔助模塊的信息交互,分別是信息篩選和整合模塊、立場檢測模塊和趨勢預(yù)測模塊。
3.3.1 信息篩選與整合模塊
信息篩選與整合模塊主要由數(shù)據(jù)緩存、數(shù)據(jù)篩選和數(shù)據(jù)整合3個模塊組成。其中,首先從控制臺接收“取數(shù)據(jù)”指令,根據(jù)指令類型,在數(shù)據(jù)庫中篩選數(shù)據(jù),然后根據(jù)數(shù)據(jù)存儲地址取數(shù)據(jù),緩存到“數(shù)據(jù)緩存”模塊中;接著通過“數(shù)據(jù)篩選”模塊進一步篩選數(shù)據(jù);通過“數(shù)據(jù)整合”模塊重建數(shù)據(jù)結(jié)構(gòu);最后將處理后的數(shù)據(jù)傳遞給文件系統(tǒng),并將處理結(jié)果反饋給控制臺。
3.3.2 立場檢測模塊
立場檢測(Stance Detection)模塊是本系統(tǒng)的核心組成部件,精準(zhǔn)畫像功能和群體決策預(yù)測功能皆建立在該功能模塊的實現(xiàn)之上。本系統(tǒng)的立場檢測技術(shù)基于自然語言處理領(lǐng)域目前表現(xiàn)最為優(yōu)異的深度學(xué)習(xí)模型BERT(Bidirectional Encoder Representations from Transformers)以及廣泛使用的Softmax分類器。具體的運行設(shè)計如下所述。
1)立場檢測模塊從文件系統(tǒng)取“文本數(shù)據(jù)”,而后根據(jù)預(yù)先設(shè)定的字典,將文本中的文字和文字在字典中對應(yīng)的數(shù)字進行映射,即Token化,形成數(shù)字序列。
2)將數(shù)字序列輸入已預(yù)訓(xùn)練好的BERT模型,得到數(shù)字序列的特征表示,而后取這一特征表示輸入進Softmax分類器進行立場識別。立場分為3種:贊同、中立、反對,分別對應(yīng)分值1,0,?1。
3)最后將立場分值附加到最初的文本數(shù)據(jù)后面,形成“文本+立場”的新數(shù)據(jù)結(jié)構(gòu),并根據(jù)控制臺的指令送往輸出模塊或群體決策分析模塊。
3.3.3 趨勢預(yù)測模塊
趨勢預(yù)測模塊架構(gòu)具體的運行設(shè)計如下。
1)數(shù)據(jù)預(yù)處理模塊首先獲取立場檢測模塊的輸出:用戶立場,對所有用戶的用戶立場進行連續(xù)化處理,將用戶立場轉(zhuǎn)換為區(qū)間[?1,1]的實數(shù),其中,用戶對目標(biāo)實體的立場偏積極,則接近1;反之越消極,則越接近 ?1。
2)將連續(xù)化處理后的立場輸入已預(yù)訓(xùn)練好的HK模型,得到立場迭代穩(wěn)定后的用戶立場分布。同時將每輪迭代過程中用戶立場的實時數(shù)據(jù),輸出至輸出模塊進行群體決策變化過程的可視化呈現(xiàn)。
3)將所有用戶的立場分布輸入至Softmax分類器進行群體決策識別,將結(jié)果輸出至輸出模塊。穩(wěn)定后的群體決策分為3種:達成共識、兩極分化和觀點分裂。
本系統(tǒng)在確定最終深度學(xué)習(xí)模型之前,將立場檢測領(lǐng)域主流的3種框架結(jié)構(gòu)進行了一系列的對比實驗,具體包括:BERT模型[10]、Ernie2.0+BiLSTM模型[11]和RoBERTa模型[12]。
在實驗中,采用了論壇真實數(shù)據(jù)以及NLPCC會議的公開數(shù)據(jù)集[13?15]作為測試數(shù)據(jù),通過分別對3個模型單獨調(diào)優(yōu),得到表1的實驗結(jié)果。
表1 學(xué)習(xí)模型準(zhǔn)確度結(jié)果
基于學(xué)習(xí)模型,立場趨勢預(yù)測軟件的界面是對各個話題的趨勢進行預(yù)測,如圖7所示。其中,橫坐標(biāo)負數(shù)值為歷史數(shù)據(jù),正數(shù)值為預(yù)測的數(shù)據(jù)。點擊篩選框的選擇話題下拉菜單,會顯示多個話題供用戶選擇,手動選擇預(yù)測開始時間和預(yù)測粒度。
圖7 立場趨勢預(yù)測軟件的界面
用戶選擇完成后點擊篩選,開始獲取預(yù)測圖像:①若獲取成功,顯示圖像并提示用戶“曲線更新完成”;②若超時,提示用戶“預(yù)測模塊超時,請聯(lián)系預(yù)測人員”;③若選擇的時段中沒有對應(yīng)數(shù)據(jù),也會提示用戶“該時段沒有數(shù)據(jù),請重新選擇!”。
點擊預(yù)測曲線圖中的某一時刻的點,餅圖會聯(lián)動顯示“支持” “中立” “反對”情況所占的百分比。
此外,為分析用戶畫像,軟件需要對熱帖和熱門用戶網(wǎng)絡(luò)行為屬性進行分析展示,如圖8所示。分析篩選條件包括話題、發(fā)帖日期和采集時間。選擇條件后點擊篩選按鈕會返回指定條件下的熱帖和熱門用戶的信息。直接進入該頁面顯示的信息默認篩選條件為所有話題、所有發(fā)帖日期和采集時間。
圖8 用戶網(wǎng)絡(luò)行為屬性分析