趙姝穎,肖寧,曾華圣,王海兮,常明芳
中國電子科技集團公司 第三十研究所,四川 成都 610000
立場檢測源于人工智能自然語言處理技術,是情感分類技術的一個前沿分支,可以看作是針對特定目標話題進行的情感分析任務[1]。立場檢測也是自然語言處理研究的一個熱門主題,Mohammad等[2]在2016年構建了基于 Twitter數據的立場檢測英文數據集,并用于SemEval 2016會議的Task 6:立場檢測。由于中文語言的多義性、復雜性和語法的獨特性,面向中文的立場檢測更具有挑戰性。2016年中國的相關學者構建了基于中文微博的立場檢測數據集,并將其用于2016年的自然語言處理與中文計算會議發表的任務中,進一步推動了中文立場檢測的研究。
立場檢測任務使用自然語言處理(NLP)技術,根據對目標話題的文本內容分析其立場傾向是“贊成”、 “反對”,還是“中立”[3]。立場檢測主要強調根據特定的目標話題環境來分析判斷文本內容的立場,雖然與情感分析相似,但不同點在于情感分析側重于一段文本中情感特征的極性,在很多情況下,分析文本內容的立場傾向僅根據文本的情感極性是無法準確判斷的。 例如,某些微博在不考慮任何目標話題的前提, 其情感極性是消極反對的,但是當把它放在某個指定的話題環境中時,其立場可能與單獨分析得到的情感極性恰恰相反。通過這個例子可以看出,相比于情感分析任務,立場檢測任務對人工智能模型的文本理解能力提出了更高的要求,不僅需要去識別句子中能代表用戶情感態度的關鍵詞,還需要去理解完整的句意,并且通過計算機語言表述出來,即得到句意的特征表示。然后,從大量的數據集中學習到從特征表示到用戶立場的映射函數,從而完成對文本所持有的立場進行精準判斷。
針對立場檢測任務,國內外研究人員目前使用的方法主要包括:基于特征工程的機器學習方法和基于神經網絡的深度學習方法。
基于特征工程的機器學習方法:從微博話題文本中提取出有關情感和主題的詞匯,然后將這些詞匯作為特征詞,并使用Word2Vec進行詞向量的訓練,再將詞向量求平均后,作為該文本的特征傳給SVM分類器中進行立場檢測的立場傾向分類。相關實驗表明,當文本特征分析僅使用情感詞時,情緒并不能準確地反映作者的立場傾向,其立場分類效果并不理想,而加入主題和情感的相關詞匯共同作為特征時的選取效果更好。一些學者也探究了文本的多種特征,諸如基于同義詞典的詞袋特征、文本的Word2Vec的字向量和詞向量等不同的特性交叉組合,分析其對立場檢測的影響,并且分別使用SVM、隨機森林以及決策樹對進行立場分類。實驗表明,對于立場分類結果,詞與立場標簽的共現關系同Word2Vec的字與詞向量的組合的改善最為明顯。
近年來,深度學習的迅猛發展,也促進了自然語言處理的進步。基于深度學習的方法是直接將文本內容全部映射為向量,再通過多層神經網絡學習標簽并自動提取文本特征,相比于需要人工特征抽取工作的基于特征工程的機器學習方法而言,基于深度學習的方法能夠讓機器智能提取特征,這是一種優勢。目前,在有關立場檢測的現有研究中,基于深度學習的工作主要有2種主流的思路,一是通過使用不同方式將目標話題信息添加到微博文本內容中來提升立場檢測效果,二是從語言學的角度,對深度學習模型的結構進行創新,使得模型能夠學習到文本的句意信息,從而達到更為精準的立場檢測結果。基于卷積神經網絡(CNN)的立場檢測使用基于Yoon Kim的卷積神經網絡對微博文本進行分類,它使用了一種模型投票機制,在每一個迭代周期訓練步驟結束后,通過融合訓練過程中產生的各模型結果,迭代出一些測試集數據并用于預測學習標簽,最后在所有的迭代周期訓練完成時,從測試集數據中選擇被預測次數最多的標簽并作為最終結果輸出,但這僅適用于對微博文本進行了特征提取和分類,而忽略了在立場檢測中目標話題的作用。針對這個問題,部分學者提出了一個雙向條件編碼模型將目標話題與微博文本進行拼接,其中微博文本BiLSTM的cell狀態層的初始值,是通過使用BiLSTM將目標話題cell狀態層的輸出而來的,因而完成目標話題與微博文本序列的拼接,并且目標話題和微博文本使用隱層狀態的BiLSTM編碼后彼此之間是相互獨立的[4]。針對目標話題,為了增強雙向條件編碼模型對立場檢測的影響,一些學者接著提出了一種基于注意力的BiLSTM-CNN模型用來協助檢測中文微博立場。該方法首先使用BiLSTM獲取文本的全局特征,使用卷積神經網絡(CNN)來獲取文本的局部卷積特征;然后將文本的 BiLSTM輸出通過使用基于注意力(Attention)的權重矩陣方法將其加到CNN的輸出中;最后,向Softmax層中輸入所獲取到的 CNN的句子表示并對其進行立場分類。一些學者在基于注意力機制的方法上提出了基于兩階段注意力機制的立場檢測模型,首先使用Word2Vec表示詞向量;然后通過Attention計算微博文本的詞向量和目標話題的詞向量,BiLSTM用于提取微博文本的特征,將目標話題再次與所提取到的特征進行Attention 計算,并使用Softmax對最終的結果進行分類[5]。
然而以上方法的思路在實踐中的效果均不太理想,隨 著Google公 司BERT(Bidirectional Encoder Representations from Transformers)模型的推出,將深度學習模型對文本語義的理解能力提高到了一個里程碑的高度,該模型在立場檢測領域也展現出了優異的能力。因而本項目將會基于BERT模型進行立場檢測技術的研發。
2018年谷歌公司AI團隊發布了BERT模型,該模型在機器閱讀理解頂級水平測試SQuAD1.1中展示了驚人的結果:它在2個衡量指標上均超過了人類,并且還在11種不同NLP測試中獲得了最好的成績,成就包括將GLUE基準推至80.4%(絕對改進7.6%),以及MultiNLI準確度達到86.7% (絕對改進率5.6%)等方面。可以預見的是,BERT將為NLP帶來重大改變,也是近兩年中NLP領域最突出的進展[6]。
RoBERTa(Robustly Optimized BERT Pretraining Approach)模型是基于BERT 的一種改進版本,是BERT 在多個層面上的重大改進。RoBERTa 在模型規模、算力和數據上,主要比 BERT 提升了以下幾點。
1) 更大的模型參數量(從RoBERTa論文提供的訓練時間來看,模型使用1 024塊V100 GPU訓練了1 d的時間)。
2) 更多的訓練數據(包括CC-NEWS等在內的160 GB純文本)[7]。
RoBERTa 還有很多訓練方法上的改進。
1) 動態掩碼:BERT依賴隨機掩碼和預測token。原版的BERT實現在數據預處理期間執行1次掩碼以獲得1個靜態掩碼。而RoBERTa在每次將1個序列輸入模型時都會生成1個新的掩碼模式,通過動態掩碼進行更新。這樣,在連續輸入海量數據的過程中,模型會逐漸適應不同的動態掩碼策略并學習不同的語言表示特征。
2) 更大批次:RoBERTa在訓練過程中使用了更大的批數量。研究人員嘗試過從256~8 000不等的批數量[8]。
3)文本編碼:Byte-Pair Encoding(BPE)是字符級表示和詞級表示特征的混合,并支持處理自然語言語料庫中的許多常見詞匯。原版的BERT實現使用大小為30 KB的字符級別的BPE詞匯,該詞匯表是在利用啟發式分詞規則對輸入進行預處理之后學習得到的。Facebook研究者沒有采用這種方式,而是考慮使用更大的字節級別BPE詞匯表來訓練BERT,這一詞匯表包含50 KB的subword單元,并且在輸入時沒有做任何額外的預處理或分詞工作[9]。
立場檢測模塊是本系統的核心組成部件,精準畫像功能和群體決策預測功能皆建立在該功能模塊的實現之上。本系統的立場檢測技術總體來講,結合了中文自然語言處理領域目前表現最為優異的深度學習模型RoBERTa以及Softmax分類器。通過RoBERTa預訓練模型對輸入的中文文本數據集進行學習,從而得到文本的特征表示,最后通過Softmax分類器對特征表示進行分類判斷得到結果,其架構如圖1所示。

