張航,何中市
(重慶大學計算機學院,重慶400030)
詩詞,是指以古體詩、近體詩和格律詞為代表的中國古代傳統(tǒng)詩歌,是闡述心靈的文學藝術(shù),而詩人、詞人則需要掌握成熟的藝術(shù)技巧,并按照嚴格韻律要求,用凝練的語言、綿密的章法、充沛的情感以及豐富的意象來高度集中地表現(xiàn)社會生活和人類精神世界。作為中國文學的瑰寶,其風格的評判以及檢索一直是歷代學者關(guān)心的學術(shù)問題。而最主要和常用的詩詞風格可以分為豪放風格和婉約風格兩類。一般而言,具有數(shù)量少、形體小、色彩素、聲音柔、味道淡、重量輕、速度慢等形式特征的事物更容易引起人的柔和意味,美學上往往稱為“優(yōu)美”,“指小巧、細膩、柔和的美”也稱作婉約風格;具有數(shù)量多、形體大、色彩艷、聲音粗、味道濃、重量沉、速度快等形式特征的事物更容易引起人的強烈意味,美學上往往稱為“壯美”,“指巨大、粗獷、豪放的美”也稱作豪放風格。以一句寫雪的詩句為例:
“北國風光,千里冰封,萬里雪飄”毛澤東,豪放風格
“小城風光,一里冰封,兩里雪飄”李良炎[1],婉約風格
目前詩詞分類研究中,詩詞訓練測試涉及到的數(shù)據(jù)量相對較少,而且應用的都是比較成熟的傳統(tǒng)機器學習方法。隨著互聯(lián)網(wǎng)信息爆炸式的增長以及大數(shù)據(jù)時代的到來,基于深度學習神經(jīng)網(wǎng)絡(luò)(遞歸神經(jīng)網(wǎng)絡(luò)(RNN)、卷積神經(jīng)網(wǎng)絡(luò)(CNN)等)的自然語言處理技術(shù)和詞嵌入技術(shù)受到了很多學者的熱捧,并被廣泛應用到了文本分類、情感分類等領(lǐng)域[2-3]。相比與傳統(tǒng)的機器學習方法,深度學習自然語言處理技術(shù)能更好的對海量數(shù)據(jù)自動學習特征,同時能帶來更佳的學習效果。但是,該方法在目前極少應用到古詩詞風格判別上。本文通過整合詩詞語料庫,生成詩詞字、詞向量,運用深度遞歸神經(jīng)網(wǎng)絡(luò)成功構(gòu)建適合古詩詞風格分類的模型,并取得了目前更好的分類效果。
詩詞的處理問題實際從形式上也可以看作內(nèi)容較特殊的文本處理問題。胡俊峰等人[4-5]開發(fā)了“唐宋詩計算機輔助研究系統(tǒng)”,以唐詩中的詞匯為主要研究單位,實現(xiàn)語詞檢索、詞頻統(tǒng)計、意象索引。李良炎[1,6]提出了基于詞聯(lián)接的自然語言處理技術(shù),并用于詩詞語言的理解,成功的進行了詩詞語料標注測試、詩詞語言初級分析測試、詩詞語言豪放與婉約風格的評價測試。易勇等人[7]通過將樸素貝葉斯與遺傳算法相結(jié)合的方式,在以詩詞每個字為最小單位的基礎(chǔ)上,首次提出了古典詩詞的豪放和婉約風格判別計算模型,并在精典詩詞測試語料上取得了較好的效果??锖2ǖ热薣8]從題材角度出發(fā),將貝葉斯分類技術(shù)引入唐詩研究,取得較好的實驗效果。錢鵬等人[9]提出了基于點互信息和LDA 的詩詞主題分類方法,詩詞主題與時代演變的關(guān)系上取得了較好的分類效果。胡韌奮等人[10]采用向量空間模型(VSM)將唐詩文本轉(zhuǎn)換為向量,通過卡方檢驗進行詞語特征選擇,最后基于樸素貝葉斯和支持向量機算法構(gòu)造文本分類器,平均分類準確率達到74.7%。
隨著深度學習的興起,Zhang 等人[11]首次將RNN神經(jīng)網(wǎng)絡(luò)運用到中國古詩詞的生成中,并將整個詩詞歷史語料作為訓練語料,在生成詩詞字與行之間增加一定的約束條件,達到了比傳統(tǒng)詩詞生成系統(tǒng)更好的效果。Yi 等人[12]運用RNN 模型生成詩詞絕句,并成功的加入了注意力機制,使詩詞能同時學習到語義、結(jié)構(gòu)、韻腳等信息。Wang 等人[13]在RNN 模型基礎(chǔ)上,通過優(yōu)化詩詞字向量、引入注意力機制與混合訓練,得到了可以根據(jù)關(guān)鍵詞生產(chǎn)主題相關(guān)詩詞的模型,取得了不錯的效果。
詩詞風格分類的流程如圖1 所示,主要有3 個模塊:①預處理:詩詞文本自動分詞,去除標點亂碼等操作;②詩詞數(shù)字化:詩詞文本向量化表示;③訓練RNN分類器:使用深度學習遞歸神經(jīng)網(wǎng)絡(luò)訓練詩詞文本風格分類器。
圖1 詩詞風格分類流程圖
不同于英文單詞之間以空格作為自然分界符,而中文只是字、句和段能通過明顯的分界符來簡單劃界,這種沒有空格作為詞分界標志的問題造成了分詞的歧義和困難。中文分詞的準確與否,常常直接影響到文本分類結(jié)果的準確性。同理,在詩詞風格分類中如何準確的分詞也是提高分類效果的重要環(huán)節(jié)。易勇等人[7]認為詩詞是特別凝練的語言,一般通過“字”就表達很復雜的事物和情感,并通過以字為單位的向量空間模型較好地表現(xiàn)了詩詞的內(nèi)容和情感。所以,以字為單位的全切分算法是一種可行的策略。但是,也有學者[10]認為詩詞的詞組如:“芳草”、“長堤”、“秋思”、“白云”、“秋風”等在當今時代已經(jīng)被大量使用且在詩詞中這些詞組都有一定的隱喻意義,不宜切分。綜合上述兩種思想,本文以字和詞兩種方式同時進行詩詞風格分類,驗證各自的有效性。具體切分方式如下:
字切分:白日依山盡。
詞切分:白日依山盡。
本文采用jieba 分詞系統(tǒng)對古詩詞進行分詞系統(tǒng)來對詩詞文本進行處理。
(1)向量空間模型
向量空間模型(Vector Space Model,VSM)由Salton等人[14]于20 世紀70 年代提出,并成功地應用于著名的SMART 文本檢索系統(tǒng)。目前廣泛的應用在文本分類、信息檢索的各個領(lǐng)域。在VSM 模型中,一篇文章被抽象成一個由多個特征詞構(gòu)成的向量。假設(shè)有n 個特征詞,每個特征詞對應的權(quán)重為kn,那么文檔d 就可以向量表示為d={ }k1,k2,…,kn。向量空間模型的關(guān)鍵是確定特征詞以及特征權(quán)重,最常用的方法有基于統(tǒng)計的TF-IDF(Term Frequency-Inverse Document Frequency)算法。
(2)Word2Vec 模型
為了以更高效的算法獲取詞向量,Mikolov[15]提出了著名Word2Vec 模型。其目的不僅僅是建立語言模型,而是更偏向于獲取高效的詞向量。Word2Vec 可以在百萬數(shù)量級的詞表和上億的數(shù)據(jù)集上進行高效地訓練;而得到的訓練結(jié)果——詞向量,可以很好地度量詞與詞之間的語義相關(guān)性和相似性。Word2Vec 包含了兩個網(wǎng)絡(luò)模型:CBOW(Continuous Bag-of-Words)模型和Skip-Gram 模型,網(wǎng)絡(luò)結(jié)構(gòu)如圖2 所示。Skip-Gram則可以看作是CBOW 的反向過程。CBOW 模型其實質(zhì)是對前向反饋神經(jīng)網(wǎng)絡(luò)語言模型(Feed Forward NNLM),其變化如圖2 所示。
圖2 CBOW和Skip-gram模型結(jié)構(gòu)圖
相比于神經(jīng)網(wǎng)絡(luò)語言模型,Word2Vec 做出了一下幾點改變:①去掉了前饋神經(jīng)網(wǎng)絡(luò)語言模型中的非線性的隱藏層,使神經(jīng)網(wǎng)絡(luò)的映射層直接與輸出的Softmax 層相連,保證效果的前提下減少了計算量。②映射層不再是將輸入單詞的詞向量按順序拼接,而是將詞向量相加求和。③每個詞不再單純與其前面n 個詞有關(guān),也與其后面的n 個詞相關(guān),正真做到了利用上下文而不是上文。
本文在一定量的詩詞語料的基礎(chǔ)上,利用Word2Vec 構(gòu)建一個更適合詩詞文本的字、詞向量。一首包含n 個詞或字的詩詞,wi表示第i 個字或詞的向量,那么一首詩P 可以表示為
RNN 是專門針對序列化問題所設(shè)計的神經(jīng)網(wǎng)絡(luò),其基本的網(wǎng)絡(luò)結(jié)構(gòu)如圖3 所示。
圖3 RNN的基本網(wǎng)絡(luò)結(jié)構(gòu)圖
之所以稱為循環(huán)神經(jīng)網(wǎng)路,即一個序列當前的輸出與前面的輸出也有關(guān)。具體的表現(xiàn)形式為網(wǎng)絡(luò)會對前面的信息進行記憶并應用于當前輸出的計算中,即隱藏層之間的節(jié)點不再無連接而是有連接的,并且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。RNN 模型包含輸入序列xT={x1…,xt-1,xt,xt+1,…,xT},輸出序列yT={y1,…,yt-1,yt,yt+1,…,yT},隱藏層序列hT={h1,…,ht-1,ht,ht+1,…,hT}則根據(jù)網(wǎng)絡(luò)可以得到xT到y(tǒng)T的映射關(guān)系如下:
其中,σ 是隱藏層的非線性激活函數(shù),通常是sigmoid 分類函數(shù)。Whx是輸入層與隱藏層的權(quán)重矩陣,Whh是前一輪迭代的輸出作為條件計算得到的權(quán)重矩陣。Why是隱藏層與輸出層的權(quán)重矩陣。bh和by分別代表隱藏層和輸出層的偏差。
(1)LSTM 模型
當輸入序列信息過長時,基礎(chǔ)的RNN 模型會帶來梯度爆炸和彌散的問題[16],長短期記憶神經(jīng)網(wǎng)絡(luò)(LSTM)將傳統(tǒng)的神經(jīng)元替換為有記憶系統(tǒng)的神經(jīng)元(被稱為記憶神經(jīng)元),很好地解決了RNN 模型無法處理長序列信息的問題。圖4 展示了記憶神經(jīng)元計算隱藏層狀態(tài)ht和神經(jīng)元輸出Ct的過程。
圖4 LSTM神經(jīng)元內(nèi)部結(jié)構(gòu)圖
其中,遺忘門通過ht-1和xt對神經(jīng)單元的上一狀態(tài)信息進行操作。對于來自Ct-1的信息,當遺忘門ft的值為1 時,則將Ct-1的信息保留到Ct的計算中;若遺忘門ft的值為0,則將Ct-1的信息丟棄。具體的計算方法如公式(3)所示:
接下來,同樣通過ht-1和xt計算出輸入門it和候選狀態(tài)的值,計算公式如下:
然后,在神經(jīng)元上一狀態(tài)Ct-1和候選狀態(tài)~Ct的基礎(chǔ)上,綜合輸入門it和遺忘門ft的值,可以獲得神經(jīng)元的當前狀態(tài)值Ct,計算方法如公式(5)所示:
最后,由輸出門和神經(jīng)單元的當前狀態(tài)值可確定神經(jīng)單元的輸出狀態(tài)ht,計算公式如下:
(2)BiLSTM 模型
雙向長短時記憶神經(jīng)網(wǎng)絡(luò)(BiLSTM)本質(zhì)上是兩個獨立的LSTM 網(wǎng)絡(luò),一個網(wǎng)絡(luò)從頭到尾學習數(shù)據(jù),另一個網(wǎng)絡(luò)從尾到頭學習數(shù)據(jù)。其網(wǎng)絡(luò)結(jié)構(gòu)如圖5 所示。
圖5 BiLSTM的網(wǎng)絡(luò)結(jié)構(gòu)圖
圖5 中,BiLSTM 網(wǎng)絡(luò)中兩個并行的隱藏層同時從正序和逆序兩個方向處理序列信息。它的兩個并行神經(jīng)元分別從前向和后向兩個方向計算隱藏層狀態(tài)并合并到輸出層。
前向傳播隱藏層的計算公式如式(7)所示:
后向傳播隱藏層的計算公式如式(8)所示:
然后,將兩者合并到輸出層可以得到y(tǒng)t可以表示為式(9):
本節(jié)主要評價了深度學習神經(jīng)網(wǎng)絡(luò)在古詩詞分類中的可行性與效果,同時探究了詩詞字向量、詞向量以及生成詞向量的語料對于詩詞分類效果的影響。
數(shù)據(jù)集:數(shù)據(jù)集包含了訓練詩詞字和詞向量的語料庫,詩詞風格分類的訓練集和測試集。
(1)詩詞語料庫(PoemCorpus):在文獻的唐代詩詞的語料基礎(chǔ)上加入了宋、元、明和清代的詩詞一共107MB 詩詞數(shù)據(jù),用于生成基于詩詞語料的字向量和詞向量。
(2)詩詞訓練語料(PoemTrainData):由專家①重慶大學文學院老師及古詩文網(wǎng)分類https://www.gushiwen.org/shiju/整理形成的帶有風格標簽的詩詞數(shù)據(jù)集,其中豪放詩詞1100 首,婉約詩詞1140 首。
(3)詩詞測試語料(PoemTestData):由兩部分組成:①TestYi:文獻[7]中提供的精典詩詞語料豪放風格188首,婉約風格210 首,此測試集包含與詩詞訓練語料。②TestP:由專家(Professional:P)整理的詩詞語料,豪放和婉約各300 首,與訓練語料獨立。
詞向量:本文基于Google 的Word2Vec 工具,針對詩詞的文言文結(jié)構(gòu)生成了3 類字或詞向量:
(1)基于詩詞語料庫的字向量(PoemCharacterVec:PCVec):在107MB 的詩詞語料庫上以單字為切分單位通過Word2Vec 工具訓練的字向量,每個向量包含100個維度。
(2)基于詩詞語料庫的詞向量(PoemWordVec:PWVec):用現(xiàn)代jieba 分詞工具處理古詩詞語料后,生成的古詩詞詞向量。向量維度同字向量。
(3)基于維基中文語料庫的詞向量(WikiWordVec:WWVec):基于維基百科中文文本語料(1.2GB),訓練得到的中文詞向量。
分類器:主要使用了2.2 小節(jié)中的LSTM、BLSTM分類器、文獻[7]的基于遺傳算法改進的樸素貝葉斯分類器。
LSTM 和BLSTM 參數(shù):本文的神經(jīng)網(wǎng)絡(luò)分類模型基于Keras 工具包。經(jīng)過多次實驗驗證得到網(wǎng)絡(luò)模型的最佳參數(shù):隱藏層神經(jīng)元為256;Dropout 層參數(shù)設(shè)置為0.5;采用ADAM 優(yōu)化器[17],該優(yōu)化器可以根據(jù)網(wǎng)絡(luò)訓練參數(shù)自動調(diào)節(jié)學利率,能有效防止過擬合與局部最優(yōu)解,初始學習率設(shè)置為0.001。
本文方法及對比方法在詩詞數(shù)據(jù)集上的準確率如表1 所示。
表1 不同分類器與不同詞向量在兩個詩詞數(shù)據(jù)集上的準確率(%)
從表1 中可以看出在的精典詩詞語料上,相比于樸素貝葉斯50.2%和文獻88.5%的準確率,BLSTM 網(wǎng)絡(luò)模型在基于3 種字或詞向量的古詩詞分類風格分類中都取得了更高的準確率,對應詩詞字向量,詞向量和維基百科中文詞向量的準確率分別提高了7.7%、7.1%和6.2%,達到了96.2%、95.6%和94.7%。同時,相比于文獻只在封閉數(shù)據(jù)集上做了測試,BLSTM 在開放的測試語料上也取得很好的準確率,最好達到了90.7%。充分證明了本文方法的在古詩詞風格分類工作中的有效性。但是,LSTM 在相同環(huán)境下的古詩詞風格分類中的表現(xiàn)顯得差強人意,準確率只有50%,這樣大的差距在現(xiàn)代文的處理中是幾乎沒有出現(xiàn)過的。由此推斷出中文古詩詞的上下文聯(lián)系比現(xiàn)代文更加緊密,特征相關(guān)性也更強,而單向網(wǎng)絡(luò)模型只能關(guān)聯(lián)上文或者下文的信息,不能將兩者結(jié)合,從而導致LSTM 的分類效果不佳。
表2 精典詩詞語料上各分類器的ROC 面積
另一個重要的二分類問題的統(tǒng)計分析工具就是受試者工作特征曲線(Receiver Operating Characteristic Curve,簡稱ROC 曲線)。ROC 曲線下包含的面積代表了二分類選擇正確的概率,面積越大說明分類方法越好。表2 給出了基于精典詩詞數(shù)據(jù)集下的各個分類器的ROC 曲線面積大小,BLSTM 同樣在3 個詞向量下都獲得了很高的ROC 面積率分別是99.48%、99.03%和97.90%。進一步驗證了遞歸神經(jīng)網(wǎng)絡(luò)以及詞嵌入技術(shù)在古詩詞風格分類中的有效性、高效性。
更進一步,本文還研究了文本語料及詞向量對詩詞分類的影響關(guān)系。圖6(a)、6(b)分別是BLSTM 模型下3 種字或詞向量對應的精典詩詞語料和專家語料的ROC 曲線。
圖6 3種詞向量在兩種語料下的ROC曲線圖
從圖中可以得出:在兩個測試語料上,基于詩詞語料的字向量和詞向量的ROC 面積基本上差異很小,分別是99.48%與99.01%和96.72%與96.80%。而基于維基百科的中文詞向量ROC 面積則要稍微低一點,分別是97.95%和94.40%。綜合表1 中的分類準確率可以得出,基于詩詞語料庫的詩詞字或詞向量相比現(xiàn)代漢語語料效果更好。構(gòu)建古詩詞語料庫并由該語料庫生成詞向量能提高古詩詞風格分類的準確率,分類器的效果也會更好。同時,對于同樣的詩詞語料下的詩詞的詞向量和字向量獲得的分類效果差別不大。其次,現(xiàn)代漢語文本語料生成的詞向量在處理詩詞文本同樣可以獲得較好的準確率,也大幅提高了之前傳統(tǒng)的機器學習算法所獲得的準確率。這一點也從側(cè)面證實文獻提出的詩詞詞組在現(xiàn)代文本中已經(jīng)變得很常用,現(xiàn)代分詞工具也能正常應用到古詩詞分詞中。
本文在詩詞語料庫的基礎(chǔ)上將深度遞歸神經(jīng)網(wǎng)絡(luò)成功運用到了中文古詩詞“豪放”和“婉約”風格分類中。與傳統(tǒng)的機器學習分類算法相比,在分類精確度上有大幅提高,最高達到了96.2%。同時,通過實驗得到了以下幾點結(jié)論:
(1)深度學習遞歸神經(jīng)網(wǎng)絡(luò)(RNN)能夠?qū)χ形墓旁娫~進行風格分類,效果比傳統(tǒng)機器學習算法更好。
(2)現(xiàn)代文語料庫在處理詩詞風格分類中也能取得較傳統(tǒng)機器學習方法更好的效果,但是,建立更大、更全面的古詩詞語料庫對古文詩詞的分類更加有效。
(3)對于古詩詞語料庫的詩詞,字切分和詞切分對詩詞風格的分類效果影響很小,都能取得很好的分類效果。
后期工作可以組建更大更豐富的現(xiàn)代中文語料,在中文文本語料庫足夠豐富可以預測,現(xiàn)代文的詞向量可能會與古文語料詞向量效果匹敵。對于詩詞,進一步研究其更細膩的風格的判斷,例如:詩詞意向、詩詞各個風格程度大小等。