梁健楠,孫茂松,矣曉沅,楊 成,陳慧敏,劉正皓
(1. 清華大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)系,北京,100084; 2. 清華大學(xué) 人工智能研究院,北京,100084 3. 清華大學(xué) 智能技術(shù)與系統(tǒng)國家重點(diǎn)實(shí)驗(yàn)室,北京,100084)
隨著中華文化的復(fù)興,越來越多的人開始關(guān)注、學(xué)習(xí)中國古典文化。而古詩詞作為中國優(yōu)秀古典文化的結(jié)晶,在數(shù)千年的歷史長河中對中華民族的發(fā)展有著深遠(yuǎn)影響。
近年來,中國古典詩歌自動(dòng)生成的研究逐漸成為熱點(diǎn),吸引了國內(nèi)外越來越多研究者的注意。研究者們對中國古典絕句[1-2]和宋詞[3-4]的自動(dòng)生成任務(wù)提出了很多不同的模型和方法。這些研究大都集中在絕句和宋詞的自動(dòng)生成。本文著重關(guān)注一種特殊的中國古典詩歌形式——集句詩。集句詩作為一種別出機(jī)杼的詩歌再創(chuàng)造方式,是對不同時(shí)期、不同詩人創(chuàng)作的不同詩篇中已有句子進(jìn)行選取,并重新組合形成的新詩。詩句雖然是前人所寫且各有其出處,但過渡流暢,具備完整的內(nèi)容和新穎的主旨意境,渾然天成且無強(qiáng)拼硬湊之感。圖1給出了一首明代著名文學(xué)家湯顯祖所作的集句詩示例。
圖1 湯顯祖《牡丹亭》中所作七言集句詩
集句詩的歷史可以上溯到西晉,而興盛于宋代。集句創(chuàng)作需要?jiǎng)?chuàng)作者博聞強(qiáng)識(shí),有大量的詩歌儲(chǔ)備作為再創(chuàng)作素材。同時(shí)要求創(chuàng)作者有很強(qiáng)的詩詞理解和鑒賞能力,只有充分理解前人不同作品中每一詩句表達(dá)的內(nèi)容與意境,才能在對詩句進(jìn)行有機(jī)的重新組合的同時(shí)而不破壞集成的整首詩的連貫完整性。在中國古代眾多詩人中,只有王安石、蘇軾、辛棄疾等詩文大家才有能力創(chuàng)作出高質(zhì)量的集句詩。
隨著硬件技術(shù)的發(fā)展,現(xiàn)代計(jì)算機(jī)具備了海量存儲(chǔ)和快速檢索能力,計(jì)算機(jī)能夠“記憶”的詩作數(shù)量遠(yuǎn)遠(yuǎn)高于人類。近年來神經(jīng)網(wǎng)絡(luò),尤其是基于循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)的模型得到了極大的發(fā)展,且在圖像識(shí)別、語音識(shí)別、機(jī)器翻譯等任務(wù)上取得了顯著突破。RNN能夠自動(dòng)從大規(guī)模語料庫中,學(xué)習(xí)到質(zhì)量較高的句子語義表示。前人的工作已經(jīng)表明,RNN能夠用于英文詩歌[5-6]和中國古典詩歌[2,4,7]的自動(dòng)生成,且能取得不錯(cuò)的效果。
本文提出了一種新穎的結(jié)合計(jì)算機(jī)索引能力和神經(jīng)網(wǎng)絡(luò)語義表示能力的自動(dòng)集句詩生成模型。模型采取逐句生成的方式,根據(jù)用戶輸入的一句首句,依次選取古詩庫中上下文語義、意境關(guān)聯(lián)性最強(qiáng)的詩句作為當(dāng)前生成句,并將生成句作為輸入詩句。以此類推,逐步生成一首完整的集句詩。首先,我們設(shè)計(jì)了一套格律和韻腳檢測方法,剔除詩庫中不符合格律押韻要求的詩句,從而減小模型的搜索空間。然后,基于整個(gè)古詩庫,根據(jù)上下文的大小不同,我們訓(xùn)練了兩個(gè)帶Attention機(jī)制的Neural Sequence-to-Sequence[8]模型,用以生成詩句的向量表示,通過句向量來衡量集句質(zhì)量最重要的標(biāo)準(zhǔn)是整首詩的上下文連貫性和關(guān)聯(lián)性。基于此,我們設(shè)計(jì)了三種不同的方法來計(jì)算一句詩句和已生成的上文多個(gè)詩句之間的關(guān)聯(lián)性,用于當(dāng)前候選詩句的選取。我們采用信息檢索中常用的MRR(Mean Reciprocal Rank)指標(biāo)用于評(píng)價(jià)集句詩生成模型。實(shí)驗(yàn)結(jié)果表明,我們的模型相對基于統(tǒng)計(jì)互信息的自動(dòng)集句生成模型有較大提升。
綜上,本文的貢獻(xiàn)如下:
(1) 我們首先提出集句詩的自動(dòng)生成任務(wù),并設(shè)計(jì)了相應(yīng)的自動(dòng)評(píng)價(jià)指標(biāo);
(2) 我們設(shè)計(jì)了一種基于Sequence-to-Sequence神經(jīng)網(wǎng)絡(luò)的自動(dòng)生成集句詩模型。模型利用句向量自動(dòng)學(xué)習(xí)詩句語義,測量語義相似性;
(3) 自動(dòng)評(píng)測和人工評(píng)測結(jié)果都表明,給定一句用戶輸入的首句,我們的模型能生成質(zhì)量較高的集句詩。相對于基于統(tǒng)計(jì)互信息的自動(dòng)集句詩生成模型有很大提升。
詩歌生成是研究計(jì)算機(jī)自動(dòng)分析、理解和使用人類語言的一個(gè)重要切入點(diǎn)。國內(nèi)外在這一領(lǐng)域的研究已經(jīng)持續(xù)了數(shù)十年。從方法上,相關(guān)的研究工作可以分為三個(gè)階段:
早期的詩歌生成模型都是基于規(guī)則和模板。例如,ASPERA 詩歌生成系統(tǒng)[9]和日文俳句生成系統(tǒng)[10]。
第二個(gè)階段大約從上世紀(jì)90年代開始。在這一階段,統(tǒng)計(jì)機(jī)器學(xué)習(xí)方法陸續(xù)被用到詩歌生成上。Levy[11]和Manurung[12]先后探索利用遺傳算法來進(jìn)行詩歌生成。與此同時(shí),一些研究者也開始利用其他類型的文本生成模型。Yan 等人提出利用自動(dòng)文本摘要的方式進(jìn)行詩歌生成,將詩歌的生成過程看作是從整個(gè)古詩庫進(jìn)行摘要的過程[13]。另一個(gè),在詩歌生成任務(wù)上提升顯著的模型是統(tǒng)計(jì)機(jī)器翻譯(Statistical Machine Translation,SMT)模型。Jiang 和 Zhou 首先將SMT模型用于中文對聯(lián)的生成[14],取得了良好的效果。隨后,He進(jìn)一步將此模型應(yīng)用于中文絕句的生成[14]。
隨著人工神經(jīng)網(wǎng)絡(luò)的發(fā)展,這一領(lǐng)域邁進(jìn)了第三個(gè)階段——基于神經(jīng)網(wǎng)絡(luò)的詩歌生成。大部分研究者都采用RNN或者其變體進(jìn)行詩歌生成。Zhang 和 Lapata 最早將RNN應(yīng)用到了中文絕句生成任務(wù)上[2]。他們使用一個(gè)卷積語句模型將生成的每句詩向量化然后壓縮到一個(gè)上下文向量中,用以捕捉詩歌的上下文信息。但是,他們的模型較為簡單。為了提升詩歌的連貫性和通順性,他們的模型還需要和兩個(gè)額外的SMT特征以及一個(gè)基于n-gram的語言模型相結(jié)合。隨后,Yan 提出了polish模型[15],使用RNN進(jìn)行絕句的生成。不同之處在于,Yan的模型會(huì)對一首詩進(jìn)行多次生成。每次生成時(shí),會(huì)考慮上一次生成的詩歌,以模擬人類在創(chuàng)作詩歌時(shí),不斷修改潤色的過程,從而提升詩歌的質(zhì)量。Yi 等人第一次提出用結(jié)合了注意力機(jī)制的Sequence-to-Sequence模型[7]來進(jìn)行詩歌生成[8]。他們針對絕句中不同的位置訓(xùn)練了不同的模型,以此來提升詩歌的上下文關(guān)聯(lián)性。隨后,在絕句生成任務(wù)上,Wang等人提出了Planning模型[16],該模型預(yù)先規(guī)劃一首絕句里四個(gè)句子每一句對應(yīng)的關(guān)鍵詞,然后用對應(yīng)的模型生成每一句。以往的模型生成的詩歌大多缺乏新穎性,故Zhang等人提出了利用記憶網(wǎng)絡(luò)來進(jìn)行詩歌生成[17]。為了提升生成詩歌的新穎性,他們將數(shù)百首古人創(chuàng)作的詩歌存入一個(gè)外部的Memory,以提供更豐富的外部知識(shí)來引導(dǎo)模型生成。同時(shí),通過控制Memory中存儲(chǔ)的詩歌風(fēng)格,他們的模型也能實(shí)現(xiàn)對生成的詩歌風(fēng)格的簡單控制。Yi 等人同樣提出利用Memory模型[18]。他們使用三個(gè)不同的Memory來模擬人類進(jìn)行詩歌創(chuàng)作時(shí)的寫作和記憶習(xí)慣。同時(shí),他們提出了一種體裁向量,能夠?qū)⒃姼璧母衤珊徒Y(jié)構(gòu)信息與詩歌內(nèi)容在一定程度上分離。從而,使一個(gè)訓(xùn)練好的模型能生成不同體裁的詩歌。如絕句、宋詞、現(xiàn)代詩等等。神經(jīng)信息檢索也為我們提供了另外的思路用以詩句相關(guān)程度的評(píng)判[19]。
上述模型的詩歌生成都集中在絕句和宋詞這兩種體裁上。這些模型由于要同時(shí)考慮詩歌的通順性、上下文關(guān)聯(lián)性、語義豐富性等等,難以做到兼顧所有方面,往往會(huì)顧此失彼。在這篇論文中,我們提出了一種全新的詩歌生成任務(wù)——集句詩自動(dòng)生成。由于詩句是詩庫中古人創(chuàng)作的現(xiàn)有句子,這些句子本身有較好的通順性和語義豐富度。因此,集句詩自動(dòng)生成模型可以忽略這些方面,而專注于把握不同語句之間的上下文語義、主題、內(nèi)容的連貫性和一致性,這也是對詩歌這種的文學(xué)性文本最為關(guān)鍵的評(píng)價(jià)指標(biāo)之一。
我們首先將集句詩自動(dòng)生成的任務(wù)形式化描述如圖2所示。
圖2 模型結(jié)構(gòu)圖注: “+”為句子相加,即兩個(gè)句子首尾相連拼接起來。
我們定義一個(gè)評(píng)分函數(shù)R(L1:i-1,Sn),用以計(jì)算詩庫中的每一候選句和上文的連貫性得分。則集句詩的第i句選取為:
(1)
從上述過程可以看出,平仄和韻腳可以通過規(guī)則限制進(jìn)行篩選,一首集句詩的好壞取決于式(1)中定義的評(píng)分函數(shù)的效果。我們希望找到合適的評(píng)分函數(shù),使得生成的集句效果最佳。
以下將介紹本文設(shè)計(jì)的三種評(píng)分函數(shù)。
不同于其他體裁(如絕句、宋詞等)的生成,集句詩生成要求選取與上文連貫的古人詩句,而非依靠模型生成全新的詩句。前人的工作表明,帶注意力機(jī)制的序列到序列模型(Sequence-to-Sequence with attention mechanism)[8]生成的詩句有不錯(cuò)的上下文關(guān)聯(lián)性[7,16]。因此,我們的第一種評(píng)分函數(shù)的思路是,第一步使用神經(jīng)網(wǎng)絡(luò)生成模型根據(jù)上文生成一句全新的當(dāng)前詩句。第二步使用特定的方法從詩庫中檢索一句與該生成句語義最相似的古人詩句。
具體地,我們使用基于雙向長短時(shí)記憶(Long Short-Term Memory,LSTM)[20-21],帶Attention的編碼-解碼器(Encoder-Decoder)。定義X為輸入到Encoder的序列,X=x1x2…xTx;Y為Decoder端生成的序列,Y=y1y2…yTy。其中,Tx和Ty分別為Encoder和Decoder端的序列長度。給定L1:i-1,則Decoder端生成的詩句Gi計(jì)算如式(3)~式(5)所示。
其中,st和ht分別為第t個(gè)時(shí)間步的Encoder和Decoder端的隱狀態(tài)向量,e(yt-1)為對應(yīng)的word embedding,f為線性變換層。ct為Attention機(jī)制中的attention向量,具體計(jì)算參考文獻(xiàn)[8]。
值得關(guān)注的是,式(2)中,我們把L1:i-1拼接為一個(gè)長序列輸入到Encoder中。參照文獻(xiàn)[7]中的方法,當(dāng)上文包含不同數(shù)目的詩句時(shí),我們分別訓(xùn)練不同的生成模型來進(jìn)行生成。通常,我們使用1句生成1句來產(chǎn)生詩歌的第二句,2句生成1句來生成集句的詩歌的其他句子。
得到Sequence-to-Sequence模型生成的句子Gi之后,我們使用兩種方法來度量詩庫中的古人詩句Sn和Gi的語義相似性。
基于最大公共子序列(LongestCommonSubsequence,LCS)的相似性度量。第一種方法,我們假設(shè)兩個(gè)句子之間匹配的子序列越大,兩個(gè)句子的語義相似性就越高。即:
R(L1:i-1,Sn)=LCS(Gi,Sn)
(6)
在這里,我們考慮了實(shí)字和虛字對語義貢獻(xiàn)度的不同。在匹配過程中,虛字匹配給予比實(shí)字低的分?jǐn)?shù)。
R(L1:i-1,Sn)=cos(v(Gi),v(Sn))
(7)
2.2節(jié)中的方法采取了先生成新詩句Gi,然后再和古人詩句匹配的方式。在實(shí)際中,式(5)的概率最大值很難取到,因無法遍歷整個(gè)搜索空間。通常采用greedy search或者beam search進(jìn)行搜索,但這無法保證生成的詩句Gi是在給定上下文的情況下最優(yōu)的。因此,我們可以利用Sequence-to-Sequence模型直接對古人詩句和上文詩句的關(guān)聯(lián)性進(jìn)行建模。具體如式(8)所示。
(8)
其中,Tn為Sn的長度,ct為Sn中的每個(gè)字。
式(8)中,我們實(shí)際度量的是,給定上文L1:i-1,神經(jīng)網(wǎng)絡(luò)模型生成某句古人詩句Sn的概率。對訓(xùn)練充分的Sequence-to-Sequence模型,我們在一定程度上可以認(rèn)為,有更大概率生成的句子,其與上文的語義關(guān)聯(lián)就更緊密。
在實(shí)際實(shí)驗(yàn)中,即使預(yù)先根據(jù)格律對詩庫進(jìn)行篩選,初步得到的候選句的規(guī)模N非常大,通常在數(shù)萬的量級(jí)。使用式(8)計(jì)算時(shí),由于LSTM隱狀態(tài)的計(jì)算以及Softmax等操作耗時(shí)極大,在實(shí)際應(yīng)用中難以接受。基于生成結(jié)果的語義相似性評(píng)分的方法計(jì)算速度較快,LCS和句向量的余弦值的計(jì)算耗時(shí)較少,但是上下文關(guān)聯(lián)性上表現(xiàn)欠佳。
圖3 多方法結(jié)合評(píng)分結(jié)構(gòu)圖
因此,我們結(jié)合2.2和2.3的兩種方法,先使用生成結(jié)果的語義相似性評(píng)分作為初步篩選,從古詩庫中篩選出評(píng)分較高的候選子集。在候選子集中,再使用基于上下文生成概率的評(píng)分函數(shù)進(jìn)行重排序,然后選取得分最高的一句。在第3節(jié)我們的實(shí)驗(yàn)結(jié)果表明,這種結(jié)合能取得生成速度和生成效果二者很好的平衡。
在集句詩自動(dòng)生成中,對古詩庫詩句的格律和韻腳識(shí)別是非常重要的一部分工作,識(shí)別錯(cuò)誤將導(dǎo)致集句效果大打折扣。難點(diǎn)在于一句詩句格律不明顯和一字多韻的情況。
格律的識(shí)別是以整首詩的格律來確定詩中某一句的格律,這樣可以一定程度上容錯(cuò),但不影響集句效果。對于一字多韻的情況,同樣根據(jù)一整首詩的整體確定一句話的韻腳。此外,我們做了單句的韻腳識(shí)別器,使用句尾詞統(tǒng)計(jì)方法來確定一句詩的韻腳——考慮句尾兩個(gè)字或三個(gè)字的情況下,在古詩庫中的出現(xiàn)次數(shù),選取出現(xiàn)次數(shù)較多的韻作為韻腳。
本次實(shí)驗(yàn)數(shù)據(jù)收集了唐代到近現(xiàn)代的五言和七言詩,共389 857首詩,2 537 168句詩句。
從中隨機(jī)選擇5 000首詩歌作為驗(yàn)證集,五言和七言各占2 500首。除去測試集(測試集構(gòu)造在3.2.2中詳述)和驗(yàn)證集,其余詩歌作為訓(xùn)練集,用于訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型。
本文的實(shí)驗(yàn)代碼使用python和tensorflow1.4實(shí)現(xiàn)。在帶Attention的Sequence to Sequence模型網(wǎng)絡(luò)中,hidden size為512,word embedding size為256,激活函數(shù)為tanh。采用的優(yōu)化算法是Adam,初始學(xué)習(xí)率為0.001,訓(xùn)練過程中使用的batch size為64。當(dāng)模型在驗(yàn)證集上的損失函數(shù)收斂時(shí)停止訓(xùn)練。在我們的數(shù)據(jù)集上,約訓(xùn)練10個(gè)epoch左右能收斂。
3.2.1 評(píng)分函數(shù)的相關(guān)性分析
本文在生成句選取最佳匹配句的時(shí)候,使用了基于LCS和基于句向量的兩種評(píng)分函數(shù),以下將對兩種評(píng)分函數(shù)的結(jié)果求Spearman相關(guān)系數(shù)。
這里選取了20個(gè)生成句,對生成句取基于LCS評(píng)分函數(shù)排序后的Top100候選句和基于句向量評(píng)分函數(shù)的Top100候選句,取這200句候選句并集求Spearman相關(guān)系數(shù)。實(shí)驗(yàn)得Spearman相關(guān)系數(shù)為-0.104。由此可見,使用基于LCS數(shù)和基于句向量評(píng)分函數(shù)的結(jié)果相關(guān)性并不大。
3.2.2 MRR評(píng)測
MRR(Mean Reciprocal Rank),即把標(biāo)準(zhǔn)答案在被評(píng)價(jià)系統(tǒng)給出結(jié)果中的名次取倒數(shù)后作為該答案的準(zhǔn)確度,對所有標(biāo)準(zhǔn)答案的準(zhǔn)確度取均值,以此來衡量評(píng)價(jià)系統(tǒng)的準(zhǔn)確度。如式(9)所示。
(9)
將在古人創(chuàng)作的絕句中,我們分別選用第一句、第一和第二句、第一至三句作為輸入, 第二、第三和第四句作為對應(yīng)的標(biāo)準(zhǔn)答案。另外,以三種不同的篩選方法分別在數(shù)據(jù)集中選擇999句同言數(shù)的詩句,給每個(gè)標(biāo)準(zhǔn)答案匹配對應(yīng)的三組非標(biāo)準(zhǔn)答案集合。然后,通過計(jì)算標(biāo)準(zhǔn)答案在1 000句詩句中的準(zhǔn)確度來評(píng)價(jià)不同的評(píng)分函數(shù)的效果。
所使用的三種篩選非標(biāo)準(zhǔn)答案的方法分別為:
1. 在數(shù)據(jù)集中隨機(jī)選取同言數(shù)的詩句,記為測試集1;
2. 在數(shù)據(jù)集中隨機(jī)選取句同言數(shù)、同格律、同韻腳(若押韻)的詩句,記為測試集2;
3. 在數(shù)據(jù)集中隨機(jī)選取同言數(shù)、同格律、同韻律、與標(biāo)準(zhǔn)答案匹配兩個(gè)字以上的詩句,記為測試集3。
在基于句向量的評(píng)分函數(shù)中,我們設(shè)計(jì)了基于1句生成1句的Sequence-to-Sequence模型和基于2句生成1句的Sequence-to-Sequence模型生成,分別用這兩個(gè)模型的Encoder生成詩句向量?;?句生成1句的Sequence-to-Sequence模型是以古詩庫中連續(xù)的兩句詩句分為作為輸入和目標(biāo)訓(xùn)練得到的模型?;?句生成1句的Sequence-to-Sequence模型是以古詩庫中連續(xù)的兩句作為輸入,緊接的第三句作為目標(biāo)訓(xùn)練得到的模型。下面我們對以上兩個(gè)模型使用測試集1進(jìn)行MRR評(píng)測。原則上,2生1模型需要輸入2句得到句向量,這里我們使用向2生1模型Encoder端輸入一句話和同一句話輸入兩次的方法,求得兩種不同的句向量。
從表1中可以看出,使用1生1模型的Encoder得到句向量和2生1模型(重復(fù)輸入)的Encoder得到句向量能有比較好的MRR值。
我們對基于句向量的集句模型和基于生成概率的集句模型進(jìn)行MMR評(píng)測。此外,我們引入了基于互信息的集句模型作為基線。對于上文L和候選句Sn,計(jì)算它們之間的互信息作為排序的依據(jù)?;バ畔⒌挠?jì)算公式如式(10)所示。
(10)
其中,l和s分別為上文以及候選句中的單字,p(l,s)為古詩庫中l(wèi),s同時(shí)出現(xiàn)在同一首詩的概率,p(l)為古詩庫中l(wèi)出現(xiàn)的概率。
由于基于LCS的集句模型的評(píng)分函數(shù)是非連續(xù)的,計(jì)算時(shí)無法得到一個(gè)準(zhǔn)確的名次,故在本實(shí)驗(yàn)中并沒有討論。
表格1 基于句向量的評(píng)分函數(shù) MRR評(píng)測結(jié)果
由表格2可見,基于生成概率(Prob)的集句模型計(jì)算得到的MRR值明顯高于其他模型?;谏筛怕?Prob)的集句模型和基于句向量(Vec)的集句模型在五言中的得分明顯好于在七言中的得分。而在生成第三句時(shí),我們的兩個(gè)模型MRR值明顯有降低。分析原因,是由于在絕句中,一般第三句都是起轉(zhuǎn)折的地方,因此神經(jīng)網(wǎng)絡(luò)模型學(xué)習(xí)的效果會(huì)比其他位置的句子稍差。
表格2 MRR評(píng)測結(jié)果
3.2.3 集句效率分析
為了提高集句詩的生成效率,我們對古詩庫的詩歌根據(jù)格律和韻進(jìn)行劃分建表,以便快速查找。對于LCS的計(jì)算,我們引入了倒排索引來大規(guī)??焖儆?jì)算LCS。對于句向量的計(jì)算,我們預(yù)先計(jì)算每個(gè)句子對應(yīng)的句向量并保存到內(nèi)存中以提升計(jì)算速度,但由此也帶來存儲(chǔ)空間占用大的問題。以句向量是由1 024維的32位浮點(diǎn)數(shù)組成為例,存儲(chǔ)250萬句詩句對應(yīng)的句向量存儲(chǔ)空間將達(dá)到9.6GB。
根據(jù)實(shí)驗(yàn)統(tǒng)計(jì),基于生成概率的集句模型平均集一首詩需要2 105.14秒,基于LCS的集句模型平均集一首詩需要62.83秒,基于LCS和生成概率相結(jié)合的模型平均集一首詩需要93.74秒,基于句向量的集句模型平均集一首詩需要4.91秒,基于句向量和生成概率結(jié)合的模型平均集一首詩需要5.99秒。
3.2.4 人工評(píng)測
我們收集了50首古人創(chuàng)作的集句詩。其中,五言絕句25首,七言絕句25首。對于每一首人創(chuàng)作的集句詩,我們以同樣的首句作為輸入,分別使用Jiju(LCS)、Jiju(LCS&Prob)、Jiju(Vec)、Jiju(Vec&Prob)四種集句模型進(jìn)行集句生成,得出四首機(jī)器自動(dòng)生成的集句詩。將古人創(chuàng)作的集句詩和自動(dòng)生成的詩歌放在一起,組成50組,每組包含5首集句詩(組內(nèi)順序隨機(jī)打亂)的人工測試集。
我們請了5位中國古典詩詞的專家對該人工測試集進(jìn)行打分。根據(jù)集句的上下文語義的連貫性、主題和意境是否鮮明進(jìn)行打分,每首詩最高分5分,最低分1分。每位專家獨(dú)立評(píng)分,相互之間不允許交流。同時(shí),我們要求每位專家在打分時(shí)集中在詩歌質(zhì)量上,忽略“詩歌是機(jī)器還是人類創(chuàng)作”這一因素。
由表3可見,使用聯(lián)合生成概率的集句模型平均比非聯(lián)合生成概率的集句模型得分明顯要高。而基于句向量的集句模型會(huì)比基于LCS的集句模型略好,但無顯著差距。
表格3 人工評(píng)測結(jié)果,平均評(píng)價(jià)得分
3.2.5 個(gè)例分析
我們隨機(jī)選取了一些不同模型生成的集句詩(表格4)。對生成的七言集句詩, LCS生成的結(jié)果中,上下文有明顯的矛盾。第三句“春在江山無限好”寫春景, 第四句卻寫秋色,從而造成了季節(jié)上的矛盾。這是因?yàn)長CS僅僅考慮了句子局部子序列的匹配。如第四句,生成模型生成的原句是“夜深風(fēng)雨不勝愁”,此句與上文并無矛盾之處。LCS進(jìn)行匹配時(shí),匹配了“夜深風(fēng)雨”四個(gè)字,又因僅僅考慮本句的局部,忽略了上文,所以匹配句中帶來了“秋”這一矛盾。
表格4 集句實(shí)例
對比之下,通過句向量相似度生成的集句詩整體質(zhì)量上提升明顯。第二句“不識(shí)花前人醉否”,點(diǎn)明了季節(jié)為春季。同時(shí),第三句中“東風(fēng)”緊扣“春”,“零落”也很好地承接了前一句的“花前”。第四句“擬于何處說來由”在語義上收束前三句,寫出了詩人心中愁苦,于春花前借酒澆愁,但是這份苦痛卻不知應(yīng)該從何道起。
LCS&Prob模型對詩句整體的一致性和連貫性有所提升。第二句“芳草青青”點(diǎn)明春季,第四句“對花”也緊扣“春”。因生成概率本身對上下文關(guān)聯(lián)性起到了約束作用,故模型在基于LCS考慮局部語義相似時(shí),也能在一定程度上避免上下文矛盾。此外,Vec&Prob模型生成的集句詩比起單純用句向量求近似的Vec模型,在整體意境上也有所提升。第一句描寫閑適的春日景色。在這樣的景致中,第二句里詩人卻感嘆,春風(fēng)是不能理解自己的愁緒的。第三句借落花凋零,流水匆匆形象地展現(xiàn)了自己內(nèi)心的愁苦,第四句借用王粲的典故,收束全篇,點(diǎn)出自己愁苦的原因——懷才不遇。這首詩完整描述了一個(gè)郁郁不得志的詩人形象,比起Vec模型的結(jié)果,Vec&Prob模型選擇的句子意境更豐富,整首詩句子間的過渡也更好。
對生成的五言詩, Vec模型的結(jié)果中,前三句關(guān)聯(lián)性較好,但是第四句“唯尋相鶴經(jīng)”和上文內(nèi)容無關(guān)。Vec&Prob模型則在上下文一致性上有明顯提升?!盎ā薄ⅰ暗?、“柳”、“鳥啼”、“曉霞”, 整首詩描繪了一副微寒的春晨,靜謐野外的景致。使用LCS模型的結(jié)果中,前兩句寫景,后兩句抒情,但景和情之間缺少聯(lián)系,轉(zhuǎn)折過于突兀,從而破壞了連貫性。LCS&Prob的結(jié)果和Vec&Prob的結(jié)果類似,都是描繪了春季景色。區(qū)別在于,Vec&Prob的結(jié)果中,第四句“曉霞”點(diǎn)明了時(shí)間是清晨,很好地映照了第一句“花寒”的“寒”字,交代了花寒的原因。但是LCS&Prob的結(jié)果沒有體現(xiàn)出這一點(diǎn),因此稍遜一籌。
從上述分析可以較為直觀地看出,生成模型概率能緊密約束上下文關(guān)聯(lián)性,對局部字串匹配帶來的信息丟失也能起到一定的緩解作用。
本文探究了深度神經(jīng)網(wǎng)絡(luò)在集句任務(wù)中的應(yīng)用?;谏窠?jīng)網(wǎng)絡(luò)自動(dòng)學(xué)習(xí)詩句的語義表示,我們設(shè)計(jì)了一種結(jié)合生成結(jié)果語義和上下文生成概率的評(píng)分方法,提出了一種高效率、高質(zhì)量的自動(dòng)集句生成模型。
試驗(yàn)結(jié)果表明,將生成模型計(jì)算候選詩句的生成概率作為集句候選的標(biāo)準(zhǔn),可以有效地自動(dòng)選擇出效果比較好的集句。計(jì)算句向量近似可以在保證質(zhì)量的前提下,提高集句的生成效率。
我們將繼續(xù)探究詩句相似性的評(píng)價(jià)算法。當(dāng)前神經(jīng)信息檢索方法通過核函數(shù)計(jì)算句對之間的相似度,我們在今后的工作希望能夠使用相關(guān)方法更好的計(jì)算詩句之間的相似度。