劉昱彤 吳 斌 白 婷
(北京市智能通信軟件與多媒體重點實驗室(北京郵電大學) 北京 100876)(北京郵電大學計算機學院 北京 100876)
古詩詞在中國古典文學中占有極其重要的地位.隨著數字人文的發展,使用計算語言學和統計學的方法輔助詩詞的研究已成為一種普遍趨勢.如今,關于詩詞的知識是碎片化的,原因是互聯網上可得到的詩詞知識,一方面來自詩詞本身,另一方面來自詩詞的解讀資料,比如詩詞的注釋、譯文、鑒賞等.將古詩詞中的詞語通過語義的關聯,以知識的形式聯系在一起,是一種比較合理的將詩詞的碎片化知識聯系在一起的方式.因此,古詩詞領域的知識圖譜是將詩詞的碎片化知識進行關聯、整合的必要手段.
現有的詩詞知識圖譜,如“唐詩別苑”[1]和“宋代學術傳承知識圖譜”[2].前者僅涉及到詩人社交網絡、詩人遷徙游歷、作品熱點地圖這3個方面,而后者僅涉及宋朝人物師承關系.它們僅僅從幾個特殊的方面來構建詩詞知識圖譜,但是忽略了各個部分之間的內部聯系.顯然,這些詩詞知識圖譜在內容完整性、結構合理性、條理分明性有所欠缺.關于詩詞的分析工作,如唐宋文學編年地圖[3]將詩人的時空軌跡可視化,也只停留在詩詞寫作地點和寫作時間的人工整理以及對人物軌跡簡單的統計分析上,并未涉及到詩詞中實體的識別和實體之間語義關聯的判定.為了解決以上問題,本文構建了一個內容覆蓋全面且層次結構分明的古詩詞圖譜,通過從文本中挖掘詞語的語義關聯,將古詩中的詞語用知識的形式組織起來.
現有的通用領域的中文知識圖譜,如《大詞林》、HowNet、CN-DBpedia等,對古詩中涉及到的詞匯覆蓋率極低,不能采用抽取子集的方式直接構建古詩詞領域的知識圖譜.而常規的知識圖譜構建過程對古詩詞領域并不完全適用,由于詩句不遵循語法規則,無法用實體識別、實體關系抽取等常用自然語言處理技術構建.同時也無法將詩詞中的詞匯鏈接到現有百科,因為現有百科幾乎沒有收錄古詩詞的詞語.
為了構建古詩詞知識圖譜,我們該如何找到古詩中的詞語,又該如何將詞語的語義之間建立聯系.這項工作面臨2個挑戰:1)如何界定古詩詞的詞語,又如何準確地挑選出古詩詞中出現的詞語.由于詞語構成古詩詞圖譜的節點,準確地將古詩詞中出現的詞語抽取出來是整個工作的基礎.2)如何利用和融合互聯網的多種詩詞知識源來準確地獲取詞語之間的關聯.針對第1個挑戰,為了保證詩詞詞語抽取的準確性,一般采用人工標注的方式,但人工標注過于費時費力.因此,我們的解決方案是模擬人工標注時參考詩詞注釋和詞典中詞語解釋的過程來自動獲得詩詞中的詞語.一方面,我們利用詩詞的注釋,因為注釋正是對不可再分的語義單元的解釋,獲取注釋條目就精準地獲取了詩詞中的詞語;另一方面,我們利用古漢語的新詞發現方法[4-5]產生詩詞中的候選詞,然后在詩詞注釋條目和中文詞典中查找,若出現,則該候選詞是詩詞中的詞語,否則該候選詞不是詩詞中的詞語.針對第2個挑戰,我們融合詩詞注釋和中文詞典中的詞語解釋,找到詞語與詞語之間的聯系,再利用人工構建的古詩詞分類體系建立語義之間的聯系.
本文的主要貢獻有3個方面:
1) 提出了一種古詩詞圖譜的構建方法,并利用該方法構建了一個內容覆蓋全面、包含多層詞語語義聯系的古詩詞圖譜.該圖譜刻畫了詞語的多個層級,以合理的結構覆蓋了詩詞的各個方面;該圖譜從詩詞的注釋和詞語的詞典解釋入手,挖掘出詞語的語義關聯.
2) 古詩詞圖譜可以對詩詞進行各種不同維度的分析.相比于基于字的淺層數據分析,利用古詩詞圖譜可以從語義的角度從真正的意義上輔助文學研究.以唐詩為例,展示了古詩詞圖譜在詩詞分析上的應用,證明了古詩詞圖譜在詩詞分析中的必要性.
3) 古詩詞圖譜適用于詩詞的各種推理和分析任務.以判定詩詞的題材、分析詩詞的情感2個任務為例,說明了古詩詞圖譜的應用價值.
近年來,隨著數字技術和數字媒體的不斷發展,人文學科結合數字技術的研究應運而生.2011年Michel等人[6]在《科學》雜志上發表了基于百萬電子化圖書對文化進行量化分析的論文,挖掘出1800—2000年的英文語言中所反映出的語言學和文化現象;2014年Schich等人[7]在《科學》雜志上發表了量化分析文化中心變遷的論文,他們利用超過15萬的名人的出生地點和死亡地點的信息,建立了跨度2000年的遷徙網絡,用網絡科學的手段分析了歐洲文化中心的變遷.這些工作為數字人文這一新興的交叉領域學科提供了一個良好的開端.
數字人文在中國詩詞上的研究,近年來涌現出大量的工作.王兆鵬[3]搭建了唐宋文學編年地圖平臺,將詩人的時空軌跡分布信息可視化.新華網聯合浙江大學發布的“宋詞繾綣,何處畫人間”[8]平臺,對宋詞進行可視化展示,包括宋代詞人游歷路線、宋代詞人生平及所處年代圖譜、《全宋詞》常見意象統計等.清華大學自然語言處理與社會人文計算實驗室搭建了計算機詩詞創作系統“九歌”[9],結合seq2seq神經網絡結構和詩詞韻律實現了古詩自動生成算法[10-11].但是,以上關于詩詞分析的工作都是簡單地對詞頻進行統計,尚未涉及到詩詞中詞語與詞語之間的語義關聯.
中文通用領域的知識圖譜主要有《大詞林》、HowNet、CN-DBpedia,接下來分別介紹.《大詞林》[12]是自動構建的基于上下位關系的大規模開放域中文知識圖譜.HowNet[13]是人工標注的語言知識庫.在HowNet中,最小的語義單位被稱為“義原”.HowNet中的“義原”大約有2 000個.HowNet 基于“義原”體系,共標注了數十萬詞匯的語義信息.CN-DBpedia[14]是復旦大學知識工廠實驗室研發并維護的大規模通用領域結構化百科.CN-DBpedia主要是從中文百科類網站(如百度百科、互動百科、中文維基百科等)的純文本頁面中提取信息,經過濾、融合、推斷等操作后,最終形成高質量的結構化數據,供機器和人使用.
然而,通用領域的中文知識圖譜對古詩詞中涉及到的詞匯覆蓋率極低,不能夠直接用來分析詩詞的詞語語義之間的聯系.
關于知識圖譜的構建方法,劉嶠等人[15]在《知識圖譜構建技術綜述》一文中總結,知識圖譜的構建過程包括信息抽取、知識融合、知識加工共3個階段.其中,信息抽取包括實體抽取[16-18]、關系抽取[19-21]、屬性抽取[22-23];知識融合包括實體鏈接[24-25]、知識合并[26];知識加工包括本體構建[27]、知識推理[28]、質量評估[29].可見,常規的知識圖譜都是從抽取實體和關系、構建“實體-關系-實體”三元組開始的.
然而,常規的知識圖譜構建過程無法適用于古詩詞知識圖譜的構建.原因是,詩句不遵循主謂賓的語法結構,可以從詩詞中抽取出詞語,但是利用現有的關系抽取方法無法提取出詞語之間的關系,也無法確定詞語之間表達的語義是否相關.而且,無法利用各種百科中的實體信息,因為現有的中文百科尚未收錄古詩詞中的詞語.
詩詞領域的知識圖譜方面,主要的工作有:“唐詩別苑”[1],是關于全唐詩語義檢索的可視化平臺,實現了唐詩的語義檢索功能和知識圖譜的可視化(包括詩人社交網絡、詩人遷徙游歷、作品熱點地圖、詩人屬性4個方面).“宋代學術傳承知識圖譜”[2],從“中國歷代人物傳記數據庫”[30](China biographical database project, CBDB)中抽取宋代人物之間的學術傳承關系和部分親屬關系,用知識圖譜來探究宋代士人的師承關系.周莉娜等人[31]設計了基于唐詩知識圖譜的智能知識服務平臺KnowPoetry,提供唐詩領域的知識探索、時空軌跡、語義查詢等智能化知識服務.
以上提到的詩詞領域的知識圖譜,是以詩人、詩歌為單位的,并未從詞語的角度對詩詞的知識進行建模和分析.而詩詞語義的基本組成單元是詞語,若要對詩詞進行更深層次的語義研究,對詩詞詞語的語義進行知識上的關聯是無法避開的一步.此外,以上工作構建的詩詞知識圖譜僅從多個角度包含了詩詞知識,圖譜涉及到的內容不夠全面,圖譜的組織不夠有條理.
古詩詞圖譜G=(V,E),由點的集合V和邊的集合E組成.點的集合V={Vhier,Vdesc,Vanno},包含3種類型的詞節點,分別是古詩詞分類體系中的詞Vhier、描述詞Vdesc、注釋條目的詞Vanno.邊的集合E={Ehier-hier,Ehier-desc,Edesc-desc,Edesc-anno},包含4種類型的邊,分別是Vhier與Vhier之間的邊、Vhier與Vdesc之間的邊、Vdesc與Vdesc之間的邊、Vdesc與Vanno之間的邊.
古詩詞圖譜的構建過程如圖1所示,分為節點的構建、邊的構建2部分.