圖1 立場檢測模型系統框架
系統運行邏輯如下所述。
1) 立場檢測模塊從文件系統取“文本數據”,而后根據預先設定的字典,將文本中的文字和文字在字典中對應的數字進行映射,即Token化,形成數字序列。
2) 將數字序列輸入已預訓練好的RoBERTa模型,得到數字序列的特征表示,而后取這一特征表示輸入進Softmax分類器進行立場識別。立場分為3種:贊同、中立、反對,分別對應分值1、0、?1。
3) 最后將立場分值附加到最初的文本數據后面,形成“文本+立場”的新數據結構,并根據控制臺的指令送往輸出模塊或群體決策分析模塊。
具體的實現方式如下。
1) 將數據采集系統采集的文本信息Token化,然后逐條輸入進Pre-trained RoBERTa模型,從而通過多個Transformer層學習到文本信息的抽象表示。
2) 取Pre-trained RoBERTa模型輸出層的頭部位置的表示向量,將該向量輸入Softmax分類器。
3) 通過Softmax分類器形成1個三元組數值,分別表示贊同、中立、反對對應的概率,概率最高的即為該文本針對某一主題的實際觀點。
本系統在LSTM模型的基礎上構建立場趨勢預測模型。模型細節如下所述。
2.3.1 數據處理
訓練數據采集于互聯網論壇,數據為某時間區間內某個話題的所有用戶立場占比的時間序列數據,訓練時一共使用了11個話題的數據。預測的輸入是5個時間點的立場占比,輸出是接下來的2個時間點的立場占比。因此,訓練時將數據集分割成7個一組的形式,前5個數據作為輸入,后2個數據作為輸出的標簽。
2.32 模型結構
模型采用4層LSTM加上1個全連接層(Full Connected Layer)的輸出節點為2個,對應于要預測的2個時間節點。模型的loss采用MSE(Mean Square Error)均方差誤差,優化器采用Adam算法。具體模型結構如圖2所示。

