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