衛(wèi)萬成,黃文明,2,王 晶,鄧珍榮,2
(1. 桂林電子科技大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,廣西 桂林 541004;2. 廣西高效云計算與復(fù)雜系統(tǒng)重點實驗室,廣西 桂林 541004)
古詩和對聯(lián)是中國文化的精髓。古詩一般被用來歌頌英雄人物、美麗的風(fēng)景、愛情、友誼等。古詩被分為很多類,例如,唐詩、宋詞、元曲等,每種古詩都有自己獨特的結(jié)構(gòu)、韻律。表1展示了一種中國古代最流行的古詩體裁——唐詩絕句。絕句在結(jié)構(gòu)和韻律上具有嚴(yán)格的規(guī)則: 每首詩由4行組成,每一行有5個或者7個漢字(5個漢字稱為五言絕句,7個漢字稱為七言絕句);每個漢字音調(diào)要么是平,要么是仄;詩的第二行和最后一行的最后一個漢字必須同屬于一個韻部[1]。正因為絕句在結(jié)構(gòu)和韻律上具有嚴(yán)格的限制,所以好的絕句朗誦起來具有很強的節(jié)奏感。
表1 唐詩絕句
對聯(lián)一般在春節(jié)、婚禮、賀歲等場合下寫于紅紙貼于門墻上,代表了人們對美好生活的祝愿。表2展示了一副中國對聯(lián)。對聯(lián)分為上聯(lián)和下聯(lián),上下聯(lián)具有嚴(yán)格的約束,在結(jié)構(gòu)上要求長度一致,語義上要求詞性相同,音調(diào)上要求仄起平落。如表2中的對聯(lián)長度一致,即漢字個數(shù)相同;語義相對,“一帆風(fēng)順”對“萬事如意”,“年年好”對“步步高”;在最后一個字符的音調(diào)上仄起平落,“好”是仄,“高”是平,因此好的對聯(lián)讀起來會感覺朗朗上口。
表2 中國對聯(lián)
近幾年,古詩和對聯(lián)的自動生成研究得到了學(xué)術(shù)界的廣泛關(guān)注??蒲泄ぷ髡邆儾捎昧烁鞣N方法研究古詩和對聯(lián)生成,文獻[2-7]采用規(guī)則和模板的方式生成古詩或?qū)β?lián),文獻[8-10]采用文本生成算法生成古詩,文獻[11]采用自動摘要的方法生成古詩,文獻[12-13]采用統(tǒng)計機器翻譯的方法生成古詩及對聯(lián)。最近,深度學(xué)習(xí)方法被廣泛地應(yīng)用于古詩對聯(lián)生成任務(wù)上,并取得了很大成效。Zhang等[14];Wang等[15-16];Yi等[17];Yan等[18]均采用序列到序列模型來生成古詩和對聯(lián)。此類方法在古詩和對聯(lián)生成任務(wù)上取得了很大的進步,但也存在著一定的問題。如采用的單任務(wù)模型泛化能力低,在古詩生成上如用戶輸入現(xiàn)代詞匯時,系統(tǒng)就會出現(xiàn)問題。此外,此類方法在生成時,限制用戶的輸入,當(dāng)輸入符合條件時才能創(chuàng)作,如此增加了用戶使用的難度。
本文提出了一種新穎的多任務(wù)學(xué)習(xí)模型用于古詩和對聯(lián)的自動生成,來彌補以上方法的不足,提高古詩和對聯(lián)的生成效果。眾所周知,古詩和對聯(lián)的自動生成任務(wù)具有高度的相似性,要求平仄有序,對仗工整,尤其在深度學(xué)習(xí)中,對聯(lián)可以看作是僅有兩行詩句的古詩。盡管古詩和對聯(lián)有很多的相同點,但是兩者還是存在著一定的差別,不能混為一談,具體的不同點體現(xiàn)在以下3點:
(1) 格式上,古詩絕句由4句組成,每句固定為5個或者7個漢字,對聯(lián)由兩句組成,漢字個數(shù)不定,上下聯(lián)詞與詞之間必須一一相對;
(2) 內(nèi)容上,多數(shù)古詩絕句用來描述古代生活,采用的詞匯與現(xiàn)代不同,自動生成的古詩很難融入現(xiàn)代氣息,而大部分對聯(lián)采用現(xiàn)代詞匯,充分體現(xiàn)了現(xiàn)代生活氣息;
(3) 韻律上,對聯(lián)比古詩要求更加嚴(yán)格,對聯(lián)的上下聯(lián)最后一個漢字必須遵循仄起平落。根據(jù)異同,本文中所提的多任務(wù)模型可以很好地融合兩個任務(wù)。模型底層可以兼容古詩和對聯(lián)的異同,上層保留各自不同,使模型泛化能力得到增強,相比單任務(wù)模型生成效果更佳。另外,將從用戶輸入意圖中提取的關(guān)鍵詞信息融入模型中,讓模型創(chuàng)作的內(nèi)容與用戶意圖一致,使用不受限制,方便生成個性化的古詩及對聯(lián)。
在自然語言處理中,古詩、對聯(lián)的自動生成一直是研究的熱點。文獻[5-6]提出了一種基于語義和語法模板的西班牙詩生成方法。文獻[4]采用基于詞聯(lián)想的方法生成俳句。文獻[2-3]采用短語搜索的方法生成日本詩。文獻[19]采用統(tǒng)計的方法對格律詩進行分析、生成。文獻[20]采用嚴(yán)格的模板方式實現(xiàn)了一個基于語料庫生成古詩的系統(tǒng)。文獻[8-13]采用一些生成算法生成古詩,其中統(tǒng)計機器翻譯(statistical machine translation,SMT)算法是一種很有效的方法。文獻[11]認為古詩生成是個可優(yōu)化問題,采用基于摘要框架并結(jié)合一些規(guī)則的方法生成古詩。文獻[13]采用一種基于SMT的模型來自動生成漢語對聯(lián),將上聯(lián)看成為源語言,翻譯出下聯(lián),之后文獻[12]對這種方法做了延伸,將SMT的模型用來生成絕句,根據(jù)前面的句子生成后面的句子。
最近,深度學(xué)習(xí)方法在古詩和對聯(lián)生成任務(wù)上獲得了很大的成功。文獻[14]提出了基于循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的絕句生成方法,這種方法首先根據(jù)給定的關(guān)鍵詞利用2010年Mikolov等[21]提出的循環(huán)神經(jīng)網(wǎng)絡(luò)語言模型(RNNLM)生成詩的第一行,然后后面行根據(jù)前面已經(jīng)生成的所有行順序地生成,最后組成一首詩。文獻[15]采用一個端到端的神經(jīng)機器翻譯模型生成宋詞,通過翻譯先前行得出下一行,這種方法類似于SMT,但是在兩句話之間的語義相關(guān)性更好。文獻[17]將這種方法應(yīng)用在絕句生成上面。文獻[22]提出一個新的古詩生成算法,首先根據(jù)輸入的關(guān)鍵詞生成出相關(guān)的韻文,然后根據(jù)韻文利用序列到序列模型[23]生成整首詩。文獻[16]提出一種基于規(guī)劃信息的神經(jīng)網(wǎng)絡(luò)模型用于古詩生成,首先根據(jù)用戶輸入提取關(guān)鍵詞,然后利用關(guān)鍵詞信息生成古詩。文獻[17]訓(xùn)練三種序列到序列模型來分別生成絕句的第一行、第二行和第三、四行,并且采用了一些技巧來提高古詩的押韻。文獻[18]將序列到序列神經(jīng)網(wǎng)絡(luò)框架應(yīng)用于對聯(lián)生成中,達到了較好的效果,但是此方法用戶必須輸入上聯(lián),模型才能應(yīng)對下聯(lián)。
本文在前人研究基礎(chǔ)上進行改進,提出一種基于多任務(wù)學(xué)習(xí)的古詩和對聯(lián)生成方法。本文方法的貢獻在于:
(1) 第一次將古詩和對聯(lián)生成任務(wù)相結(jié)合,設(shè)計了一種用于古詩和對聯(lián)生成的多任務(wù)學(xué)習(xí)模型,提高模型的泛化能力;
(2) 采用TextRank算法和基于seq2seq詞擴展相結(jié)合的方法來構(gòu)建古詩及對聯(lián)的寫作大綱,使用戶輸入不受限制;
(3) 本文方法第一次在對聯(lián)自動生成中引入用戶意圖信息來生成個性化對聯(lián)。
方法的總體思路為首先從用戶輸入文本中提取寫作大綱,然后根據(jù)寫作大綱采用基于多任務(wù)的古詩和對聯(lián)生成模型生成古詩與對聯(lián)。方法通過變量來控制模型是生成古詩還是對聯(lián)。
圖1展示了古詩生成的流程。在生成古詩時,假設(shè)一首古詩由N行詩句組成,Li代表第i行詩,首先根據(jù)用戶輸入的文本,構(gòu)建出N個關(guān)鍵詞(K1,K2,K3,…,KN)作為作詩大綱,Ki表示第i個關(guān)鍵詞,在生成階段作為第i行詩句的子標(biāo)題,然后將Ki和L1:i-1作為輸入,生成Li,其中L1:i-1為已生成的所有行詩,每行詩根據(jù)作詩大綱中的一個子標(biāo)題和之前生成的所有行詩句進行生成,如此,順序地生成整首詩。圖2展示了對聯(lián)生成的流程。生成對聯(lián)時,根據(jù)用戶輸入文本構(gòu)建出兩個關(guān)鍵詞,分別用于生成上聯(lián)和下聯(lián)。對聯(lián)大綱的獲取首先從用戶輸入的文本中提取一個最重要的關(guān)鍵詞,然后再擴展得出此關(guān)鍵詞的相對詞,兩個詞作為生成上聯(lián)和下聯(lián)的子標(biāo)題。注意的是,對聯(lián)大綱構(gòu)建時,之所以構(gòu)建一組相對詞,是因為對聯(lián)與古詩生成不一樣,對聯(lián)的上下聯(lián)每個詞匯、句法之間具有嚴(yán)格的對應(yīng)關(guān)系,一旦上聯(lián)確定了,下聯(lián)采用的詞匯就會受到一定限制,如再強加隨意的主題信息進去,模型生成下聯(lián)的效果會明顯受到影響。
古詩生成時,生成一首N行的詩需要構(gòu)建N個關(guān)鍵詞來作為作詩大綱,每個關(guān)鍵詞作為每行詩句的子標(biāo)題。首先,根據(jù)用戶的輸入從中提取一些關(guān)鍵詞。用戶的輸入為A,A有長有短,從A中提取出來的關(guān)鍵詞數(shù)要小于等于N。如果用戶的輸入A很長,那么提取其中最重要的N個關(guān)鍵詞作為作詩大綱。N個關(guān)鍵詞對應(yīng)于N行詩句。如果從A中提取出的關(guān)鍵詞小于N個,那么需要將關(guān)鍵詞個數(shù)擴展成N個。對聯(lián)生成時,需要獲取一組相對詞作為生成上聯(lián)和下聯(lián)的子標(biāo)題。首先從用戶的輸入文本中提取一個最重要的關(guān)鍵詞,然后再根據(jù)此關(guān)鍵詞擴展出其相對的詞。
圖1 古詩生成框圖
圖2 對聯(lián)生成框圖
2.2.1 關(guān)鍵詞提取
本文采用TextRank算法[24]從用戶輸入的文本中提取關(guān)鍵詞作為古詩和對聯(lián)的寫作大綱。TextRank算法可以評估詞在一句話或者一段話中的重要程度。TextRank是由PageRank算法[25]演化而來,是一種基于圖排序的算法。在TextRank的算法中,由節(jié)點及節(jié)點間的連接關(guān)系構(gòu)成一個無向的網(wǎng)絡(luò)圖,節(jié)點之間的權(quán)重根據(jù)兩個詞的總計共現(xiàn)次數(shù)來設(shè)定。根據(jù)TextRank最終得分進行排序,得出用戶輸入文本中最關(guān)鍵的M個詞 (M≤N)。一開始,給S(Vi)一個初始化值,然后根據(jù)式(1)進行迭代,計算得分,直到收斂。
(1)
其中,ωji是節(jié)點Vj和Vi連接邊的權(quán)值,E(Vi)表示與Vj連接的節(jié)點的集合,d表示阻尼因子,通常設(shè)為0.85[25],S(Vi)為節(jié)點Vi的TextRank得分,初始分被設(shè)為1.0。
2.2.2 關(guān)鍵詞擴展
作詩大綱構(gòu)建時,從用戶輸入A中提取的關(guān)鍵詞M一般都會小于N,這時需要對關(guān)鍵詞進行擴展,擴展出相互之間具有聯(lián)系的關(guān)鍵詞。對聯(lián)大綱構(gòu)建時,需要根據(jù)從用戶輸入中提取的關(guān)鍵詞擴展出與其相對的詞。本文借鑒文獻[26]采用基于注意力機制的序列到序列模型對關(guān)鍵詞擴展,將詞擴展看成是序列到序列的問題,分別訓(xùn)練出用于古詩大綱構(gòu)建的關(guān)鍵詞擴展模型(pkeseq2seq)和用于對聯(lián)大綱構(gòu)建的關(guān)鍵詞擴展模型(ckeseq2seq)。在pkeseq2seq中,輸入序列是從用戶輸入文本中提取出的和當(dāng)前模型已生成的所有關(guān)鍵詞的組合,輸出序列是預(yù)測出的關(guān)鍵詞。pkeseq2seq模型學(xué)習(xí)的是詞與詞之間的聯(lián)系,通過模型將具有聯(lián)系的詞擴展出來。在ckeseq2seq中,輸入序列是一個關(guān)鍵詞,輸出序列也是一個關(guān)鍵詞,ckeseq2seq模型學(xué)習(xí)的是一個詞與另一個詞之間的相對關(guān)系,尤其是在對聯(lián)用詞方面的相對性。pkeseq2seq和ckeseq2seq的模型結(jié)構(gòu)相同,都采用基于注意力機制的編碼-解碼結(jié)構(gòu),結(jié)構(gòu)如圖3所示,編碼器采用BiLSTM,解碼器采用LSTM。
圖3 基于注意力機制的序列到序列關(guān)鍵詞擴展模型
關(guān)鍵詞擴展模型中,編碼器將輸入序列(x1,x2,…)編碼成隱層狀態(tài)(h1,h2,…),其中,xi為第i個字符的編碼向量,解碼器用隱層狀態(tài)(h1,h2,…)生成輸出序列(y1,y2,…)。在每一個生成時刻,字符yt根據(jù)上一時刻的預(yù)測字符yt-1、當(dāng)前狀態(tài)St以及當(dāng)前的文本向量ct進行生成,ct由編碼器的隱藏層狀態(tài)(h1,h2,…)得來,每個隱藏狀態(tài)hi對預(yù)測yt的貢獻程度由權(quán)重at,i控制,at,i由計算St-1和hi相似性得來,通過權(quán)重at,i的控制,解碼器將會更加注意與當(dāng)前生成密切相關(guān)的輸入部分。
pkeseq2seq和ckeseq2seq模型的不同點在于訓(xùn)練語料。pkeseq2seq訓(xùn)練數(shù)據(jù)采用古詩中提取出來的關(guān)鍵詞,每首古詩采用TextRank算法提取出4個關(guān)鍵詞,每句詩對應(yīng)一個關(guān)鍵詞。擴展時,根據(jù)所有已存在的關(guān)鍵詞組成序列,擴展出與之聯(lián)系的關(guān)鍵詞,如 “明月 故鄉(xiāng) 惆悵”擴展出“感傷”。ckeseq2seq訓(xùn)練數(shù)據(jù)采用從對聯(lián)中提取出來的關(guān)鍵詞,每副對聯(lián)對應(yīng)兩個關(guān)鍵詞,采用TextRank算法在上聯(lián)中提取最重要的關(guān)鍵詞,在下聯(lián)中提取與上聯(lián)相對的關(guān)鍵詞,如在“春風(fēng)輕拂千山綠,旭日東升萬里紅”中提取出“春風(fēng)”和“旭日”兩個相對詞,春風(fēng)作為輸入序列,旭日作為輸出序列。
古詩和對聯(lián)有諸多相似特征,且兩者的自動生成方法大致相同。針對這一現(xiàn)象,本文引入多任務(wù)學(xué)習(xí)機制來融合古詩和對聯(lián)的自動生成。此外,在古詩和對聯(lián)創(chuàng)作中,一般作者都會先擬定一個簡單的大綱再進行創(chuàng)作。在計算機創(chuàng)作時,也需要根據(jù)大綱信息進行創(chuàng)作。本文借鑒Wang等人基于規(guī)劃的古詩生成模型[16],將寫作大綱融入到生成模型中,提出一種基于多任務(wù)學(xué)習(xí)的古詩和對聯(lián)生成模型(mtgseq2seq)。模型結(jié)構(gòu)示意圖如圖4所示。模型輸入由兩個不同序列組成: 關(guān)鍵詞和所有已生成的句子,模型輸出根據(jù)設(shè)定的參數(shù),輸出對應(yīng)的古詩和對聯(lián)。
圖4 基于多任務(wù)學(xué)習(xí)的古詩和對聯(lián)生成模型
2.3.1 目標(biāo)函數(shù)
(2)
其中,Φ={Φin,ΦoutT,T=1,2},Φin表示編碼器的參數(shù)集合,ΦoutT表示第T個解碼器的參數(shù)集合。NT表示第T種平行語料的大小,本文中T=1為古詩語料,T=2為對聯(lián)語料。古詩和對聯(lián)多任務(wù)學(xué)習(xí)模型中,編碼器部分共享參數(shù),解碼器部分需要分開優(yōu)化,編碼器兼容古詩和對聯(lián)的語義和語法特征,解碼器學(xué)習(xí)古詩和對聯(lián)各自的語義、語法特征。
2.3.2 模型細節(jié)
本文中,多任務(wù)學(xué)習(xí)模型的編碼部分由兩個BiLSTM組成并融入注意力機制,一個BiLSTM用于關(guān)鍵詞輸入,另一個BiLSTM用于已生成的古詩和對聯(lián)輸入;解碼部分由兩個LSTM組成,一個LSTM用于古詩的解碼輸出,另一個LSTM用于對聯(lián)的解碼輸出。
假如關(guān)鍵詞K有Tk個字符,K={a1,a2,a3,…,aTk},已生成的文本X有Tk個字符,X={x1,x2,x3,…,xTk}。編碼階段首先將K編碼成隱藏狀態(tài)的向量[r1:rTk],將X編碼成[h1:hTk]。然后將[r1:rTk]整合成一個向量rc,將前向傳播中的最后一個狀態(tài)和反向傳播中第一個狀態(tài)進行連接,如式(3)所示。
(3)
文本用向量H=[h0:hTk]來表示關(guān)鍵詞K和已生成的文本X,其中h0=rc,[h1:hTk]表示已生成的文本。當(dāng)沒有已生成的文本時,Tk=0,H=[h0],所以第一行詩句和上聯(lián)的生成僅僅根據(jù)大綱的第一個關(guān)鍵詞來生成。
在解碼階段,根據(jù)flag值確定采用poetry-decoder還是couplet-decoder來維護內(nèi)部狀態(tài)向量st,并在t時刻,被選中的編碼器根據(jù)st、語義向量ct和先前的輸出yt-1生成最可能的輸出yt。如式(4)所示。
(4)
其中,flag要么是0要么是1,0表示使用couplet-decoder,1表示使用poetry-decoder。在每一時刻,st按照式(5)進行更新。
st=f(st -1,ct -1,yt -1)
(5)
其中,f(·)是LSTM模型的一個激活函數(shù)。ct由所有輸入序列的隱層狀態(tài)得出,按照式(6)計算。
(6)
其中,hj是輸入序列中第j個字符的編碼向量,αtj為hj的注意力權(quán)值,αtj的計算如式(7)所示。
(7)
k從0開始,其中,etk如式(8)所示。
(8)
其中,Vα,W和U是三個參數(shù)矩陣,需要在模型訓(xùn)練中優(yōu)化。
本文主要研究了絕句和對聯(lián)的自動生成,絕句由4行組成,每行有5個或者7個漢字,對聯(lián)由兩行組成,每行漢字個數(shù)不定。實驗從網(wǎng)上爬取了76 475首絕句和202 383副對聯(lián),從中隨機挑選了2 000首絕句和6 000副對聯(lián)作為驗證集,2 000首絕句和6 000副對聯(lián)作為測試集,剩余的72 475首絕句和190 383副對聯(lián)作為訓(xùn)練集。
首先,實驗對所有語料進行分詞處理,然后計算每個詞的TextRank分,將TextRank分最高的詞作為每個句子的關(guān)鍵詞。一首詩中提取出4個關(guān)鍵詞,如表3所示。一副對聯(lián)中提取兩個關(guān)鍵詞,從上聯(lián)中利用TextRank提取出一個關(guān)鍵詞,然后根據(jù)關(guān)鍵詞在上聯(lián)中位置將下聯(lián)對應(yīng)的關(guān)鍵詞取出,如表4所示。從絕句的訓(xùn)練語料中提取了289 900個關(guān)鍵詞,從對聯(lián)的訓(xùn)練語料中共提取了380 766個關(guān)鍵詞。將每首詩的關(guān)鍵詞組合成如表5形式用于訓(xùn)練pkeseq2seq模型;將每副對聯(lián)的關(guān)鍵詞組合成如表6形式用于訓(xùn)練ckeseq2seq模型;將絕句和對聯(lián)組合成如表7形式用于訓(xùn)練mtgseq2seq模型。
表3 絕句對應(yīng)的關(guān)鍵詞
表4 對聯(lián)對應(yīng)的關(guān)鍵詞
表5 pkeseq2seq模型訓(xùn)練數(shù)據(jù)結(jié)構(gòu)
表6 ckeseq2seq模型訓(xùn)練數(shù)據(jù)結(jié)構(gòu)
表7 mtgseq2seq模型訓(xùn)練數(shù)據(jù)結(jié)構(gòu)
實驗對pkeseq2seq模型、ckeseq2seq模型和多任務(wù)生成模型mtgseq2seq模型分別進行了訓(xùn)練。模型訓(xùn)練參考了Wang等[15]的訓(xùn)練方法,采用交叉熵作為訓(xùn)練的損失函數(shù),優(yōu)化器采用小批量隨機梯度下降算法(the minibatch stochastic gradient descent algorithm)。另外,采用AdaDelta算法去調(diào)節(jié)學(xué)習(xí)率[28]。最后,根據(jù)在驗證集上的困惑度來選取模型最優(yōu)參數(shù)。
其中,pkeseq2seq和ckeseq2seq模型的輸入基于詞向量,采用Word2Vec模型初始化word embedding,大小設(shè)為512,BiLSTM和LSTM的隱層單元大小都設(shè)為256,mini-batch大小為128。mtgseq2seq模型的輸入基于字向量,隨機初始化字向量,大小設(shè)為512,隨著訓(xùn)練進行不斷優(yōu)化,BiLSTM和LSTM的隱層單元大小都為512,mini-batch大小為128。
(1) BLEU自動評估
BLEU由Papineni等[29]于2002年提出,原先用于評估機器翻譯系統(tǒng),因為古詩和對聯(lián)生成任務(wù)和機器翻譯任務(wù)有一定的相似性,所以在古詩和對聯(lián)生成任務(wù)上,諸多研究者都采用BLEU自動評估方法,典型的有He等[12];Zhang等[14];Wang等[15];Yan等[17];蔣等[30];Sun等[17]。本文同樣采用BLEU自動評估方法,計算出每種方法的BLEU得分。值得注意的是,由于古文中采用的詞匯大多為一個字或者兩個字,所以對于古詩及對聯(lián)的評估,計算其BLEU-2得分是最有效的[17]。
(2) 人工評估
本文采用BLEU自動評估的同時也采用人工評估。古詩的人工評估,參考文獻[10-12,17]的評估思路,從“前后押韻、語言流暢、內(nèi)容一致、主題意義”4個部分去判斷一首古詩的好壞。對聯(lián)的評估,本文參考文獻[17]的評估思路,從“句法、語義”兩個部分去判斷一副對聯(lián)的好壞。每個部分設(shè)置最高分為5分,得分越高越好,古詩和對聯(lián)的評估細則見表8和表9。實驗讓每種方法對應(yīng)的系統(tǒng)分別生成20首絕句和20副對聯(lián),然后邀請10位具有碩士學(xué)歷及以上的學(xué)者對所有生成的絕句和對聯(lián)分別進行打分,取平均作為最后得分。
表8 古詩人工評估細則
表9 對聯(lián)人工評估細則
在BLEU自動評估中,本文設(shè)置了4種方法對比: RNNPG(1)RNNPG: https://github.com/XingxingZhang/rnnpg[14]、ANMT(2)ANMT: https://github.com/nyu-dl/dl4mt-tutorial/tree/master/session3[31]、S2SPG[26]和本文方法(MTLPCG)。其中,S2SPG和MTLPCG是單任務(wù)學(xué)習(xí)模型與多任務(wù)學(xué)習(xí)模型的對比,S2SPG方法中寫作大綱構(gòu)建、數(shù)據(jù)處理、模型訓(xùn)練等過程與MTLPCG一致,唯一的區(qū)別在于S2SPG是單任務(wù),MTLPCG是多任務(wù)。其中,RNNPG和ANMT通過其開源代碼進行實現(xiàn),注意的是,實驗未驗證RNNPG和ANMT方法的對聯(lián)生成,故方法對聯(lián)部分的對比缺失。另外,因為RNNPG和ANMT的第一行詩在測試時需要事先給出,然后生成后三行,所以為了對齊實驗,實驗只計算所有方法生成的后三行詩的BLEU-2分,然后計算平均分。S2SPG和MLTPCG中輸入的關(guān)鍵詞和第一行詩來源于測試集。
在人工評估中,設(shè)置了6種方法的對比: RNNPG[14]、ANMT[31]、PPG(3)JIUGE: https://jiuge.thunlp.cn[16]、JIUGE[17]、S2SPG和本文方法(MTLPCG)。其中,S2SPG和MTLPCG同樣為單任務(wù)學(xué)習(xí)模型和多任務(wù)學(xué)習(xí)模型的對比。其中,JIUGE方法生成的絕句來源于其公開的系統(tǒng),因其公開的系統(tǒng)未實現(xiàn)對聯(lián)的生成,故此方法對聯(lián)部分的對比同樣缺失。PPG方法未公開系統(tǒng),本文對其進行了復(fù)現(xiàn),利用PPG方法分別生成了對應(yīng)的古詩和對聯(lián)。注意的是,PPG和S2SPG在古詩生成時,采用古詩語料庫進行訓(xùn)練,在對聯(lián)生成時,采用對聯(lián)語料庫進行訓(xùn)練。
此外,需要說明的是在諸多對五言律詩和七言律詩做區(qū)分評估的論文實驗中,五言律詩和七言律詩在表現(xiàn)模型效果上是一致的,如文獻[14,16-17]等,因此,在本文評估中并未對五言律詩和七言律詩做區(qū)分評估。然而,在人工評估的20首古詩中,取10首五言律詩,取10首七言律詩。
表10展示了自動評估得分,表11展示了人工評估得分,表中每欄最好成績用*著重標(biāo)記。另外,為了方便閱讀,同樣在圖5和圖6中分別以柱狀圖的形式展示了評估結(jié)果。
從結(jié)果中可以看出,本文提出的MTLPCG方法在絕句和對聯(lián)生成中的表現(xiàn)優(yōu)于所有基準(zhǔn)方法。在自動評估結(jié)果中, MTLPCG和S2SPG的得分明顯高于RNNPG和ANMT,這正是因為S2SPG和MTLPCG在生成模型中都融入了大綱關(guān)鍵詞信息,如此保證了生成詩句的內(nèi)容和效果。ANMT、PPG、JIUGE、S2SPG、MTLPCG都采用了基于注意力機制的序列到序列模型框架,效果都優(yōu)于RNNPG,說明了基于注意力機制的序列到序列模型比單獨的RNN模型能夠更好地學(xué)習(xí)詩詞前后的語義關(guān)系。值得一提的是JIUGE生成的古詩在前后押韻和語言流暢方面得分高于PPG和S2SPG,在內(nèi)容一致和主題意義方面得分低于PPG和S2SPG,這說明了JIUGE方法對古詩的前后押韻和語言流暢方面有很大的幫助,但是JIUGE方法中用戶意圖僅影響第一行詩的生成,對后面詩句并沒有太大影響,然而PPG和S2SPG基于大綱生成每行詩句,所以在內(nèi)容一致和主題意義兩方面得分遠遠高于JIUGE。最后,從單任務(wù)S2SPG和多任務(wù)MTLPCG的對比來看,MTLPCG在絕句和對聯(lián)生成上都明顯優(yōu)于S2SPG,這說明采用的多任務(wù)學(xué)習(xí)方法起到了相應(yīng)的效果,在古詩和對聯(lián)自動生成任務(wù)上,兩者融合可以相互促進,相輔相成,提高生成效果。
表10 BLEU-2得分結(jié)果
表11 人工評估得分結(jié)果
圖5 BLEU-2得分統(tǒng)計圖
圖6 人工評估得分統(tǒng)計圖
表12列舉了人工交互生成的絕句與對聯(lián)。通過輸入“秋天來了,楓葉落下了”來生成絕句,提取出的作詩大綱為“秋風(fēng);萬里;楓葉;孤城”,然后根據(jù)作詩大綱生成古詩: “秋天夜色月華明,南北東西萬里情.楓葉滿庭霜露濕,獨坐聽雨落孤城.”。通過輸入“健康吉祥”生成對聯(lián),提取出的對聯(lián)大綱為“健康吉祥;安定團結(jié)”,生成的對聯(lián)為“健康吉祥寶貴地,安定團結(jié)幸福家”。
表12 人工交互生成的古詩和對聯(lián)
本文創(chuàng)新性地將古詩生成任務(wù)和對聯(lián)生成任務(wù)聯(lián)合,提出了基于多任務(wù)學(xué)習(xí)的古詩和對聯(lián)自動生成方法。方法中,本文設(shè)計了一種新穎的多任務(wù)學(xué)習(xí)模型來生成古詩和對聯(lián),使得一個模型框架不僅可以生成個性化古詩,還可以生成個性化對聯(lián)。從實驗結(jié)果來看,本文提出的方法優(yōu)于所有基準(zhǔn)方法,方法采用的多任務(wù)模型相較于單任務(wù)模型,模型的泛化能力得到了大大增強,表現(xiàn)效果得到了很大提升。
本文的研究取得了較好的成果,相信會對古詩和對聯(lián)生成以及其他自然語言生成的研究有很大的參考價值。在未來工作中,我們會將多任務(wù)的學(xué)習(xí)方式應(yīng)用于根據(jù)圖片生成古詩和對聯(lián)的任務(wù)中。另外,我們還會繼續(xù)研究基于主題的古詩生成,在大綱中加入主題模型,例如,采用PLSA、LDA等主題模型,讓自動生成的古詩和對聯(lián)的主題與用戶意圖更加一致。