圖2 趨勢預測模型結構
2.3.3 與前端的交互設計
趨勢預測模塊采用RabbitMQ消息隊列中間件與前端進行交互。具體工作流程如下:1)用戶通過前端接口選擇預測的“話題” “預測開始時間” “預測時間粒度”,點擊“篩選”按鈕后,前端將這3個數據發送到RabbitMQ消息隊列;2)趨勢預測模塊通過訂閱模式,實時地獲取到前端發送到RabbitMQ中的前述數據;3)根據這些數據,從數據庫篩選特定話題,特定預測開始時間的數據,以特定時間粒度整合數據,然后形成預測模型的輸入;4)通過模型得到預測結果,發送到RabbitMQ隊列中;5)前端從隊列中讀取數據,通過UI界面展示預測曲線。
系統運用立場檢測算法對后端數據庫抓取到的輿情數據分析出個體用戶的立場,從而形成用戶的精準畫像。立場檢測系統功能流程如圖3所示。

圖3 網絡群體決策分析系統流程圖
根據圖3,系統的組成部分如下。
1)數據預處理
決策分析系統首先從輿情數據采集系統的Redis和MongoDB數據庫中獲取原始數據,然后從原始數據中解析出2部分信息:一是用戶針對某一特定話題發布的文本信息,該信息用于后續進行立場分析;二是用戶的基本信息,作為精準畫像功能的部分輸入。
2)用戶立場分析
鑒于社交媒體輿論的特點,用戶的觀點一般顯性或隱性地體現在用戶發布的文本信息中。為了便于掌握所有用戶的立場和觀點,讓計算機學會自動識別用戶立場是極其必要的。因此,本系統圍繞某些有意義的話題,根據用戶在社交媒體上發布的文本信息,利用自然語言處理技術對這些文本信息所透露出的觀點進行立場檢測,能夠實現對用戶潛在觀點的識別,并且將此結果作為精準畫像和群體決策分析的部分輸入。
根據系統的組成原理,詳細的系統結構框架如圖4所示。

圖4 系統結構框架
系統主要包括了以下的功能模塊。
1)信息篩選與整合模塊:從控制臺接收指令后從數據庫獲取相應信息,并將信息通過整合,形成數據存儲文件(例如txt文件)存入文件系統,并向控制臺反饋結果。
2)立場檢測模塊:從文件系統中讀取包含用戶數據文件,獲取用戶數據,通過立場檢測模型進行立場判斷,給每條文本打上分數標簽,而后根據控制臺的指令,將打上標簽的文本數據傳遞給輸出模塊或群體立場預測模塊做進一步處理。
3)立場趨勢預測模塊:接收立場檢測模塊傳來的數據,通過群體立場預測算法進行處理,最終形成針對某一話題的立場趨勢預測,并將結果傳遞給輸出模塊。
4)輸出模塊:完成兩方面功能。一是接收立場檢測模塊傳來的數據,將數據進行整合和轉化,形成用戶新的屬性標簽,用以描述用戶的精準畫像;二是將精準畫像的標簽數據或立場趨勢預測模塊傳遞來的數據進行整合和處理,形成表格或圖像形式的分析結果,用于前端展示,同時提供將表格或圖像數據存儲到數據庫中的功能。
5)文件系統:對用戶數據文件進行分布式存儲與管理。
6)控制臺:作為用戶接口,進行系統配置和系統控制。
系統運行的內部接口主要集中在3個方面,包括:1)用戶與請求之間的接口;2)請求與數據庫之間的接口;3)Java后端與Python程序之間的接口。
用戶與請求之間的接口交互通過瀏覽器來實現,如圖5所示。