Fig.1 The process of constructing classical Chinese poetry knowledge graph圖1 古詩詞圖譜構建流程圖
2.2.1 古詩詞圖譜——節點的構建
詩詞中出現的詞語構成古詩詞圖譜的節點,所以準確地抽取出詩詞中的詞語非常關鍵.若人工標注詩詞中的詞語,當判斷某個字串是否是詞語時,參考的資料一般有2個來源:1)查看詩詞的注釋,若某個字串包含注釋信息,那么該字串就是詞語,因為注釋是對不可再分的語義單元的解釋.2)根據常識、使用平時的積累來判斷某個字串是否是詞語,其本質就是判斷該字串是否是現代漢語的詞語,這個過程可以用查詢中文詞典的方式完成.人工標注的方式過于費時費力,所以本文模仿人工標注的方式來自動獲取詩詞中的詞語.首先利用古漢語新詞發現算法中改進的Apriori算法[4-5]產生候選詞,該算法可以不遺漏地挖掘出長度在2~K之間的所有可能詞語;然后搜索候選詞是否出現在詩詞注釋條目和中文詞典中,若出現則判定該候選詞為詩詞中的詞語,這一步模擬了人工標注的過程.總的來說,這種方式全自動地、準確地得到了詩詞中的詞語,即圖譜的節點.接下來對改進的Apriori算法[4-5]進行詳細說明.
算法1.改進的Apriori算法.
輸入:原始語料D;
輸出:候選新詞的集合.
/*產生1-頻繁項集*/
① 1-候選項集C1={c1,c2,…};
② 統計原始語料中單個字的出現頻次,得到(字,頻次)的二元組集合S1={(c1,f1),(c2,f2),…};
③ for (ci,fi) inS1
④ iffi>支持度
⑤ 把ci加入1-頻繁項集L1;
⑥ end if
⑦ end for
⑧ 得到1-頻繁項集L1;
/*產生2-頻繁項集*/
⑨ forciinL1
⑩ forcjinL1



