王崇偉 趙旭劍
(西南科技大學計算機科學與技術學院 四川綿陽 621010)
近年來,社交網絡作為一種新型媒體迅速發展,其中代表性平臺新浪微博成為了人們發現事件、傳播事件的主要平臺。與之對應的是爆炸式的微博量增長[1],這些數據帶來了豐富的社會事件信息,也讓用戶難以從中發現感興趣的事件。因此,從海量的微博數據中檢測事件、構建故事脈絡,可讓用戶清晰準確地了解事件的發展全貌。
為了推動故事脈絡挖掘工作的研究,一些知名國際會議也逐漸出現了類似任務,如:TAC(Text Analysis Conference)從2014年開始有了事件追蹤任務[2],ACL(Annual Meeting of the Association for Computational Linguistics)在2017年舉辦了第一屆“新聞中的事件與故事”研討會[3]。對于一些影響強烈的事件,百度百科、維基百科等網絡百科全書也會構建一條故事記錄,以展示事件的起因、經過和結果。可以看到,故事脈絡構建在文本挖掘和信息挖掘領域越來越受關注。
目前,故事脈絡生成的相關研究可分為以下三類:
(1)基于聚類算法利用相似度將事件聚類到不同的演化分支以構建故事脈絡。例如Liu等[4]基于聚類提出合并、擴展、插入3種事件操作實現故事脈絡生成;Hawwash等[5]把微博訓練成事件向量,輸入事件向量對事件進行聚類生成故事脈絡。
(2)基于貝葉斯模型把故事脈絡建模為事件特征的聯合分布,然后推斷鏈接事件。例如佘玉軒等[6]利用貝葉斯模型把故事脈絡建模為日期、時間、機構、人物、地點、主題及關鍵詞的聯合分布。Zhou等一步步對貝葉斯模型改善,提出無監督貝葉斯模型[7]、動態故事脈絡抽取模型[8]和第二代動態故事脈絡抽取模型[9],得到更加完善的故事脈絡。
(3)基于圖算法首先將事件建模為圖結構,然后利用圖中的樹生成算法直接構建故事脈絡。例如文獻[10-12]都將事件建模為圖,基于有向斯坦納樹生成故事脈絡;李瑩瑩等[13]在事件圖中識別弱連通分量,為弱連通分量構造最大生成樹得到故事脈絡。
故事脈絡生成系統主要存在兩方面挑戰,一是微博數據量龐大,并且微博轉發特性帶來大量冗余帖子,也導致時間發布存在延遲;二是微博數據內容短小稀疏,如何關聯事件并呈現故事脈絡。針對這兩個問題,已有方法存在明顯不足:聚類算法依賴豐富的事件內容,貝葉斯模型和圖算法均耗費較高的時間復雜度,說明這些方法在微博數據中不具有普適性。
基于以上挑戰,筆者把故事脈絡不同的演化分支視為不同的事件簇,將事件建模為圖結構,并利用圖卷積網絡對事件節點進行分類,構建故事脈絡不同的演化分支,最后利用事件的時間信息生成故事脈絡,設計了面向新浪微博的故事脈絡生成系統,并在真實微博數據集上進行了實驗驗證。
故事脈絡構建系統的核心在于微博檢索、事件提取和事件鏈接。其中,微博檢索模塊獨立于故事脈絡生成系統,基于Scrapy爬蟲框架,利用微博的“話題”標簽,在新浪微博自帶搜索引擎上,基于事件關鍵詞有效捕獲相關事件微博,并將數據以JSON格式存儲到本地數據庫中,在此不做過多贅述。
圖1展示了故事脈絡挖掘系統的總體架構。首先,用戶通過查詢接口在數據庫檢索相關事件;然后,系統經過事件提取模塊提取相關事件,并將得到的事件集合輸入事件鏈接模塊;最后,經過模型學習將輸出的事件簇鏈接起來得到故事脈絡。