圖5 用戶與請求之間的接口框架
請求與數據庫之間的接口描述,如圖6所示。

圖6 請求與數據庫的接口框架
Java后端和Python進程之間的通信架構通過Shell命令進行交互,后臺執行Shell命令,運行python程序,獲取命令行輸出結果。
根據前述總體設計,本系統由控制臺、信息篩選與整合模塊、立場檢測模塊、趨勢預測模塊和輸出模塊等組成。本節將詳細闡述3個核心功能塊在運行過程中與其他輔助模塊的信息交互,分別是信息篩選和整合模塊、立場檢測模塊和趨勢預測模塊。
3.3.1 信息篩選與整合模塊
信息篩選與整合模塊主要由數據緩存、數據篩選和數據整合3個模塊組成。其中,首先從控制臺接收“取數據”指令,根據指令類型,在數據庫中篩選數據,然后根據數據存儲地址取數據,緩存到“數據緩存”模塊中;接著通過“數據篩選”模塊進一步篩選數據;通過“數據整合”模塊重建數據結構;最后將處理后的數據傳遞給文件系統,并將處理結果反饋給控制臺。
3.3.2 立場檢測模塊
立場檢測(Stance Detection)模塊是本系統的核心組成部件,精準畫像功能和群體決策預測功能皆建立在該功能模塊的實現之上。本系統的立場檢測技術基于自然語言處理領域目前表現最為優異的深度學習模型BERT(Bidirectional Encoder Representations from Transformers)以及廣泛使用的Softmax分類器。具體的運行設計如下所述。
1)立場檢測模塊從文件系統取“文本數據”,而后根據預先設定的字典,將文本中的文字和文字在字典中對應的數字進行映射,即Token化,形成數字序列。
2)將數字序列輸入已預訓練好的BERT模型,得到數字序列的特征表示,而后取這一特征表示輸入進Softmax分類器進行立場識別。立場分為3種:贊同、中立、反對,分別對應分值1,0,?1。
3)最后將立場分值附加到最初的文本數據后面,形成“文本+立場”的新數據結構,并根據控制臺的指令送往輸出模塊或群體決策分析模塊。
3.3.3 趨勢預測模塊
趨勢預測模塊架構具體的運行設計如下。
1)數據預處理模塊首先獲取立場檢測模塊的輸出:用戶立場,對所有用戶的用戶立場進行連續化處理,將用戶立場轉換為區間[?1,1]的實數,其中,用戶對目標實體的立場偏積極,則接近1;反之越消極,則越接近 ?1。
2)將連續化處理后的立場輸入已預訓練好的HK模型,得到立場迭代穩定后的用戶立場分布。同時將每輪迭代過程中用戶立場的實時數據,輸出至輸出模塊進行群體決策變化過程的可視化呈現。
3)將所有用戶的立場分布輸入至Softmax分類器進行群體決策識別,將結果輸出至輸出模塊。穩定后的群體決策分為3種:達成共識、兩極分化和觀點分裂。
本系統在確定最終深度學習模型之前,將立場檢測領域主流的3種框架結構進行了一系列的對比實驗,具體包括:BERT模型[10]、Ernie2.0+BiLSTM模型[11]和RoBERTa模型[12]。
在實驗中,采用了論壇真實數據以及NLPCC會議的公開數據集[13?15]作為測試數據,通過分別對3個模型單獨調優,得到表1的實驗結果。

表1 學習模型準確度結果
基于學習模型,立場趨勢預測軟件的界面是對各個話題的趨勢進行預測,如圖7所示。其中,橫坐標負數值為歷史數據,正數值為預測的數據。點擊篩選框的選擇話題下拉菜單,會顯示多個話題供用戶選擇,手動選擇預測開始時間和預測粒度。

圖7 立場趨勢預測軟件的界面
用戶選擇完成后點擊篩選,開始獲取預測圖像:①若獲取成功,顯示圖像并提示用戶“曲線更新完成”;②若超時,提示用戶“預測模塊超時,請聯系預測人員”;③若選擇的時段中沒有對應數據,也會提示用戶“該時段沒有數據,請重新選擇!”。
點擊預測曲線圖中的某一時刻的點,餅圖會聯動顯示“支持” “中立” “反對”情況所占的百分比。
此外,為分析用戶畫像,軟件需要對熱帖和熱門用戶網絡行為屬性進行分析展示,如圖8所示。分析篩選條件包括話題、發帖日期和采集時間。選擇條件后點擊篩選按鈕會返回指定條件下的熱帖和熱門用戶的信息。直接進入該頁面顯示的信息默認篩選條件為所有話題、所有發帖日期和采集時間。

圖8 用戶網絡行為屬性分析