其次,要求在小型水電站工作機組的運行過程之中,隨時對進行發電和電力傳輸的設備進行安全檢修和檢查工作,務必保證小型水電站發電機組的正常工作運行。具體的來說,在小型水電站發電機組的運行過程之中,有著很多的關鍵設備組份發揮著為發電設備傳輸電流并傳輸電力的作用,為了有效的保證小型水電站發電機組的正常工作運行,就需要保證這些設備可以有效的運行。針對這樣的情況,就需要對這些設備進行隨時隨地的檢查,一旦出現油污或者損毀情況,就需要及時的采取有效的清污處理亦或者是采取相應的打磨處理,務必保證這些設備處于正常的工作狀態當中。

2.2.2 古詩詞圖譜——邊的構建
古詩詞圖譜的邊刻畫了古詩詞中詞語的語義聯系,所以利用互聯網存在的多種知識源來準確地獲取詞語之間的關聯非常重要.現階段關于詩詞詞語語義相似度的工作[32-33]只能挖掘出頻繁共現的詞,并認為它們是相似的.但是,我們的目標是準確地將具有相同主題的詞相關聯.比如西晉名將羊祜的典故有多種表達:“羊公碑”、“峴山”、“征南”、“淚碑”,“羊公”,這些詞語之間是具有語義聯系的.利用完全無監督的方法很難獲取到這樣的語義聯系,而詩詞的注釋和詞典的詞語解釋是對語義的權威釋義,利用詞語的權威解釋可以準確有效地挖掘出詞語的語義聯系.因此,本文基于詩詞注釋和中文詞典中的詞語解釋,在相互關聯的詞語之間建立了聯系,但是,語義和語義之間仍然是不相關的.為了進一步在不同的語義之間建立聯系,我們設計了古詩詞分類體系,以多層分類結構將不同的語義有條理地組織在一起,從而形成完整的古詩詞圖譜.
如圖1所示,構建古詩詞圖譜的邊可大致分為3個步驟:
1) 獲取和處理注釋信息.爬取“百度漢語”網站,獲取詩詞注釋.爬取“漢典”網站,獲取詩詞候選詞的注釋.然后將2部分注釋信息分別處理清洗,之后合并.
2) 構建古詩詞分類體系.構建關于古詩詞的分層體系,得到4棵根節點分別是“時間”、“地點”、“景物”、“人”的樹.
3) 構建古詩詞圖譜.將注釋條目的詞通過描述詞關聯到詩詞分類體系的詞,得到古詩詞圖譜.
2.2.2.1 獲取和處理注釋信息
關于詩詞的注釋,我們爬取“百度漢語”[注]https://hanyu.baidu.com/網站來獲取.百度漢語的注釋示例如圖2(a)所示.在該例中,“黃鶴樓”、“孟浩然”、“廣陵”、“故人”、“煙花”、“唯見”是所需要的詞語,而“碧空盡”、“天際流”這樣的詞并不是我們所需要的.“碧空盡”中的“碧空”,“天際流”中的“天際”也是所需要的.因此,首先,我們用正則表達式把所有的注釋處理成(詞,解釋)的二元組形式,圖2(a)的例子就包含了14個這樣的二元組(除了圖2(a)展示的11個,還包含“盡”、“碧空”、“天際”).然后把所有詩的相同詞的注釋合并,以特殊符號“|”分隔.
關于候選詞的解釋,我們爬取“漢典”[注]https://www.zdic.net/網站來獲取.漢典中的詞語解釋示例如圖2(b),對于每個詞,我們爬取的是“解釋”和“國語辭典”2個部分.
最后,將百度漢語和漢典這2個渠道獲得的詞語解釋合并.
2.2.2.2 構建古詩詞分類體系
董乃斌在《中國文學敘事傳統論稿》一書中提到“詩歌和其他各種文學作品一樣,都是要通過‘敘述’來表達的.時間、地點、景物、人物、事件,包括作者內心的感情,統統都得由作者或口頭或書面地敘述出來.抒情其實也是一種敘述,不過所敘的是感情或情緒,且主要是作者本人的感情或情緒而已.”[34]
具體而言,人處于特定的時間、地點,受到眼前景物的觸發,再結合自身的背景和經歷,會產生不同的心情、抒發不同的感情和人生感悟.所以本文設計的古詩詞分類體系是圍繞時間、地點、景物、人這4個方面展開的,如表1所示,受篇幅限制,只展示了部分分類體系.古詩詞分類體系是由我們邀請的3位古漢語文學專業的專家利用3天時間手工構建的.由于構建古詩詞分類體系涉及到詩詞的常識知識,且沒有現成的古詩詞領域常識圖譜,因此構建過程必須人工參與.構建完成古詩詞分類體系,就創建了Vhier和Ehier-hier.

Fig.2 Example of annotations in Baidu Chinese and Han Dian圖2 “百度漢語”和“漢典”的注釋示例
Table 1 Hierarchical Structure of Words in Classical Chinese Poetry
表1 古詩詞分類體系

