廖榮凡,沈希忠,劉 爽
(上海應(yīng)用技術(shù)大學(xué) 電子信息工程系,上海 201418)
詩歌是一種優(yōu)美的語言形式,詩以其意象組合和語言韻律給人帶來獨(dú)特的審美體驗(yàn).五言絕句是我國(guó)傳統(tǒng)文學(xué)的結(jié)晶有著很高的文學(xué)和藝術(shù)價(jià)值.一方面絕句詩歌本身有嚴(yán)格的對(duì)仗和格律要求,詩人寫作時(shí)應(yīng)仔細(xì)推敲每一個(gè)字的使用,以最精煉的文字表達(dá)出最細(xì)膩的情感,另一方面這種結(jié)構(gòu)規(guī)則含義豐富的詩歌形式,為計(jì)算機(jī)理解人類語言提供了良好的范本.近年來有越來越多的學(xué)者開始使用計(jì)算機(jī)模擬詩歌的規(guī)則和詩人的寫作方式來生成主題明確、語言通暢的絕句詩.這些工作對(duì)于計(jì)算機(jī)理解人類語言和思維都有著積極的探索意義.
五言律詩最基本的格律要求是:重音位置的字平仄相對(duì).平仄律是六朝及隋唐詩人根據(jù)當(dāng)時(shí)的語言形態(tài)和審美觀念不斷探索而形成的詩體規(guī)范[1].絕句中基本的對(duì)仗要求是:詩歌上下兩句對(duì)應(yīng)位置動(dòng)詞對(duì)動(dòng)詞、名詞對(duì)名詞.古代詩人可以憑借對(duì)格律的運(yùn)用和文字的把控即興賦詩而渾然天成,如李白《將進(jìn)酒》“呼兒將出換美酒,與爾共消萬古愁”,曹植七步成詩“本是同根生,相煎何太急”.這對(duì)于計(jì)算機(jī)自動(dòng)生成詩歌的啟發(fā)是我們可以更加關(guān)注詩歌語言文字本身的搭配關(guān)系,在詩句之間加入對(duì)聯(lián)的規(guī)則,以增強(qiáng)詩歌語言的韻律和感情色彩.
目前將文字向量化的算法可以捕捉到文字間細(xì)膩的語法和語義關(guān)系[2,3],含義相近的字在向量空間中的分布也更相近.詞向量的表達(dá)方便了句子建模,Zhang等[4]使用卷積神經(jīng)網(wǎng)絡(luò)提取語句在不同層次上的語義和模式特征,進(jìn)行句子間的語義匹配.這可以看作是使用卷積神經(jīng)網(wǎng)絡(luò)建模句子的語義表征.循環(huán)神經(jīng)網(wǎng)絡(luò)在語音分析和文本翻譯上的表現(xiàn)證明它可以很好的提取和記憶輸入信息前后之間的聯(lián)系[5].
受到二維卷積神經(jīng)網(wǎng)絡(luò)在圖像處理應(yīng)用中的啟發(fā),我們創(chuàng)新性地將一維卷積網(wǎng)絡(luò)應(yīng)用到絕句詩歌的生成當(dāng)中,提出了一種更具有感情色彩的詩歌生成模型.
我們的詩歌生成模型由語義模型和文字規(guī)則模型構(gòu)成.語義模型根據(jù)上句(以句號(hào)分句,逗號(hào)分隔的子句為半句)的輸入預(yù)測(cè)下半句的輸出,以增加詩歌主題和上下文的連貫性.文字規(guī)則模型根據(jù)語義模型輸出的前半句,預(yù)測(cè)輸出的后半句,使詩句文字在感情色彩上和主題一致.語義模型和文字規(guī)則模型共同完成一首詩歌的生成.
具體的語義模型由一維卷積網(wǎng)絡(luò)和雙向循環(huán)網(wǎng)絡(luò)構(gòu)成,一維卷積網(wǎng)絡(luò)用于提取詩句的抽象語義特征,雙向循環(huán)網(wǎng)絡(luò)用于記憶語義特征之間的結(jié)構(gòu)關(guān)系;文字規(guī)則模型由詞嵌入網(wǎng)絡(luò)和帶注意力機(jī)制的編碼解碼器構(gòu)成,用于學(xué)習(xí)詩歌文字的對(duì)仗關(guān)系和文字在高維空間的結(jié)構(gòu)關(guān)系.
關(guān)于詩歌自動(dòng)生成的研究已經(jīng)有了幾十年的歷史,早期的詩歌生成基于規(guī)則和模板[6,7]之后基于統(tǒng)計(jì)機(jī)器學(xué)習(xí)算法的模型被用到了詩歌生成當(dāng)中如SMT(Statistical Machine Translation)[8],文獻(xiàn)[9]設(shè)計(jì)了一種基于短語的統(tǒng)計(jì)機(jī)器翻譯模型,以前一句詩歌生成后一句詩歌.文獻(xiàn)[10]提出以統(tǒng)計(jì)機(jī)器翻譯為理論基礎(chǔ),將格律詩的上下句關(guān)系映射為統(tǒng)計(jì)翻譯模型中源語言與目標(biāo)語言的關(guān)系設(shè)計(jì)了融入詩詞領(lǐng)域知識(shí)的統(tǒng)計(jì)機(jī)器翻譯模型用于詩歌生成.當(dāng)前神經(jīng)網(wǎng)絡(luò)算法在詩歌自動(dòng)生成任務(wù)中應(yīng)用廣泛,體現(xiàn)出了明顯的優(yōu)勢(shì).現(xiàn)在大部分詩歌生成基于循環(huán)神經(jīng)網(wǎng)絡(luò)RNN (Recurrent Neural Network).Zhang 等[4]最早將單一的循環(huán)網(wǎng)絡(luò)RNN 應(yīng)用到絕句詩的生成當(dāng)中,Zhang 等在詞嵌入的基礎(chǔ)上使用語句卷積模型提取上下文特征向量,捕捉詩歌的上下文信息,然后使用RNN 依據(jù)上下文向量和之前生成的詩句得出下一句詩.但是早期的RNN和他們使用的卷積模型較為簡(jiǎn)單,為了提升語言的連貫性他們還引入了額外的SML (Statistical Machine Learning)特征和N-gram 語言模型.隨后Yan 等[11]等提出基于RNN 的編碼解碼模型ipoet,采用循環(huán)迭代的方式使模型每一次的輸出作為下一次的輸入,模仿詩人創(chuàng)作反復(fù)打磨的過程.Wang 等[12]采用Planning Model 對(duì)詩歌的主題進(jìn)行分割,詩歌的每一行對(duì)應(yīng)一個(gè)子主題,然后詩句在子主題的指引下由編碼解碼網(wǎng)絡(luò)自動(dòng)生成,作者還調(diào)整了編碼網(wǎng)絡(luò)的結(jié)構(gòu)使編碼器可以編碼子主題和之前生成的詩句,以生成主題連貫的詩歌.文獻(xiàn)[13]中,作者將詩歌生成問題看成序列到序列的學(xué)習(xí)問題,使用帶注意力機(jī)制的編碼解碼模型學(xué)習(xí)字符間的聯(lián)系和輸入輸出詩句間的相關(guān)性,并采用了詞生成句,句生成句,段落生成句3 種獨(dú)立的詩歌生成方式.文獻(xiàn)[14]作者認(rèn)為神經(jīng)網(wǎng)絡(luò)的概率本質(zhì)雖然可以學(xué)習(xí)到詩歌中出現(xiàn)頻率較高的語言模式生成語句通順的詩歌但它嚴(yán)重忽視了詩歌創(chuàng)新性的美學(xué)意義,進(jìn)而提出了記憶增強(qiáng)的神經(jīng)模型(memory-augmented neural model)結(jié)合帶注意力機(jī)制的神經(jīng)網(wǎng)絡(luò)和詩歌特征映射模型生成有一定創(chuàng)新性的詩歌.文獻(xiàn)[15]作者提出詩歌生成的動(dòng)態(tài)記憶模型分別獨(dú)立保存寫作的主題向量作為主要信息,主題向量會(huì)隨著詩句的生成進(jìn)行更新,在生成每一行詩句時(shí)模型讀取最相關(guān)的主題向量指導(dǎo)生成當(dāng)前詩句.此外作者還引用了風(fēng)格嵌入控制來生成語言風(fēng)格不同的詩歌.
上述的詩歌自動(dòng)生成模型多把重點(diǎn)放在詩歌的主題控制與文字的流暢性上,我們的模型將重點(diǎn)放在詩歌語言文字的本身上,以獲得語言的流暢性、主題的一致性和更強(qiáng)的感情色彩.
詩歌生成模型由語義模型和文字規(guī)則模型構(gòu)成,在詩歌語料庫和對(duì)聯(lián)語料庫上聯(lián)合完成訓(xùn)練.模型可以根據(jù)輸入的文字描述生成詩歌,但為方便對(duì)比不同模型生成的詩句,實(shí)驗(yàn)中采用50 條給定詩歌的首半句(以“,”分隔半句;“.”分隔一句)作為輸入.
詩歌生成方法如圖1所示,給定半句詩歌S11作為輸入,由文字規(guī)則模型WM (Word Model)生成半句詩S12.S11,S12為模型生成詩歌的第一句.然后將S11,S12輸入語義模型SM (Semantic Model)再生成半句詩S21.之后將S21作為下一句詩的給定輸入,生成S22.完整的詩歌有兩句組成“S11,S12,S21,S22”.
圖1 模型方法圖
在生成一句詩歌的過程中,語義模型SM 在給定詩句(上文)C后,輸出下文m個(gè)漢字W,記W={w1,w2,···,wm},形式化的表示為:
文字規(guī)則模型WM 根據(jù)給定的漢字W,計(jì)算生成下文m個(gè)字的概率,記S={wm+1,wm+2,···,wm+3}為這m個(gè)字的特定排列,形式化表達(dá)為:
模型整體可以看作在給定條件下,計(jì)算生成詩句S的概率,如式(3).給定的條件為:寫作描述C和模型生成的前m個(gè)字.
詩歌生成的問題轉(zhuǎn)換為最大化這個(gè)條件概率的問題.
2.1.1 詩歌數(shù)據(jù)處理
首先對(duì)包含30 000 首五言詩的數(shù)據(jù)集進(jìn)行字頻統(tǒng)計(jì),統(tǒng)計(jì)每一個(gè)使用到的漢字出現(xiàn)的次數(shù).考慮到古漢語和現(xiàn)代漢語的不同,為生成更通俗易懂的詩句,我們過濾掉頻次少于15 字和所有包含這些字的詩歌,保留18 000 首詩歌和2379 個(gè)漢字用于模型訓(xùn)練.然后建立字典,將保留的每一個(gè)漢字映射到一個(gè)整數(shù).最后構(gòu)建訓(xùn)練數(shù)據(jù)集T={(x1,y1),(x2,y2),···,(xN,yN)},其中xi∈R12,(1≤i≤N)表示每一首詩每一句的整數(shù)映射向量,yi∈R6,(1≤i≤N)表 示對(duì)應(yīng)于xi所表示詩句之后的半句詩歌的整數(shù)映射向量.例如,處理“白日依山盡,黃河入海流.“查詢每一個(gè)字對(duì)應(yīng)的整數(shù)索引,編碼詩句為[12,24,43,1785,456,1,45,79,55,28,56,2],則相應(yīng)的xi=[12,24,43,1785,456,1,45,79,55,28,56,2]T,yi=[45,79,55,28,56,2]T,N表示訓(xùn)練數(shù)據(jù)集的總樣本數(shù).
2.1.2 模型結(jié)構(gòu)
使用Tensorflow1.13.0 中的Keras API 搭建神經(jīng)網(wǎng)絡(luò)模型.模型的輸入x∈R12為12 維的列向量,經(jīng)過兩次步長(zhǎng)為1,卷積核為(3,·)的一維卷積網(wǎng)絡(luò)處理后將輸入向量x轉(zhuǎn)化為特征張量T∈R8×128用于表征詩句的語義信息.每次一維卷積的數(shù)學(xué)描述為:
其中,σ (·)表 示非線性函數(shù),TiC,j表示卷積特征矩陣TC的第i行,第j列元素;Til∈R1×N表示輸入張量第i行的N個(gè)元素;∈R1×N表示第j個(gè)卷積核第k行的N個(gè)元素,這里f∈RK×N.
將卷積后的特征張量Tc輸入雙向LSTM(Long Short-Time Memory)模型[16]記憶學(xué)習(xí)詩歌抽象語義特征.LSTM 的數(shù)學(xué)描述[17]可表達(dá)為:
其中,σ (·)表 示非線性函數(shù),符號(hào)? 表示向量對(duì)應(yīng)元素間的乘法,ht表示輸出向量,ct表示記憶向量xt表示輸入向量,w表示權(quán)重矩陣,b表示偏置向量.
雙向LSTM 將數(shù)據(jù)按時(shí)間步的順序過程和倒序過程分別輸入到兩個(gè)LSTM 模型中,最后將兩個(gè)模型的輸出向量ht拼接在一起.
LSTM 網(wǎng)絡(luò)后連接兩層全連接層,用于預(yù)測(cè)模型的輸出∈R1×m,語言記憶網(wǎng)絡(luò)的損失函數(shù)為均方誤差函數(shù):
2.2.1 對(duì)聯(lián)數(shù)據(jù)處理
針對(duì)對(duì)聯(lián)數(shù)據(jù)集構(gòu)建字典,將數(shù)據(jù)集中的每一個(gè)字映射到一個(gè)特定的整數(shù),構(gòu)建訓(xùn)練數(shù)據(jù)集T={(x1,y1,t1),(x2,y2,t2),···,(xN,yN,tN)} 其 中xi(1≤i≤N)表示每一首對(duì)聯(lián)上聯(lián)漢字的整數(shù)映射向量,yi(1≤i≤N)表示每一首對(duì)聯(lián)下聯(lián)漢字的整數(shù)映射向量,ti(1≤i≤N)由yi的字符串開頭加入一個(gè)特定標(biāo)記字符形成,N表示訓(xùn)練數(shù)據(jù)集的總樣本數(shù).
2.2.2 模型結(jié)構(gòu)
模型先使用詞嵌入層將輸入的文字序列映射到高維的向量空間中,拓展文字序列向量的表征能力.
將對(duì)聯(lián)字典中漢字對(duì)應(yīng)的整數(shù)編碼wi使用Word2Vector 方法嵌入到E維的向量空間中.令V表示詞典的大小,L∈RE×|V|表示字符的詞向量矩陣,它的列對(duì)應(yīng)著字符嵌入的空間維度.e(wk)∈R|V|,ei=0,i≠k,ek=1,ei表示e(wk)中的各元素.即e(wk)代表第k個(gè)字符的獨(dú)熱向量表示,則輸入m個(gè)字符的序列w1,w2,···,wm經(jīng)過詞嵌入后可以表示為:
其中,Te表 示m個(gè)字符的嵌入張量,(Te)T∈RE×m,Te∈Rm×E.
對(duì)輸入的詞嵌入張量,模型采用帶注意力機(jī)制的序列到序列結(jié)構(gòu),由編碼器(ENLSTM)對(duì)輸入張量編碼提取特征向量后由解碼器(DELSTM)結(jié)合注意力機(jī)制預(yù)測(cè)輸出張量.其運(yùn)算過程可以描述為[18]:
編碼器接受上聯(lián)輸入的詞嵌入張量xt和上一時(shí)間步編碼器(ENLSTM)的隱藏層輸出ht?1,計(jì)算當(dāng)前時(shí)間點(diǎn)的隱藏層輸出ht.如式(13):
解碼器接受下聯(lián)輸入的詞嵌入張量yt和上一時(shí)間步解碼器(DELSTM)的隱藏層輸出st?1,計(jì)算當(dāng)前時(shí)間點(diǎn)的隱藏層輸出st,如式(14):
由編碼器和解碼器的隱藏層輸出ht、st計(jì)算一個(gè)權(quán)重分?jǐn)?shù)和編碼器每一個(gè)時(shí)間步隱藏層輸出的權(quán)重,如式(15)、式(16):
由編碼器每一個(gè)時(shí)間步隱藏層輸出的加權(quán)平均生成上下文向量ci.
將上下文向量ct與解碼器隱藏層的輸出st拼接起來計(jì)算模型輸出的概率:
模型的目標(biāo)函數(shù)為交叉熵?fù)p失函數(shù):
其中,T為訓(xùn)練數(shù)據(jù)集.
模型在30 000 首五言詩歌數(shù)據(jù)集和50 000 首對(duì)聯(lián)數(shù)據(jù)集上進(jìn)行訓(xùn)練.我們使用3 個(gè)模型進(jìn)行詩歌生成的比較,一是類似Yan 等[11]的LSTM 模型;二是類似Wang 等[19]的注意力模型,三是我們的詩歌生成模型.3 個(gè)模型分別在相同測(cè)試集上生成50 首詩歌,用于測(cè)評(píng).
參考文獻(xiàn)[2]我們使用BLEU[20]作為詩歌生成模型的評(píng)估方法.這種方法在評(píng)估時(shí)需要給出參考文本,對(duì)于如何獲取參考文本,He 等[8]的思想是如果兩句詩有相同的主題,那這兩句詩的后兩句詩可以相互參考.我們模型的詩歌生成基于給定詩歌第一句的前半句,所以自然地我們選擇給定詩句的全詩作為BLEU 評(píng)分的參考文本.
因?yàn)樵姼柽@種特殊形式的文本其美學(xué)價(jià)值和給人的情感體驗(yàn)有較強(qiáng)的主觀性,所以我們也設(shè)計(jì)了人工評(píng)判環(huán)節(jié),為使評(píng)判有較強(qiáng)的客觀性,選擇4 條評(píng)判標(biāo)準(zhǔn):1)對(duì)仗,模型生成詩歌句間的詞語是不是相互對(duì)仗;2)韻律,模型生成的詩歌是不是按五言律詩的規(guī)則平仄相對(duì);3)意象,詩歌意象是詩歌情感意義的主要載體,這里考察詩歌中是否包含常見的文學(xué)意象,如春風(fēng)、秋月、舊竹、寒梅等;4)連貫性,詩歌整體上下句表達(dá)的情感是否流暢或一致.每條標(biāo)準(zhǔn)按1~5 分評(píng)分.
使用二元BLEU 對(duì)上述3 個(gè)模型生成詩句評(píng)分,每個(gè)模型根據(jù)給定的50 條輸入生成50 首詩歌,50 首詩歌的平均BLEU 得分如表1所示.
表1 模型BLEU
每個(gè)模型BLEU 得分前5 的詩句分別由表2,表3,表4所示.
表2 雙層LSTM 模型
表3 注意力模型
表4 本文模型
由實(shí)驗(yàn)結(jié)果可以發(fā)現(xiàn)雖然雙層LSTM 模型可以提取詩歌基本的結(jié)構(gòu)特征,但它生成的詩歌在BLEU 評(píng)分中明顯不如注意力模型和本文模型,而且主題不明顯.這里需要指出的是,雙層LSTM 模型只在五言詩歌的數(shù)據(jù)集上進(jìn)行訓(xùn)練,而后兩個(gè)模型在詩歌數(shù)據(jù)集和對(duì)聯(lián)數(shù)據(jù)集上聯(lián)合訓(xùn)練,這種對(duì)比可能對(duì)雙層LSTM模型有些不公平,但是在盡我們努力所翻閱的文獻(xiàn)中,前人的詩歌生成工作只利用了詩歌數(shù)據(jù)集,而沒有加入對(duì)聯(lián)數(shù)據(jù)集來加強(qiáng)學(xué)習(xí)詩歌文字間的對(duì)仗關(guān)系,所以這里對(duì)于基線模型雙層LSTM,我們只使用了詩歌數(shù)據(jù)集對(duì)其進(jìn)行訓(xùn)練.
BLEU 評(píng)分考察更多的是文字之間的相關(guān)性,有較高得分的詩句不一定有詩歌的美感,明顯的主題和鮮明的情感色彩,所以我們根據(jù)上文提到的詩歌評(píng)分標(biāo)準(zhǔn),邀請(qǐng)8 位來自文學(xué)專業(yè)的同學(xué)對(duì)每個(gè)模型生成的50 首詩歌打分.每個(gè)模型生成詩歌平均得分情況如表5所示.
表5 人工評(píng)估得分
在詩歌和對(duì)聯(lián)數(shù)據(jù)集上訓(xùn)練的注意力模型和本文的模型可以較好的表現(xiàn)詩歌的對(duì)仗和韻律,一方面是因?yàn)樽⒁饬C(jī)制可以更好的關(guān)注詩歌對(duì)應(yīng)位置的字符關(guān)系,另一方面是因?yàn)閷?duì)聯(lián)本身有較強(qiáng)的韻律,字詞之間也有明顯的對(duì)應(yīng)關(guān)系.如注意力模型生成的詩句“大漠孤煙直,長(zhǎng)城滿水流.秋景復(fù)秋風(fēng),春風(fēng)復(fù)夜闌.”,“大漠”對(duì)“長(zhǎng)城”,“孤煙直”對(duì)“滿水流”,“秋景”對(duì)“春風(fēng)”,“秋風(fēng)”對(duì)“夜闌”,明顯的對(duì)仗關(guān)系和相似的意象組合可以較好地表現(xiàn)出詩歌的美感和韻律.又如“飲馬渡秋水,幽林出晚風(fēng).秋景濕人衣,春風(fēng)入畫屏.”、“海上生明月,江中出晚風(fēng).江水向秋波,山陰復(fù)夜色”,但注意力模型的缺點(diǎn)是一方面很多相似的意象組合限制了詩歌主題的豐富性,如秋景和春風(fēng),秋波和夜色,明月和晚風(fēng)常常相對(duì);一方面不相似的意象組合也使詩歌主題損失了整體性,如上句“大漠長(zhǎng)城”,下句“秋景春風(fēng)”.意境的破壞同時(shí)也弱化了詩歌的情感表達(dá).
本文模型使用一維卷積神經(jīng)網(wǎng)絡(luò)將上句詩歌的12 個(gè)字符依次輸入到網(wǎng)絡(luò)中預(yù)測(cè)下文的輸出,將文字生成看成特殊的時(shí)間序列預(yù)測(cè)問題.我們相信一維卷積網(wǎng)絡(luò)的卷積核可以像詞嵌入網(wǎng)絡(luò)一樣提取語言的語義結(jié)構(gòu)并結(jié)合LSTM 模型構(gòu)成具有一定語言記憶功能的模型.如在生成的詩歌“樹樹皆秋色,花花亦未央.離惜堤竹舊,春風(fēng)草未長(zhǎng).”中,上句“未央”與下句“離惜”相呼應(yīng)使詩歌主題更一致,更有美感,同時(shí)也使詩歌有了更鮮明的情感色彩又如:“遲日江山麗,秋風(fēng)草樹閑.聽晴司可喜,看子向陵闌.”上句“日”與下句“晴”相呼應(yīng);“浮云游子意,清月入人心.初晴彌可喜,更與故人心.”上句“清月”與下句“初晴”相呼應(yīng),上句“游子意”與下句“故人心”相呼應(yīng)通過實(shí)驗(yàn)的對(duì)比分析,我們發(fā)現(xiàn)在詩歌和對(duì)聯(lián)數(shù)據(jù)集上聯(lián)合訓(xùn)練的模型可以較好地提升生成詩歌對(duì)仗和韻律的效果,同時(shí)也具有更強(qiáng)的語言表現(xiàn)力和詩歌的美感.我們的詩歌生成模型在提高詩歌生成的對(duì)仗和韻律效果的同時(shí)也改善了主題生成的一致性.一致的主題,流暢的語言和對(duì)仗的意象使模型生成的詩歌更具有更強(qiáng)得感情色彩.
我們的語義模型創(chuàng)新性地提出使用一維卷積網(wǎng)絡(luò)和長(zhǎng)短時(shí)記憶網(wǎng)絡(luò)(LSTM)提取詩句的語義信息,增強(qiáng)詩句之間主題的一致性和情感的相關(guān)性.文字規(guī)則模型為帶注意力機(jī)制的編碼解碼模型,用于學(xué)習(xí)詩歌文字的韻律和字詞的對(duì)仗關(guān)系.模型在詩歌和對(duì)聯(lián)數(shù)據(jù)集上聯(lián)合訓(xùn)練.實(shí)驗(yàn)結(jié)果表明我們的模型取得了預(yù)期的效果,可以較好地呈現(xiàn)出詩歌的語言特征和情感色彩,使機(jī)器生成的詩歌有類似詩人即興賦詩的美感和表現(xiàn)力.