圖1 系統總體架構Fig.1 Framework of system
事件提取旨在對微博進行過濾分析,從中提取代表性事件。首先對微博進行預處理,包括微博切分、模糊時間補全和事件去重3個步驟,得到大致的事件集合;然后基于微博的傳播特性對微博事件進行排序篩選,基于事件的傳播度排名提取代表性事件。
1.1.1 預處理
微博切分:微博中每條完整的句子都能表示一種完整的事件信息,因此基于能夠表達句子結尾意思的標點符號對微博帖子進行切分,考慮將每一個包含時間表達式的微博帖子視為一個事件,這些事件構成了最初的故事脈絡事件集合。
模糊時間補全:事件最顯著的特征是時間特征,但通過微博切分得到的事件中,往往存在諸如“5月28日”“29日”等不夠準確的模糊時間表達式。對于模糊時間,提出一種順序匹配的方法補全,包括以下步驟:(1)提取事件中的所有模糊時間表達式;(2)將原始微博發布時間作為基準時間;(3)用基準時間補全集合的下一個時間戳;(4)將新補全的時間戳作為新的基準時間;(5)重復以上步驟直到集合遍歷完畢。
事件去重:由于微博的“社交”特性,轉發將導致大量的冗余微博,使得事件集合將存在大量冗余事件并且導致信息泛濫。本文提出使用公共子串對事件集合進行冗余過濾,可以有效去除由轉發帶來的重復微博,由下式計算:
Sim(ei,ej)=Simsubstr(di,dj)
(1)
其中di和dj分別是事件ei和ej的原始文本。
1.1.2 代表性事件提取
經微博預處理得到了粗粒度的事件集合,但是故事脈絡旨在直觀清晰地展示故事脈絡中事件的演化。因此,故事脈絡中的事件需要能夠反映事件發展的全過程。在社交網絡中,社會事件在其中發酵傳播,不同用戶對事件傳播具有不同的傳播影響。
由此,考慮微博事件的傳播影響力衡量事件是否為故事脈絡中的代表性事件,并利用微博的發布者粉絲量以及轉發、評論和點贊的數量來量化事件的傳播影響力。具體來說,把微博的傳播影響力定義為四元組S=
Score(ei)=∑wiSi
(2)
其中wi為S中不同元素的權重值,本文中w1取值為發布者粉絲數歸一化值。此外,轉發最能代表用戶對微博帖子的認可,評論次之,點贊再次之,因此本文中三者權重取值為[w2,w3,w4]=[1.2,1.0,0.8]。由式(2)計算出每個事件的重要性得分后,依據得分對事件進行排序,刪除排名靠后的事件,選取排名靠前的事件作為代表性事件。其中事件總數為M,代表性事件選取數量為N,且滿足式(3)的條件:
(3)
即選取的前N個代表性事件滿足其傳播影響力總和恰好小于M個事件影響力總和的一半,這N個事件將作為事件鏈接階段的輸入。
事件鏈接模塊主要對事件進行細粒度分類,將包含強關聯關系的事件分類到不同的事件簇,然后基于時間信息將事件鏈接。本文考慮基于事件相似性將事件建模為圖結構,然后利用圖卷積網絡[14]進行事件關系學習,輸出事件簇。
1.2.1 創建圖結構
由于圖能夠表示事件間的復雜關系,因此首先將事件建模為圖結構。具體來說,基于事件相似性建立了一個無向圖G=(V,E),其中V表示事件節點集合,每個節點v∈V都包含事件信息,E表示邊集合,每條邊e=(v1,v2)∈E都表示兩個事件節點間的相似性關系,其相似性權重由式(4)計算:
Edgeei,ej=αSim(ei,ej)+βSimsubstr(ei,ej)
(4)
α和β為權重比系數,且α+β=1。式中包括余弦相似度和基于最長公共子串的事件相似度。最長公共子串表示事件句子層面的一種相似性關系,而余弦相似性表示事件集合宏觀層面的一種相似性關系,將兩者結合能更有效地計算事件間關聯關系,并建立事件圖結構,加強圖卷積網絡模型在圖上的學習能力。
建立圖結構時,當兩個事件間的相似性權重大于某個閾值λ1時,在兩個事件構造一條無向邊,邊權重即為式(3)計算得到的相似性權重。相似性權重越大,表明事件關聯關系越緊密。通過計算事件集合中兩兩事件間的相似性權重,得到事件圖的鄰接矩陣。
1.2.2 初始化事件簇
為避免故事脈絡自動構建過程中的人為因素干擾,設計預聚類對事件進行初始簇學習,算法1展示了通過預聚類形成初始簇的過程,對于事件集合E={e1,e2,…,ei,…,en},首先將第一個事件e1作為第一個事件簇;然后計算事件e2和事件簇的相似度,當相似度小于閾值λ2時,將e2作為新的事件簇;接著,繼續輸入事件ei,計算事件ei和每一個事件簇的相似度,當相似度小于閾值λ2時,將ei作為新的事件簇;重復以上過程,直到輸入的事件與每個事件簇的相似度都大于λ2。此時,得到由預聚類算法生成的初始事件簇。