Level-1Level-2Level-3Level-4Level-5時間節日、季節元宵、人日、端午、冬至、社日、春、夏、秋、冬……地點山、水、邊塞、建筑、名勝、行政區劃峰、湖、溪、河、池、西域、塞外、邊關、沙漠、亭、齋、臺、館、游覽勝地、名樓、河北、河南、湖北、湖南……景物天氣、日月星辰、植物、動物雨、霧、霜、日、月、星、樹、花、草、谷物、鳥、昆蟲、哺乳動物、冷血動物柳樹、桑樹、梅花、蘭花、兔絲、女蘿、飛蓬、粟、麥、粱、麻、黍、烏鴉、燕子、蝴蝶、蜜蜂、螞蟻、蟬、猿猴、狗、兔、蛇、龜、蟾蜍……人基本需求、基本屬性、知識儲備衣、食、住、行、玩、神話、歷史、心情、經歷、品質、人生大事、社會地位帽子、短衣、頭巾、酒、菜、飯、肉、被子、枕頭、床、轎子、馬車、船、書法、下棋、長壽、祥瑞、夏朝、商朝、西周、東周、喜悅、哀傷、送別、羈旅、孝順、守信、弱冠、登科、貧民、官宦……黃帝、唐堯、虞舜、伯夷、叔齊、姜子牙、召伯、周文王、周武王……
2.2.2.3 構建古詩詞圖譜
古詩詞分類體系是古詩詞圖譜的一部分,本節講述如何將注釋條目加入古詩詞分類體系中,構成最終的古詩詞圖譜.算法2描述了該過程.算法2的主要思路是:找到與古詩詞分類體系的葉子節點相關的若干個描述詞,在葉子節點和描述詞之間建立聯系,在描述詞之間建立聯系.對某個描述詞遍歷所有的注釋條目,若該描述詞出現在某注釋內容中,則在該描述詞與該注釋條目之間建立聯系.
算法2.構建古詩詞圖譜算法.
輸入:古詩詞分類體系Trees={Tree1,Tree2,Tree3,Tree4}、詞語解釋集合word_anno_set={(word1,anno_list1),(word2,anno_list2),…,(wordn,anno_listn)};
輸出:古詩詞圖譜G.
①G=Trees;
② fortreeinTrees
③ fornodeintree.leave_nodes/*node有多個描述詞:desc1,desc2,…,descm*/
④ foriinrange(m) /*對每個描述詞*/
⑤node′=Add_node(desci);
/*將desci作為節點加入圖G*/
⑥Add_edge(node,node′); /*在node
和node′之間構建連邊*/
⑦ for (word,anno_list) inword_anno_set
⑧ ifdesciin ‘’.join(anno_list)
⑨Add_edge(node′,word);
⑩ end if
/*在兩兩描述詞之間構建連邊*/
下面通過例子來解釋這一過程.如圖3所示,“風”是詩詞分類體系中根節點為“景物”的樹的一個葉子節點,它的父親節點是“天氣”.與“風”這一節點有關的描述詞有“狂風”、“刮風”、“大風”.步驟1,在“風”與“刮風”,“風”與“大風”,“風”與“狂風”之間構建1條邊.這一步驟的含義是同一事物有多個描述詞.步驟2,在“刮風”、“大風”、“狂風”兩兩之間構建1條邊.這一步驟的含義是事物的不同描述詞是等價的、地位相同的.步驟3,遍歷所有的注釋條目,分別找到這3個描述詞出現在注釋內容中的注釋條目.比如,“狂風”分別出現在了“沖風”、“驚飆”、“驚風”這3個詞的注釋中,那么,就將“狂風”與“沖風”,“狂風”與“驚飆”,“狂風”與“驚風”之間各構建1條連邊.這一步驟的含義是如果某個詞出現在了某條注釋中,就說明該注釋條目與該詞內容相關.

Fig.3 Example of the process of constructing classical Chinese poetry knowledge graph圖3 古詩詞圖譜構建過程舉例

Fig.4 Statistics of number of poems’ words in classical Chinese poetry knowledge graph圖4 詩詞涉及的古詩詞圖譜的詞語數量統計
以唐詩為例,構建古詩詞圖譜.在古詩詞圖譜的節點的構建過程中,關于改進的Apriori算法,K設置為3,支持度設置為5,低頻閾值設置為2.在古詩詞圖譜的邊的構建過程中,“百度漢語”中可以檢索到的唐詩共40 531首,包含注釋信息的共1 330首,通過處理、清洗、合并后共得到7 668條注釋信息.通過改進的Apriori算法產生的候選詞,在“漢典”中能夠找到解釋的共有18 589個.將“百度漢語”和“漢典”這2個渠道獲得的詞語解釋合并后,共得到21 907條詞語和與之對應的解釋.最終,構建的古詩詞圖譜共有6 619個節點、10 292條邊.其中,單個字節點有231個,2字詞節點有6 116個,3字詞節點有259個,4字詞節點有13個.
為了評測構建的古詩詞圖譜的性能,對詩詞中涉及的古詩詞圖譜的詞語個數進行統計,如圖4所示.統計的范圍是唐詩中的五言詩和七言詩,共40 210首,從圖4中可以看到,只有大約2 000首詩沒有包含古詩詞圖譜的詞語.大部分詩詞涉及的古詩詞圖譜的詞語個數在0~10之間.而大部分唐詩是五言或七言的律詩或絕句,也就是說大部分唐詩的字數是幾十個字,因此,我們構建的古詩詞圖譜的詞語覆蓋率是可觀的.
本節以唐詩為例,說明古詩詞圖譜在詩詞分析中的作用.
本節探究了季節、天氣、地點對詩人情感的影響.利用古詩詞圖譜,把與季節、天氣、地點、情感有關的詞分別關聯起來,從更廣的詞的范圍對“季節-情感”、“天氣-情感”、“地點-情感”進行全面、具體地數據分析,從而得到更深層次的結論.
3.1.1 季節對詩人情感的影響
欲探究不同的季節對詩人的情感產生什么樣的影響,我們將統計描述季節的詞和描述情感的詞在詩中的共現關系.
對于季節Si,我們需要分別統計Si和詩人的9種情感(哀傷、失意、愁緒、喜悅、孤獨、恐懼、憤怒、怨恨、驚訝)之間的共現次數,即季節Si和情感Ej共現的詩的個數(j=1,2,…,9).然后,計算情感Ej(j=1,2,…,9)對季節Si所占的比例:

(1)
其中,#(Si,Ej)表示季節Si和情感Ej共現的詩的個數.
如果沒有古詩詞圖譜,在統計詩詞描述的季節時,我們只會檢驗“春”、“夏”、“秋”、“冬”這4個字是否出現在詩中.但是,有時詩中有關季節的表達卻不止這4個字,比如,“霜天”、“歸雁”、“玉露”、“紅葉”也同樣表明是秋天.在古詩詞圖譜中,“春”、“夏”、“秋”、“冬”是較為抽象的詞語,屬于古詩詞分類體系中的詞語,由它們向下延伸可以拓展出很多相關詞語.描述情感的詞同理,在古詩詞圖譜中,“哀傷”、“失意”、“愁緒”等也屬于古詩詞分類體系中的詞語.利用古詩詞圖譜對季節和情感共現次數進行統計,可以得到更加全面、真實的結果.
圖5展示了4種季節中每一種情感所占的比例.從圖5可以看出,春、夏、秋、冬4種季節占比最高的情感分別是喜悅、哀傷、哀傷、哀傷.關于春天和秋天,這是符合常識的,春天萬物復蘇、生機勃勃,容易使人心情愉悅并產生積極向上的情緒;而秋天蕭索悲涼,萬物枯敗,容易使人聯想到自己的衰老和不濟,產生悲傷的情緒.關于夏天和冬天,我們發現,這2個季節的主要情感也是哀傷.而且,這4個季節中,哀傷、失意、愁緒、孤獨這4種負面情感占據了非常大的比例,而恐懼、憤怒、怨恨、驚訝占據比例很小.因此,我們可以得出結論,大部分詩詞表達的情感都是負面的,但是春天是容易讓詩人的情感轉變為積極的一個重要因素.

Fig.5 The histogram of the influence of different seasons on poets’ emotions圖5 不同季節對詩人情感的影響柱形圖
3.1.2 天氣對詩人情感的影響
欲探究不同的天氣對詩人的情感產生什么樣的影響,我們將統計描述天氣的詞和描述情感的詞在詩中的共現關系.
類似地,計算情感Ej(j=1,2,…,9)對天氣Wi所占的比例:

(2)
其中,#(Wi,Ej)表示天氣Wi和情感Ej共現的詩的個數.
利用古詩詞圖譜可以發現,描述“雪”的詞還有“飄素”、“玉蕊”、“天花”、“玉英”、“玉花”等.描述“雨”的詞還有“蹄涔”、“丁丁”等.描述“風”的詞還有“摧折”、“長條”等.利用古詩詞圖譜進行統計,比僅僅對詩詞統計“雪”、“雨”、“風”、“露”、“云”這5個字更加全面.
圖6展示了5種天氣中每一種情感所占的比例.從圖6可以看出,哀傷、失意、愁緒、喜悅、孤獨仍然占比很大,恐懼、憤怒、怨恨、驚訝仍然占比很小,結合3.1.1節可以說明,前5種情感在整個唐詩集合中占比很大,后4種情感在整個唐詩集合中占比很小.接下來,通過比較在特定情感下5個代表天氣柱的相對高度來解析不同天氣對詩人情感的影響.

Fig.6 The histogram of the influence of different weather on poets’ emotions圖6 不同天氣對詩人情感的影響柱形圖
在圖6中,“哀傷”在“雨”這種天氣中的占比顯著高于“哀傷”在其他天氣中的占比,“喜悅”在“雨”這種天氣中的占比顯著低于“喜悅”在其他天氣中的占比.這說明了“雨”這種天氣相比于其他天氣,更加傾向于帶給人哀傷的情緒,換句話說,詩人更愿意用“雨”來渲染詩歌的悲傷氛圍.此外,“恐懼”在“云”中的比例顯著高于“恐懼”在其他天氣中的比例.“憤怒”在“風”中的比例顯著高于“憤怒”在其他天氣中的比例.這說明了詩人更傾向于使用“云”這樣的天氣來表達“恐懼”的情緒,更傾向于使用“風”這樣的天氣來表達“憤怒”的情緒.
3.1.3 地點對詩人情感的影響
欲探究不同的地點對詩人的情感產生什么樣的影響,我們將統計描述地點的詞和描述情感的詞在詩中的共現關系.
類似地,計算情感Ej(j=1,2,…,9)對地點Pi所占的比例:

(3)
其中,#(Pi,Ej)表示地點Pi和情感Ej共現的詩的個數.
詩詞中關于地點的描述十分復雜,沒有統一的規則.比如典型的描述“邊塞”的詞語有“輪臺”、“磧西”、“樓蘭”、“龍城”、“北庭”等.若要對地點進行覆蓋面全的統計,利用古詩詞圖譜是必要的.在古詩詞圖譜中,“邊塞”屬于古詩詞分類體系中的詞語,由“邊塞”可以拓展到“西域”、“塞外”、“新疆”、“邊關”、“塞北”、“沙漠”等,然后可以進一步拓展直到底層節點為止.通過這樣的層級結構,完整而有條理地覆蓋了所有地點詞匯.對于“山”、“水”、“建筑”、“名勝”也是如此.
圖7展示了5種地點中每一種情感所占的比例.在圖7中,“哀傷”在“邊塞”中所占比例相比于“哀傷”在其他地點中所占比例是最高的,這說明了邊塞更容易讓人產生悲傷的情緒,原因是邊塞總是和戰爭、戍邊聯系在一起.“愁緒”在“水”中所占比例相比于“愁緒”在其他地點中所占比例是最高的,這說明古人總是將“水”和“愁緒”聯系在一起,比如李白的著名詩句“抽刀斷水水更流,舉杯消愁愁更愁”.“孤獨”在“山”中所占比例相比于“孤獨”在其他地點中所占比例最高,“山”帶給人的感覺確實是孤獨的.

Fig.7 The histogram of the influence of different places on poets’ emotions圖7 不同地點對詩人情感的影響柱形圖
唐朝分為初唐、盛唐、中唐、晚唐4個時期,本節將首先描述2個詩人之間寫作風格相似度的度量方式,然后對同一時期詩人寫作風格的相似度和相鄰時期詩人寫作風格的相似度進行度量,探究不同時期對詩人寫作風格相似度的影響.
3.2.1 2個詩人之間寫作風格相似度的度量
我們對寫作風格的定義有2個維度,分別是題材和情感.關于題材,有“送別”、“羈旅”、“戰爭”、“田園”、“愛情”、“懷人”、“被貶”、“詠史”、“思鄉”、“山水”10種類別.關于情感,有“喜悅”、“憤怒”、“哀傷”、“愁緒”、“孤獨”、“恐懼”、“驚訝”、“怨恨”、“失意”9種類別.利用古詩詞圖譜,可以更加全面、準確地統計詩詞中與題材和情感有關的詞語.


表示該詩人所寫的詩中與emotioni情感有關的詞語占全部與情感有關的詞語的比例.
然而,得到每位詩人寫作題材和情感的占比,對于分析時期的特點沒有太多價值,更有價值的是將占比從大到小排序.因此,每位詩人的表示由2個向量轉換成了2個有序列表,即Lpoet=(Ltheme,Lemotion),其中Ltheme=(theme1,theme2,…,theme10),Lemotion=(emotion1,emotion2,…,emotion9).通過度量2個有序列表的相似度,我們可以度量2個詩人寫作風格的相似度.我們使用RBO(rank-biased overlap)[35]來度量有序列表的相似度.
3.2.2 同一時期詩人寫作風格的相似度
利用古詩詞圖譜的信息,可以將時間和詩人寫作風格這2個因素有效地聯系起來.而且,古詩詞知識圖譜包含的信息有多種維度且非常全面,足以支撐對同一時期詩人寫作風格的相似性的探究.
對同一時期的兩兩詩人之間計算相似度后取平均,可以得到這一時期寫作風格的相似程度.初唐、盛唐、中唐、晚唐,這4個時期寫作風格的相似程度如圖8所示.

Fig.8 Trend of the similarity of writing style in different historical periods of Tang Dynasty圖8 唐朝不同時期寫作風格相似度的變化趨勢圖
圖8中,這4個時期詩人寫作風格的相似程度整體呈現上升趨勢,究其原因,是源于對前一時期和同一時期著名詩人寫作風格的效仿.而從中唐到晚唐,寫作風格相似程度降低,說明詩壇的徹底沒落導致對同一時期的效仿現象減少.
具體來說,初唐時期寫作風格的相似程度是非常低的,也就是說,詩人的寫作風格在初唐是多元化的,之后到盛唐、中唐,詩人的寫作風格越來越趨于一致.晚唐時,相比于中唐時期,寫作風格的相似程度有所下降.結合當時的背景來看,這個結論是比較合理的.初唐是唐詩的起步發展時期,寫作風格是多元化的,而后面的時期詩人的寫作就有了可參照的對象.盛唐時期是中國詩詞的最高峰,在這個時期之后,很多詩人都在效仿盛唐時期詩人的寫作風格.比如杜甫就是一個典型的被后世效仿和追隨的對象.由于盛唐之后詩壇的沒落,在同時期十分出色的詩人也會被效仿.比如中唐時期,元和新體的2個詩派分別以白居易和韓愈為首,這2位詩人就是被追隨的對象.所以,從初唐到中唐,寫作風格的相似程度呈現出上升的趨勢.然而到了晚唐,詩壇的徹底沒落,會導致詩人沒有可以追隨的同時期的詩人,所以寫作風格的相似程度會呈現出下降的趨勢.
3.2.3 相鄰時期詩人寫作風格的相似度
利用古詩詞圖譜中蘊含的信息,可以將時間和詩人寫作風格這2個因素關聯起來.而且,古詩詞知識圖譜覆蓋面全、具有多種維度的特點,使得對相鄰時期詩人寫作風格的相似度進行分析成為可能.
對2個相鄰時期的兩兩詩人之間計算相似度后取平均,可以得到這2個相鄰時期的寫作風格的相似度.圖9展示了初唐-盛唐、盛唐-中唐、中唐-晚唐的相似度.

Fig.9 Trend of similarity of writing style in the adjacent historical periods of Tang Dynasty圖9 唐朝相鄰時期寫作風格相似度的變化趨勢圖
從圖9可以發現,隨著時間的推移,相鄰2個時期寫作風格的相似度越來越高.這說明隨著時間的推移,效仿前一個時期寫作風格的現象越來越顯著.
利用古詩詞圖譜對詩詞進行數據分析,相比于只統計單字,可以得到更深層次、更有意義的結論.
古詩詞圖譜可以適用于各種關于詩詞的推理和分析任務,下面在判定詩詞題材和分析詩詞情感的2個任務上進行驗證.
針對判定詩詞題材和分析詩詞情感的2個任務,模型結構如圖10所示.模型由Embedding層、CNN層/平均池化層、圖注意力層、注意力層組成.首先,將詩詞內容用BERT編碼,然后通過CNN層/平均池化層得到詩詞的更抽象的表示;將古詩詞圖譜用圖注意力網絡編碼,學習到每個節點的表示,然后抽取出詩詞包含的圖節點,用注意力機制把它們的表示做加權和.最后,將詩詞的這2部分表示拼接起來,接softmax分類器,用交叉熵損失函數來計算損失.