算法 1: 初始事件簇生成輸入: 事件集合 E={e1, e2,…ei,…en}輸出: 初始事件簇 E={e1’, e2’,…ei’,…em’}step 1:S←{ }step 2:for i in E.size do // 將第一個事件作為第一個初始事件簇step 3:if S = null thenstep 4: S.add(E.get(i))step 5: E.remove(E.get(i))step 6:else // 遍歷初始事件簇,計算相似度step 7: for j in S.size dostep 8: similar ← cos(E.get(i),S.get(j)) // 當相似度小于閾值時加入事件簇step 9: if similar < λ2 thenstep 10: S.add(E.get(i))step 11: E.remove(E.get(i)) //返回構建的初始事件簇step 12:return S
1.2.3 事件圖卷積網絡
圖卷積網絡[15](Graph Convolutional Network, GCN)是一種對圖結構進行學習的半監督神經網絡。由于社交網絡中數據稀疏的問題,在衡量事件相似性時應考慮同一演化分支中的兩個事件可能被第三個事件關聯。具體來說,基于圖的方法通過相似性將事件建模為圖結構,但在圖算法生成故事脈絡的過程中,兩個潛在相關事件的關聯性可能會被第三個事件削弱。而基于圖卷積網絡的模型中,訓練過程中節點間通過特征傳遞能夠加強事件間的關聯關系,因此可以得到更好的效果。
由此將預聚類得到的初始事件簇作為標簽節點輸入圖卷積模型進行訓練,并且事件節點特征被表示為事件文本的TF-IDF向量[16],和事件圖的鄰接矩陣共同作為圖卷積網絡模型輸入。具體來說,建立了式(5)傳播規則的兩層圖卷積網絡模型,允許圖中最遠兩個事件節點進行特征傳遞。
(5)

(6)
圖2展示了圖卷積網絡模型架構,基于兩層事件相似性關系,事件被建模為事件關系圖結構,然后事件關系圖的鄰接矩陣和特征矩陣將作為模型輸入,經過模型的多層網絡學習,最終輸出每個事件節點的事件簇分類結果。