Fig.10 The model integrating classical Chinese poetry knowledge graph圖10 融合古詩詞圖譜的模型
4.1.1 Embedding層
本文使用谷歌開源的BERT[36]中文預訓練模型初始化字向量.對于每首唐詩,將標題和內容輸入BERT模型,最大長度設為150.由于BERT中文預訓練模型輸出的字向量的維度是768,所以每首詩經過BERT預訓練模型后,得到的表示的維度為(150,768).
4.1.2 CNN層/平均池化層
BERT預訓練模型輸出字的表示將通過CNN層或平均池化層.接下來分別描述CNN層和平均池化層.
卷積神經網絡(convolutional neural network, CNN)[37]可用于捕捉文本的n-gram特征.

x1:n=x1⊕x2⊕…⊕xn,
(4)
其中,⊕表示拼接操作.更一般地,xi:i+j指的是xi,xi+1,…,xi+j的拼接.

ci=f(w·xi:i+h-1+b),
(5)

c=(c1,c2,…,cn-h+1).
(6)
對于池化層,采用最大池化,對每個特征圖捕捉最重要的特征:

(7)
以上描述了通過1個過濾器獲得1個特征的過程.在常見的CNN模型中,用不同尺寸的多個過濾器獲得多個特征.
平均池化層采用bert-as-service[注]https://github.com/hanxiao/bert-as-service的平均池化策略,即每首通過BERT模型編碼的詩,對第1個維度(最大序列長度)取平均,這樣每首詩就表示成768維的向量,使得不同長度的詩全都編碼成相同長度的向量.
4.1.3 圖注意力層
圖注意力網絡(graph attention network, GAT)[38],能夠很好地學習圖結構數據的節點表示.只需要提供圖結構和節點的初始特征,給予適當的監督信號,就能夠自動學習其他節點對當前節點的重要程度,從而對當前節點進行更好的表示.圖注意力網絡的核心是圖注意力層.接下來,對圖注意力層的原理進行詳細介紹.


然后,計算兩兩節點之間的注意力分數eij:

(8)
接下來,通過softmax函數將注意力分數eij進行規范化,從而得到注意力權重αij,計算過程為
(9)

(10)
之后,還可以進一步擴展為多頭圖注意力層.把K個圖注意力層得到的節點表示進行拼接,就得了新的節點表示:
(11)
將古詩詞圖譜的每個節點用BERT模型初始化特征,然后輸入多層GAT,得到新的節點表示.
4.1.4 注意力層
假設一首詩包含的圖節點的集合是N={n1,n2,…,nm}.從GAT層的輸出取出這些節點的特征{f1,f2,…,fm},通過注意力機制,對詩中提到的不同節點的重要度進行學習,以產生合理的表示.注意力層的公式為
ui=tanh(WAfi+bA),
(12)
(13)
(14)
這一層的參數是WA,bA,uA.
4.1.5 損失函數

(15)
4.2.1 數據集
為了評測判定詩詞題材和分析詩詞情感這2個任務的實驗效果,我們設計了一些規則自動地對詩詞進行類別的標注.關于判定詩詞題材任務,標注了“戰爭”、“送別”、“閨怨”、“懷古”、“田園”、“山水”、“思鄉”、“懷人”、“詠物”、“悼亡”共10種類別.關于分析詩詞情感任務,標注了“悲傷”、“愁緒”、“孤獨”、“怨恨”、“思念”共5種類別.關于這15種類別的標注規則,詳見表2.數據集的規模詳見表3.
4.2.2 評價指標
在涉及的所有分類實驗中,我們使用準確率(precision,P)、召回率(recall,R)和F值(F-measure)作為每個類別的評價指標,使用宏平均值(macro-average)作為每種分類方法最終的評價指標,計算方法為

(16)

(17)

(18)
(19)
(20)

Table 2 Rules of Constructing Datasets表2 構建數據集的規則描述

Table 3 Statistics of Datasets for Two Tasks表3 2個任務的數據集信息
其中,TP(true positive)表示將正類預測為正類的個數,TN(true negative)表示將負類預測為負類的個數,FP(false positive)表示將負類預測為正類的個數,FN(false negative)表示將正類預測為負類的個數,n是類別個數.
4.2.3 超參數設置
在驗證集上對超參數進行網格搜索,確定下來的超參數如表4所示.在判定詩詞題材的模型中,使用平均池化層;用2層GAT來學習古詩詞圖譜的節點表示.在分析詩詞情感的模型中,使用CNN層;用1層GAT來學習古詩詞圖譜的節點表示.GAT Heads表示每一層GAT的頭的個數,GAT Features表示每一層GAT輸出的特征個數,Filters表示過濾器個數,Kernel Sizes表示不同卷積核的尺寸.

Table 4 Hyper-Parameters of the Models表4 模型的超參數
4.3.1 剝離實驗
1) Rand.最基礎的模型是“隨機初始化字向量+平均池化層/CNN層+softmax分類器”,用“Rand”簡寫.
2) +BERT.為了探究BERT的影響,將隨機初始化字向量替換為BERT,變成“BERT+平均池化層/CNN層+softmax分類器”,用“+BERT”簡寫.
3) +BERT+GAT.為了探究古詩詞圖譜的影響,將其加入模型,變成“BERT+平均池化層/CNN層+GAT+softmax分類器”,用“+BERT+GAT”簡寫.
在判定詩詞題材任務上,加入BERT后,模型效果提升了14.61%,再加入GAT后,模型效果提升了5.72%.在分析詩詞情感任務上,加入BERT后,模型效果降低了1.86%,加入GAT后,模型效果提升了4.13%.實驗結果如表5所示,C(compare)列表示模型相比于Rand模型效果提升的大小.

Table 5 Results of Ablation Experiments表5 模型的剝離實驗 %
Note: The boldfaced numbers emphasize the performance of our model.
實驗結果表明:
1) BERT在判定詩詞題材任務上對模型效果有極大提升,而在分析詩詞情感任務上甚至起到了反作用,出現這種現象的原因是,BERT可以有效捕捉上下文的信息,包括文本的n-gram信息,在判定詩詞題材任務上,若使用“隨機初始化字向量+平均池化層”,無法捕捉到字與字之間的聯系,而加入BERT,就加入了字的上下文信息,所以加入BERT有極大提升.而在分析詩詞情感任務上,最初的模型是“隨機初始化字向量+CNN層”,CNN層本身就可以捕捉文本的n-gram信息,再加入BERT,BERT中包含的上下文信息就可能變成噪聲,影響模型的效果.
2) 古詩詞圖譜在2個任務上對模型效果均有較大提升,證明了古詩詞圖譜可以為詩詞的推理和分析任務提供知識,對詩詞的理解有幫助.
4.3.2 與其他方法的對比
本文選擇的對比方法如下,實驗結果如表6所示:
1) NB.胡韌奮等人[40]對唐詩題材自動分類的研究采用的方法之一.我們基于scikit-learn[注]https://scikit-learn.org/stable/,以TF-IDF作為文本特征,實現了多項式樸素貝葉斯分類器.
2) SVM.胡韌奮等人[40]對唐詩題材自動分類的研究采用的方法之一.我們基于scikit-learn,以TF-IDF作為文本特征,實現了線性核支持向量機.
3) CNN.用1層CNN自動學習文本特征[37],然后接softmax分類器.共有2個變種:CNN-rand,CNN-pretrain.對于前者,字向量被隨機初始化,且在訓練的過程中可被微調;對于后者,使用在4萬首唐詩上預訓練產生的字向量,不可微調.
4) GRU.用1層GRU自動學習文本特征[41],然后接softmax分類器.共有2個變種:GRU-rand,GRU-pretrain.對于前者,字向量被隨機初始化,且在訓練的過程中可被微調;對于后者,使用在4萬首唐詩上預訓練產生的字向量,不可微調.
5) TextGCN.TextGCN[42]模型將文本語料建模成由文檔節點和詞節點組成的異質圖,然后利用圖卷積神經網絡(GCN)做半監督文本分類.
實驗結果表明:
1) 我們的模型在判定詩詞題材和分析詩詞情感這2個任務上分別超過最好的基線模型2.64%和0.45%,證明了我們提出的模型的有效性.
2) 傳統的樸素貝葉斯和支持向量機分類器在這2個任務上具有可比的效果,比一些基于神經網絡的模型效果還要好.
3) CNN-pretrain的效果在這2個任務上比CNN-rand高出2.98%和1.33%,GRU-pretrain的效果在這2個任務上比GRU-rand高出3.84%和5.17%,說明字向量的初始化對模型訓練非常重要,使用與訓練數據相同領域的大規模語料預訓練字向量,能夠大幅提升模型效果.在判定詩詞題材任務中,GRU-rand和GRU-pretrain的效果分別高于CNN-rand和CNN-pretrain 0.57%和1.43%;在分析詩詞情感任務中,CNN-rand和CNN-pretrain的效果分別高于GRU-rand和GRU-pretrain 25.97%和22.13%.可以看出,對不同的任務和數據,CNN和RNN有不同的偏好,在判定詩詞題材任務上,RNN的表現更好,在分析詩詞情感任務上,CNN的表現更好.
4) TextGCN在這2個任務上是表現最差的模型,由此可以看出,TextGCN對于詩詞這樣特殊的短文本無法達到很好的分類效果.

Table 6 Performance Comparison of Different Methods表6 不同方法的性能比較 %
Note: The boldfaced numbers emphasize the performance of our model.
本文提出一種古詩詞知識圖譜的構建方法,并使用該方法得到一個內容覆蓋全面、結構層次分明、包含詞語語義聯系的古詩詞知識圖譜.利用古詩詞圖譜,可以從各種不同的維度上更好地分析詩詞.古詩詞圖譜對于詩詞的數據分析是不可或缺的,它能夠從語義的角度有效地輔助文學研究.另外,古詩詞圖譜能夠適用于古詩詞的各種推理和分析任務上,為這些任務提供必要的知識,從而使機器更好地理解詩詞.
該工作的不足之處在于構建的古詩詞圖譜囊括的知識仍然比較局限,目前包含的知識僅包含詩詞注釋和中文詞典的詞語解釋.
未來工作中,我們將進一步優化古詩詞圖譜的構建過程,盡可能地降低人工參與的程度.進一步擴大古詩詞圖譜的規模,使其囊括更加全面的古詩詞知識,比如歷朝歷代對著名詩人詩詞的解讀文字等.并且,將古詩詞圖譜擴展到更加廣泛的應用場景,比如在詩歌生成中引入古詩詞知識,使其更加符合人的意愿進行創作.再比如利用古詩詞圖譜中的地名信息,分析古人一生的足跡并對古代的文化中心、歷史名勝進行探究等.