圖2 事件圖卷積網絡模型架構Fig.2 Framework of event graph convolutional network
最后將模型輸出的每個事件簇中的事件按照時間順序進行鏈接,形成故事脈絡中事件的不同演化分支,這些演化分支按照分支中首個事件的時序關系進行鏈接,得到最終的事件故事脈絡。
通過微博檢索模塊,基于新浪微博自帶搜索工具(https://s.weibo.com/),本文搜集了真實社會事件“長春長生疫苗事件”的所有熱門微博,該事件數據集時間跨度為2018年7月11日至2019年9月1日,共計73 614條熱門微博帖子。將該微博數據集作為故事脈絡挖掘系統的輸入,圖3展示了故事脈絡挖掘系統生成的“長春長生疫苗事件”故事脈絡示意圖(局部),故事脈絡生成系統快照如圖4所示,共包含4個功能區域。

圖3 故事脈絡示意圖Fig.3 Diagram of Storyline
圖4區域1為故事脈絡系統可視化結果,圖中 “長春長生疫苗事件”故事脈絡共13條演化分支;圖4區域3為選中的演化分支的事件詳情,例如圖中展示演化分支為“疫苗管理法的誕生過程”;圖4區域2為演化分支的核心詞集合,圖4區域4為核心詞的分布細節,讓用戶準確把握該演化分支的主題方向。此外,用戶能夠在視圖上方選擇事件的起止時間。故事脈絡生成系統還提供了一個查詢接口,用戶能夠在搜索框對本地數據庫中的相關事件進行檢索。故事脈絡視圖中,可以通過點擊不同的“Branch”演化分支按鈕切換查看故事脈絡中事件的演化分支。根據故事脈絡的可視化結果,用戶能夠清晰準確地把握事件演化流程與演化方向,了解事件發展的全部進程。

圖4 系統快照Fig.4 System snapshot
為了驗證故事脈絡挖掘系統的實際性能,將聚類算法[4]、貝葉斯模型[6]和基于圖的方法[12]作為實驗對照組,并基于邏輯性和可理解性兩種評分標準評價系統性能。邏輯性指故事脈絡中事件演化的邏輯關系,理解性指通過故事脈絡用戶是否能夠清晰了解事件發展的全部過程。最后,隨機邀請了10名評價人員,對不同方法構建的故事脈絡進行打分(1~10分),用戶評價的得分排名如表1所示。

表1 基于用戶體驗的故事脈絡評價(得分平均排名)Table 1 Story context evaluation based on user experience (average score ranking)
結果表明,本文方法生成的故事脈絡在邏輯性和理解性上,平均排名均優于傳統方法。通過對“長春長生疫苗事件”的真實挖掘分析,構建了疫苗事件故事脈絡,能夠幫助用戶直觀、準確地了解該事件的全部發展流程以及事件的演化方向,滿足了用戶需求,也避免了用戶自己從繁雜瑣碎的微博中了解事件的發展進程。
針對新浪微博信息爆炸式增長,用戶難以準確把握其中社會事件發展的問題,本文提出基于新浪微博的故事脈絡生成系統,該系統具有以下特點: (1)基于微博傳播影響力能夠準確提取微博中的代表性事件;(2)利用圖卷積網絡捕獲事件間的復雜關聯關系;(3)向用戶提供可視化故事脈絡及交互接口。實驗驗證了該系統在邏輯性、理解性方面優于聚類算法、貝葉斯模型和基于圖的方法,能夠使用戶清晰地把握事件演化流程與演化方向,并輕松了解事件發展的全部進程。
此外,本文也存在以下不足:(1)微博檢索模塊獨立于故事脈絡構建模塊之外,承擔數據檢索、匹配和儲存的功能,這意味著用戶目前只能從本地數據庫中查看社會事件的故事脈絡。未來工作中,將考慮將在線微博檢索功能融入故事脈絡構建中,支持用戶能夠在線檢索社會事件,實時提取事件并構建故事脈絡。(2)事件提取模塊雖然能夠有效提取事件,但未對事件時間分布進行分析,導致提取事件內容過于詳細,影響故事脈絡呈現效果。后續工作中,將考慮事件的時間特征,建立事件隨時間演化的分布模型,提取更高質量的代表性事件。(3)事件鏈接模塊利用圖卷積網絡雖然能夠學習事件間復雜關系,但仍屬于一種半監督學習模型,需要帶標簽數據。雖然本文提出用預聚類構造并形成初始事件簇作為模型中的帶標簽節點,但在實際應用中仍舊存在一些局限性。后續將探索一種更加精確的無監督方法來構建初始簇作為模型標簽節點,避免自動故事脈絡構建中的人為干擾。