何 晶,周 明,蔣 龍
(1. 清華大學(xué) 理論計(jì)算機(jī)研究中心,北京 100084;2. 微軟亞洲研究院 自然語(yǔ)言計(jì)算組,北京 100190)
中文格律詩(shī)作為中國(guó)悠久燦爛的古典文學(xué)的重要組成部分,兼有中文的美感和藝術(shù)的靈感。然而格律詩(shī)的韻律要求十分嚴(yán)格,給作詩(shī)造成了障礙。本研究的目的是通過(guò)研究格律詩(shī)生成的內(nèi)在規(guī)律,利用計(jì)算機(jī)輔助進(jìn)行格律詩(shī)的自動(dòng)生成。
對(duì)聯(lián)可以看作是一種特殊的格律詩(shī)。微軟亞洲研究院自然語(yǔ)言計(jì)算組研發(fā)了自動(dòng)對(duì)聯(lián)系統(tǒng)①http://duilian.msra.cn[1]。這套系統(tǒng)采用了統(tǒng)計(jì)機(jī)器翻譯的方法。它將上下聯(lián)的對(duì)應(yīng)關(guān)系建模成機(jī)器翻譯中源語(yǔ)言句子和目標(biāo)語(yǔ)言句子的對(duì)應(yīng)關(guān)系。我們?cè)谶@個(gè)工作基礎(chǔ)上,將格律詩(shī)中的上下句關(guān)系建模為機(jī)器翻譯中的源語(yǔ)言句子和目標(biāo)語(yǔ)言句子的關(guān)系。然而,詩(shī)中的句對(duì)跟對(duì)聯(lián)在格律、意境方面有許多不同,不能單純地采用對(duì)對(duì)聯(lián)的技術(shù)。
統(tǒng)計(jì)機(jī)器翻譯把翻譯的過(guò)程看作是一個(gè)搜索過(guò)程,也就是對(duì)一個(gè)給定的源文句子,生成多種可能的譯文,然后搜索一個(gè)在統(tǒng)計(jì)意義下最優(yōu)的翻譯結(jié)果。本研究中,我們采用了基于短語(yǔ)的統(tǒng)計(jì)機(jī)器翻譯[2,12]方法。該方法以短語(yǔ)作為翻譯的基本單位。以給定絕句的上句來(lái)生成下句為例,系統(tǒng)會(huì)首先將上句按照各種可能劃分為多個(gè)短語(yǔ),然后將每一個(gè)短語(yǔ)利用翻譯模型翻譯為下一句中的短語(yǔ),最后結(jié)合語(yǔ)言模型組合得到最優(yōu)的若干候選下句。我們還對(duì)傳統(tǒng)機(jī)器翻譯解碼器進(jìn)行了修改,使之生成符合韻律要求的下句。
基于統(tǒng)計(jì)機(jī)器翻譯的格律詩(shī)生成方法有一個(gè)缺憾:無(wú)法生成詩(shī)的第一句。為了彌補(bǔ)此不足,我們從古籍《詩(shī)學(xué)含英》中獲取了一個(gè)詩(shī)歌詞匯庫(kù),并設(shè)計(jì)了一個(gè)結(jié)合節(jié)奏模板和語(yǔ)言模型的首句生成模型。
本文接下來(lái)的內(nèi)容是這樣安排的:第二節(jié),介紹了詩(shī)歌生成領(lǐng)域的相關(guān)工作;第三節(jié)提出了詩(shī)歌生成的總體框架;第四和第五節(jié),分別解釋了首句生成模型和基于統(tǒng)計(jì)機(jī)器翻譯原理的自動(dòng)生成詩(shī)歌的模型;第六節(jié)報(bào)告了實(shí)驗(yàn)的設(shè)計(jì)說(shuō)明和評(píng)測(cè)結(jié)果,并在最后一節(jié)給出了本研究的結(jié)論和未來(lái)改進(jìn)的方向。
電腦輔助詩(shī)歌創(chuàng)作這一領(lǐng)域已有不少前人的工作,中國(guó)臺(tái)灣元智大學(xué)的羅鳳珠教授[5]提供了一個(gè)自動(dòng)檢查詩(shī)詞格律的系統(tǒng)和一個(gè)幫助用戶查找同韻字的字典。李良炎[6]探討了中文詩(shī)詞風(fēng)格評(píng)價(jià)技術(shù)。至于自動(dòng)生成詩(shī)歌,網(wǎng)上廣泛流傳的“稻香老農(nóng)”作詩(shī)機(jī)*http://www.poeming.com/web/index.htm采用將辭藻按照語(yǔ)法直接填入詩(shī)詞模板而成,生成的詩(shī)歌較為生硬晦澀。目前還沒(méi)有看到較好的生成中文詩(shī)歌的結(jié)果。在中文對(duì)聯(lián)方面,微軟亞洲研究院的自然語(yǔ)言計(jì)算組研發(fā)的計(jì)算機(jī)自動(dòng)對(duì)聯(lián)系統(tǒng)[7]首次采用了統(tǒng)計(jì)機(jī)器翻譯用于對(duì)聯(lián)生成。
其他語(yǔ)言的利用計(jì)算機(jī)生成詩(shī)歌研究工作始于1959年,Theo Lutz用計(jì)算機(jī)產(chǎn)生了第一首德文詩(shī)歌[8]。Mnuring在其論文中提出了一個(gè)完整的作詩(shī)機(jī)模型[10]。另外,前人還設(shè)計(jì)了RACTER和PROSE等作詩(shī)系統(tǒng)[8]。
總結(jié)前人對(duì)于詩(shī)歌生成的研究,可以將詩(shī)歌生成粗略地分為三類(lèi):基于模板的、進(jìn)化的和基于范例的過(guò)程。就我們所知,目前還沒(méi)有用統(tǒng)計(jì)的方法研究中文格律詩(shī)的工作發(fā)表。我們的工作可以說(shuō)是這一領(lǐng)域的第一個(gè)嘗試。
模擬人寫(xiě)絕句的過(guò)程,我們把計(jì)算機(jī)絕句生成的過(guò)程分為以下幾個(gè)步驟:
1. 用戶選擇詩(shī)的形式(五言或七言),并通過(guò)輸入關(guān)鍵詞確定想要表達(dá)的內(nèi)容;
2. 由計(jì)算機(jī)自動(dòng)生成詩(shī)的首句;
3. 根據(jù)生成的首句并參考用戶給定的信息,由計(jì)算機(jī)依次生成余下的詩(shī)句。
圖1 絕句生成框架
用戶首先選擇待作絕句的內(nèi)容可能涉及到的若干個(gè)語(yǔ)義類(lèi)別,例如“時(shí)令類(lèi)”、“游眺類(lèi)”等。然后在各語(yǔ)義類(lèi)別下選擇一個(gè)關(guān)鍵詞,比如分別選擇“早春”、“踏青”等。這里所用到的語(yǔ)義類(lèi)別以及每個(gè)類(lèi)別下的關(guān)鍵詞都是由《詩(shī)學(xué)含英》*清朝乾隆年間,山陰劉文蔚編輯之《詩(shī)學(xué)含英》根據(jù)《增廣詩(shī)韻全璧》一書(shū)所附《詩(shī)學(xué)含英》建立, 旨在提供初習(xí)作詩(shī)者應(yīng)用辭藻典故之參考。中的分類(lèi)體系整理得到的?!对?shī)學(xué)含英》中的分類(lèi)體系共有40大類(lèi),1 016個(gè)關(guān)鍵詞,41 218個(gè)詞(其中不重復(fù)的34 290個(gè)),其中的詞匯長(zhǎng)度從2到5不等。例如時(shí)令類(lèi)是一個(gè)大類(lèi),里面有春色,早春等關(guān)鍵詞。例如任意一個(gè)關(guān)鍵詞為“春色”,書(shū)中將描寫(xiě)“春色”的詩(shī)歌中的一些辭藻整理歸納出來(lái),得到與關(guān)鍵詞“春色”相關(guān)的辭藻,如山青、芳草等相關(guān)詞匯。
當(dāng)用戶確定好詩(shī)的形式和三個(gè)關(guān)鍵詞以后,我們利用一個(gè)相關(guān)詞匯庫(kù)和統(tǒng)計(jì)語(yǔ)言模型自動(dòng)地生成若干首句候選。
有了絕句的第一句,要讓電腦生成余下的三句,我們把絕句的上下相鄰兩句的關(guān)系類(lèi)比于翻譯問(wèn)題中源語(yǔ)言和目標(biāo)語(yǔ)言的對(duì)應(yīng)關(guān)系,給定絕句上句,利用統(tǒng)計(jì)機(jī)器翻譯的方法來(lái)“翻譯”得出下一句。在生成第N句詩(shī)的時(shí)候,依據(jù)的信息是上一句詩(shī),以及上溯到第一句的所有詩(shī)句,甚至包括用戶輸入的關(guān)鍵詞。
我們提出的詩(shī)歌生成框架使得用戶和系統(tǒng)之間的交互很方便。我們可以充分地利用用戶的選擇,改進(jìn)系統(tǒng)的結(jié)果,最大限度地滿足用戶需求并產(chǎn)生質(zhì)量良好的詩(shī)句。
根據(jù)觀察,五言絕句的詩(shī)句通常是以下七種節(jié)奏格式:(***|**代表一個(gè)三音節(jié)短語(yǔ)加上一個(gè)雙音節(jié)短語(yǔ),以此類(lèi)推),*|****,****|*,***|**,**|***,**|*|**,*|**|**,**|**|*。而七言絕句的則主要是以下六種格式:**|**|***,**|***|**,***|**|**,*|***|***,***|*|***,***|***|*。假設(shè)所要生成的絕句的首句包含的詞都是與用戶選定的關(guān)鍵詞相關(guān)的,那么只要我們通過(guò)將與這些關(guān)鍵詞相關(guān)的詞匯按照上述格式進(jìn)行組配,就可以得到符合要求的絕句首句了。
按照這種方法來(lái)生成絕句首句,必須首先建立一個(gè)相關(guān)詞匯數(shù)據(jù)庫(kù)。本研究中,我們提出了利用《詩(shī)學(xué)含英》中的詞匯分類(lèi)體系來(lái)建立該數(shù)據(jù)庫(kù)。對(duì)于500首格律詩(shī)的調(diào)查證明,95%的詩(shī)歌的第一句中出現(xiàn)的字詞都可以在《詩(shī)學(xué)含英》中找到,因此用《詩(shī)學(xué)含英》作為詩(shī)歌詞匯的來(lái)源是切實(shí)可行的。
利用根據(jù)《詩(shī)學(xué)含英》建立的相關(guān)詞匯數(shù)據(jù)庫(kù),我們可以為用戶選定的每個(gè)關(guān)鍵詞生成一個(gè)相關(guān)詞匯集合。這樣,我們得到了若干個(gè)包含不同長(zhǎng)度詞匯的集合,然后把所有相關(guān)詞匯依次從句子的第一個(gè)位置放置到句子的最后一個(gè)位置,生成一個(gè)詞圖。隨后在詞圖上面采用Forward-Viterbi-backward-A*搜索算法得到需要的首句。為了防止生成的詩(shī)句出現(xiàn)“孤平”等不合韻律的現(xiàn)象,我們加入了一個(gè)過(guò)濾過(guò)程,將不符合韻律要求的句子去掉。
舉例而言,用戶選定三個(gè)關(guān)鍵詞:春日、郊行、訪友,要求生成五言絕句。我們的系統(tǒng)將會(huì)構(gòu)建一個(gè)龐大的相關(guān)詞匯表{“明媚”,“尋芳草”,“水村”,“舊話”,……},并且把相關(guān)詞匯依次放置到句子的各個(gè)位置,形成的詞圖如表1。
表1 詞圖舉例
接著我們可以采用Forward-Viterbi-backward-A*算法得出N個(gè)候選首句,例如“晴光尋芳草”,“晴光魚(yú)迎門(mén)”,“ 江山麗蝶飛”。
之前的研究[1]已經(jīng)證明了統(tǒng)計(jì)機(jī)器翻譯方法可以被用于對(duì)聯(lián)下聯(lián)的生成。對(duì)聯(lián)可以被看作一種特殊的中文詩(shī),且絕句中也頻繁的包含類(lèi)似對(duì)聯(lián)的句對(duì),例如我們統(tǒng)計(jì)了大量的絕句第一句和第二句,第三句和第四句,發(fā)現(xiàn)這些句對(duì)中約90%的句對(duì)存在著上下句結(jié)構(gòu)一致的特點(diǎn)。同樣地,絕句的第三句和第四句也有約90%的情況結(jié)構(gòu)相同。所以我們希望利用同樣的方法來(lái)生成絕句下句。不過(guò),絕句下句的生成與機(jī)器翻譯還是存在一些不同:源語(yǔ)言句子長(zhǎng)度等于目標(biāo)語(yǔ)的句子長(zhǎng)度;跟對(duì)聯(lián)一樣,由于絕句的上下句子的字或者詞一一對(duì)應(yīng),因此無(wú)需做詞匯的對(duì)齊,也不存在詞序的調(diào)整問(wèn)題。所以,我們需要將統(tǒng)計(jì)機(jī)器翻譯方法作適當(dāng)?shù)男薷囊杂糜诮^句下句的生成。
同時(shí),為了保持要生成的目標(biāo)語(yǔ)句和上文的所有已有詩(shī)句的情境較為一致,保持絕句的完整性,使得絕句滿足“起承轉(zhuǎn)合”的結(jié)構(gòu)要求。我們?cè)O(shè)計(jì)了一個(gè)互信息模型的特征函數(shù)用以補(bǔ)充。
具體而言,給定絕句的第i個(gè)句子F={f1,f2,...,fn} (i=1, 2, 3)和前i-1句詩(shī)歌,記作P={p1,p2,...,pn*(i-1)},我們的目的是要找到一個(gè)第i+1個(gè)句子S={s1,s2,...,sn},使得概率p(S|F,P)最大,其中fi,si和pi都是中文單字。根據(jù)文獻(xiàn)[3]的結(jié)果, 我們棄用了傳統(tǒng)的噪聲信道模型,使用了一個(gè)更為普遍的對(duì)數(shù)線性模型:
(1)
其中M是特征函數(shù)的總數(shù),hi(s,f)是不同的特征函數(shù),具體如表1所示。在這個(gè)模型中,單字代替了詞語(yǔ),作為翻譯基本單元來(lái)形成短語(yǔ)。這是因?yàn)橹形脑?shī)歌語(yǔ)言精煉,絕大部分的詞語(yǔ)都是由單字組成,因此引入中文分詞反而會(huì)增加錯(cuò)誤率。
本研究中,根據(jù)前人的工作[1],我們采用了五個(gè)已經(jīng)用到的特征函數(shù)(表2 中的h1到h5)。另外我們針對(duì)詩(shī)歌的生成的特殊性設(shè)計(jì)了第六個(gè)特征函數(shù)(表2中的h6)。在這里,h1~h4依賴(lài)于S和F,h5只由S決定而h6由S,F和P共同決定。h6直接代入公式,和前五個(gè)參數(shù)共同計(jì)算目標(biāo)句子的分?jǐn)?shù)。
表2 對(duì)數(shù)線性模型的六個(gè)特征函數(shù)
? 基于短語(yǔ)的翻譯概率
(2)
? 基于短語(yǔ)的反向翻譯概率
? 基于詞匯的翻譯概率
另外,我們需要較好地評(píng)價(jià)一對(duì)雙語(yǔ)互譯短語(yǔ)對(duì)之間的翻譯質(zhì)量[2]。因此基于詞匯的翻譯概率必須用作一個(gè)特征函數(shù),以評(píng)價(jià)短語(yǔ)對(duì)之間每個(gè)單詞翻譯為另外一個(gè)短語(yǔ)對(duì)的對(duì)應(yīng)單詞的概率。與基于短語(yǔ)的翻譯概率的計(jì)算公式類(lèi)似,詞匯sj翻譯為對(duì)應(yīng)詞匯fj的概率pw(fj|sj)可以按如下方式計(jì)算:
(3)
(4)
? 基于詞匯的反向翻譯概率
與基于短語(yǔ)的翻譯概率相仿,我們?cè)诜g模型中也使用了反向的基于詞匯的翻譯概率pw(sj|fj)作為對(duì)pw(fj|sj)的補(bǔ)充。
? 語(yǔ)言模型
前四個(gè)特征函數(shù)主要是保證生成的下句與上句結(jié)構(gòu)和語(yǔ)意的聯(lián)系,而語(yǔ)言模型特征則是為了保證生成的下句符合詩(shī)歌的語(yǔ)言習(xí)慣。這里,我們使用了由Katz提出的回退權(quán)重訓(xùn)練得到的一個(gè)基于單字的三元模型[13]。
? 互信息模型
在統(tǒng)計(jì)機(jī)器翻譯和對(duì)聯(lián)生成的工作中,目標(biāo)語(yǔ)句只依賴(lài)于源語(yǔ)句。然而,在詩(shī)歌生成中,目標(biāo)語(yǔ)句(即第i+1個(gè)要生成的詩(shī)句)不僅僅依賴(lài)于源語(yǔ)句(即第i個(gè)詩(shī)句),同時(shí)也要受到前i-1個(gè)詩(shī)句的影響。為了保持要生成的目標(biāo)語(yǔ)句和上文的所有已有詩(shī)句的情境較為一致,我們?cè)O(shè)計(jì)了一個(gè)互信息模型的特征函數(shù),計(jì)算方法如下:
(5)
任意兩個(gè)字之間的互信息分?jǐn)?shù)的計(jì)算公式如下:
(6)
其中c1和c2是兩個(gè)單字,p(c1,c2),p(c1)和p(c2)分別代表c1和c2同時(shí)出現(xiàn)的概率,c1出現(xiàn)在詩(shī)歌中的概率和c2出現(xiàn)在詩(shī)歌中的概率。這些參數(shù)可以由對(duì)訓(xùn)練詩(shī)歌語(yǔ)料采用MLE方法得到。
? 訓(xùn)練數(shù)據(jù)
利用互聯(lián)網(wǎng)我們獲得了《全唐詩(shī)》、《全宋詩(shī)》、《全宋詞》、《明詩(shī)》、《全清詩(shī)》和《全臺(tái)詩(shī)》,所有語(yǔ)料共計(jì)30多萬(wàn)首古典詩(shī)歌和350多萬(wàn)個(gè)單句,所有的詩(shī)歌都用作互信息模型的訓(xùn)練語(yǔ)料。同時(shí),從中我們提取了120多萬(wàn)上下句對(duì)照句對(duì)用以訓(xùn)練翻譯模型。從一首絕句中可以提取到三對(duì)上下句對(duì)照句對(duì)(第一句對(duì)第二句,第二句對(duì)第三句,第三句對(duì)第四句)。由于純粹的絕句數(shù)量有限,所以為了獲得更多的訓(xùn)練數(shù)據(jù),我們也從其他詩(shī)歌里提取了對(duì)照句對(duì)(例如宋詞中前后相同長(zhǎng)度的句子),但是要求上下句字?jǐn)?shù)一致。
? 翻譯概率插值
即依照所要生成的詩(shī)句在整首絕句中的具體位置采用不同的翻譯概率表組合。絕句的起承轉(zhuǎn)合四項(xiàng)任務(wù),一般分由第一句、第二句、第三句和第四句來(lái)分別完成。所以,不同位置的詩(shī)句,理應(yīng)采用不同權(quán)重的翻譯概率表。因此,我們搜集了所有絕句的三種翻譯組合(第一句對(duì)第二句,第二句對(duì)第三句,第三句對(duì)第四句),分別訓(xùn)練得到三個(gè)不同的翻譯概率模型,并對(duì)其進(jìn)行插值。
本研究中,我們將絕句對(duì)應(yīng)位置的上下句對(duì)照訓(xùn)練語(yǔ)料得到的翻譯概率賦以較大權(quán)重,而將從其他句對(duì)訓(xùn)練得到的翻譯概率賦以較低的權(quán)重。舉例而言,在根據(jù)第一句翻譯第二句時(shí),所有從絕句第一句和第二句訓(xùn)練得到的翻譯概率模型都將被賦以較大權(quán)重,而所有詩(shī)句句對(duì)訓(xùn)練出的翻譯概率模型將被賦以較小權(quán)重。具體實(shí)現(xiàn)時(shí),我們確定較大的權(quán)重為0.8,較小的權(quán)重為0.2。每個(gè)位置的解碼使用的翻譯概率表即為不同位置的翻譯概率表的插值結(jié)果。
? 語(yǔ)言模型間的插值
我們的語(yǔ)言模型訓(xùn)練數(shù)據(jù)分成兩個(gè)部分:來(lái)自古典詩(shī)歌的350多萬(wàn)個(gè)單句,互聯(lián)網(wǎng)上獲取的約1 200萬(wàn)行的古文語(yǔ)料*包括南朝蕭統(tǒng)的《文選》、《唐宋八大家散文選》等。。利用困惑度的公式,我們對(duì)訓(xùn)練數(shù)據(jù)計(jì)算出了Katz提出的回退權(quán)重,根據(jù)最大似然估計(jì)分別訓(xùn)練了一個(gè)基于單字的三元模型:古典詩(shī)歌語(yǔ)言模型p1(s)和古文語(yǔ)言模型p2(s),隨后進(jìn)行線性加權(quán)得到最終的語(yǔ)言模型如下
p(s)=0.8p1(s)+0.2p2(s)
(7)
為了適應(yīng)絕句生成的某些特殊要求,我們對(duì)傳統(tǒng)的統(tǒng)計(jì)機(jī)器翻譯解碼器[2]進(jìn)行了一些修改,首先不允許詞語(yǔ)調(diào)序,這使得我們的解碼器是單調(diào)的。另外由于詩(shī)歌的句子長(zhǎng)度一般都小于機(jī)器翻譯中的句子長(zhǎng)度,因此我們的解碼器效率比典型的機(jī)器翻譯解碼器的效率更高。此外,我們還進(jìn)行了關(guān)于韻律方面的修改:
首先,格律詩(shī)的首句不允許“孤平”的出現(xiàn),我們直接在選取前N個(gè)候選句子的時(shí)候,就去掉了可能產(chǎn)生“孤平”的詞語(yǔ)。
其次,根據(jù)絕句的押韻要求,第四句的最后一個(gè)字(稱(chēng)為“韻腳”)的韻必須和第二句韻腳的韻相合,兩個(gè)韻腳的平仄也需要一致。
為了滿足此押韻要求,在解碼第四句時(shí),我們需要對(duì)最后一個(gè)字或者短語(yǔ)作特殊處理。首先,我們需要根據(jù)第二句韻腳字的韻和平仄,刪掉翻譯候選中不符合要求的字或者短語(yǔ)。其次,為了使最后一個(gè)字的位置能有足夠多的候選以保證生成結(jié)果的多樣性,我們?cè)谶^(guò)濾后留下的候選里新插入了一些滿足韻律要求的候選字。例如,如果我們知道某詩(shī)第二句的韻腳是“眠”,因此按照古典詩(shī)詞韻書(shū)《平水韻》*南宋平水劉淵,將同用的韻合并,成107韻,后人漸為106韻,被稱(chēng)為平水韻,一般叫“詩(shī)韻”。中所載的漢字古韻選取與“眠”字有相同韻腳的所有字,同時(shí)去除掉平仄不符合的字。然后我們?cè)诜g概率表中動(dòng)態(tài)插入這些提取的字。使得我們的翻譯出來(lái)的句子滿足押韻要求。
絕句的評(píng)測(cè)是一個(gè)很關(guān)鍵的問(wèn)題。之前的自動(dòng)對(duì)聯(lián)研究[1]采用的是基于BLEU[14]的評(píng)測(cè)方法。具體來(lái)講,就是給定若干個(gè)上聯(lián),人工為每個(gè)上聯(lián)寫(xiě)出多個(gè)下聯(lián)。然后將這些上聯(lián)作為輸入,讓系統(tǒng)為每個(gè)上聯(lián)生成一個(gè)下聯(lián),最后計(jì)算系統(tǒng)生成的這些下聯(lián)與人寫(xiě)出的下聯(lián)的n-gram重合度。
然而,我們沒(méi)有采用這種自動(dòng)評(píng)測(cè)系統(tǒng),原因是該評(píng)測(cè)系統(tǒng)需要人工給出足夠多的“標(biāo)準(zhǔn)答案”,而對(duì)于絕句生成而言,給定相同的關(guān)鍵詞,“標(biāo)準(zhǔn)答案”的發(fā)散性太大。所以,在本研究中,我們采用的是人工評(píng)測(cè)方法。我們首先建立了一套翔實(shí)完整的人工評(píng)測(cè)標(biāo)準(zhǔn),然后采用blind test讓不同的人給系統(tǒng)產(chǎn)生的詩(shī)歌進(jìn)行打分,取平均分用以評(píng)價(jià)生成結(jié)果的好壞程度。這樣的評(píng)價(jià)方法在給定的實(shí)驗(yàn)數(shù)據(jù)較大(20~40組)的情況下盡力消除了主觀性。
為了較好地評(píng)測(cè)我們的方法產(chǎn)生的詩(shī)歌水平,我們共進(jìn)行了三項(xiàng)針對(duì)不同內(nèi)容的實(shí)驗(yàn)。
? 實(shí)驗(yàn)一:首句評(píng)測(cè)。即給定三個(gè)關(guān)鍵詞,對(duì)自動(dòng)生成的絕句首句進(jìn)行評(píng)測(cè)。
? 實(shí)驗(yàn)二:下句評(píng)測(cè)。即給定絕句上句,對(duì)自動(dòng)生成的絕句下句進(jìn)行評(píng)測(cè)。
? 實(shí)驗(yàn)三:全詩(shī)評(píng)測(cè)。即加入人工交互后對(duì)全詩(shī)水平的評(píng)測(cè)。
我們首先隨機(jī)選定一組關(guān)鍵詞,讓系統(tǒng)生成20個(gè)首句,然后人工選出一句最好的首句,根據(jù)詩(shī)句語(yǔ)言,與關(guān)鍵詞的聯(lián)系程度,以及是否合適作為首句這三個(gè)標(biāo)準(zhǔn),加權(quán)評(píng)分。各權(quán)重和分?jǐn)?shù)如表3所示。
表3 首句評(píng)測(cè)標(biāo)準(zhǔn)
在本實(shí)驗(yàn)里,我們一共隨機(jī)選取了40組關(guān)鍵詞,其中20組五言首句,20組七言首句,得到的平均分見(jiàn)表4。
表4 首句評(píng)測(cè)結(jié)果
可以看出,七言詩(shī)句的生成效果要好于五言詩(shī)句,這是因?yàn)槲覀冊(cè)谠u(píng)測(cè)首句生成的標(biāo)準(zhǔn)里面,強(qiáng)調(diào)了與用戶所給關(guān)鍵詞的符合程度,這樣七言詩(shī)句的涵蓋內(nèi)容更廣泛,對(duì)關(guān)鍵詞的命中率也提高了。對(duì)于得分較低的關(guān)鍵詞組,我們進(jìn)一步分析發(fā)現(xiàn)其主要原因是我們?cè)趯?shí)驗(yàn)時(shí)采用了隨機(jī)選取關(guān)鍵詞的辦法,選出的關(guān)鍵詞內(nèi)在聯(lián)系不緊密,導(dǎo)致了生成的首句準(zhǔn)確率不夠高。事實(shí)上,用戶通常會(huì)選擇有一定聯(lián)系的關(guān)鍵詞,這樣我們的系統(tǒng)就可以發(fā)揮更好的效果。
我們從首句實(shí)驗(yàn)中依次選出10個(gè)最佳的首句,并依次生成第二句,然后選出最佳的第二句,生成第三句……以此類(lèi)推可以得到若干組最佳下句,并交給評(píng)測(cè)員打分。評(píng)測(cè)標(biāo)準(zhǔn)見(jiàn)表5。
表5 下句評(píng)測(cè)標(biāo)準(zhǔn)
由此我們可以得到每個(gè)下句的平均分,隨后把所有符合要求的詩(shī)句分成良好和可接受這兩個(gè)等級(jí),標(biāo)準(zhǔn)見(jiàn)表6。
表6 下句的不同等級(jí)
若前N個(gè)候選詩(shī)句中,存在著至少一個(gè)良好或可接受等級(jí)的詩(shī)句,那么該測(cè)試?yán)臃弦?。最后我們分別計(jì)算符合這樣要求的測(cè)試?yán)拥谋壤玫浇Y(jié)果見(jiàn)表7。
表7 五言詩(shī)句的測(cè)試結(jié)果
可見(jiàn),有50%左右的實(shí)驗(yàn)樣例,前1句中存在一個(gè)可接受的詩(shī)句。而前5,前10和前20中,至少存在一個(gè)可接受詩(shī)句的實(shí)驗(yàn)樣例比例依次增大,最高可達(dá)80%。
表8 七言詩(shī)句的測(cè)試結(jié)果
實(shí)驗(yàn)中也能看出一些不足之處,從總體上說(shuō),A等級(jí)的詩(shī)句的比例并不高,也就是說(shuō)我們的系統(tǒng)能作出符合要求和格律正確的詩(shī)句,然而,系統(tǒng)較少能作出特別精彩或者感情豐富的詩(shī)句。未來(lái)我們可以考慮對(duì)古典詩(shī)句進(jìn)行詞語(yǔ)標(biāo)注甚至情感標(biāo)注,從而提高詩(shī)句的語(yǔ)義水平,豐富詩(shī)句的情感。
為了評(píng)價(jià)我們的方法產(chǎn)生的完整詩(shī)歌的水平,并與已有的其他作詩(shī)機(jī)進(jìn)行比較,本實(shí)驗(yàn)中,我們共選定了20組關(guān)鍵詞,生成了20組絕句(五言絕句10組,七言絕句10組),并用同樣的關(guān)鍵詞下稻香作詩(shī)機(jī)生成的詩(shī)歌進(jìn)行比較。其中,我們采用了自動(dòng)生成和人工交互生成兩種手段:第一種是人工交互生成,即給定關(guān)鍵詞,當(dāng)系統(tǒng)輸出了每一句的候選之后,人工交互選出最好的一句作為下一句的輸入。第二種是自動(dòng)生成,即在交互的每一步,由計(jì)算機(jī)自動(dòng)生成唯一的最優(yōu)解,并作為下一句的輸入。
最后,我們請(qǐng)?jiān)u測(cè)員對(duì)20組生成的詩(shī)歌,按照表9給出的評(píng)測(cè)標(biāo)準(zhǔn)打分。每組詩(shī)歌均包括稻香作詩(shī)機(jī)的結(jié)果,我們的自動(dòng)作詩(shī)機(jī)的結(jié)果和我們的人工交互方法的結(jié)果(見(jiàn)表10)。
表9 全詩(shī)評(píng)測(cè)標(biāo)準(zhǔn)
每首詩(shī)歌的分?jǐn)?shù)得到之后,我們可以計(jì)算出三種方法的平均分?jǐn)?shù),如下表所示。
表10 全詩(shī)評(píng)測(cè)結(jié)果
從表10可以看到,我們的兩種方法得到的結(jié)果都要優(yōu)于稻香作詩(shī)機(jī)。在交互模式下,生成詩(shī)歌的平均分?jǐn)?shù)為77.83分,意味著大部分的詩(shī)歌都是可接受的,且近一半的詩(shī)作可以被人認(rèn)為是較好的詩(shī)作??紤]到作詩(shī)的難度,這個(gè)分?jǐn)?shù)已經(jīng)不錯(cuò)了。
表11給出關(guān)鍵詞為“豪放,詩(shī),父子”以及關(guān)鍵詞為“秋日書(shū)懷,秋望,月影”的例子,可以看出,盡管語(yǔ)言和結(jié)構(gòu)的差距不是特別明顯,但是我們的方法產(chǎn)生的詩(shī)歌比之稻香作詩(shī)機(jī)要切題得多,語(yǔ)言也更加優(yōu)美古樸。例如關(guān)于“豪放詩(shī)歌”,我們的作詩(shī)機(jī)用“六朝風(fēng)月”這個(gè)典故來(lái)形容詩(shī)歌的內(nèi)容,用“狂吟醉舞”來(lái)形容詩(shī)人作詩(shī)的過(guò)程,用“大夢(mèng)醒來(lái)煙柳老”來(lái)描述完成詩(shī)歌創(chuàng)作后詩(shī)人的心情,有一定的藝術(shù)性。
表11 生成的詩(shī)歌
本文獨(dú)創(chuàng)性地結(jié)合了統(tǒng)計(jì)機(jī)器翻譯的模型和基于傳統(tǒng)詞藻分類(lèi)的生成模型來(lái)自動(dòng)生成中文格律詩(shī)。在用戶給定幾個(gè)關(guān)鍵詞后,我們的系統(tǒng)首先利用已有的分好類(lèi)的詞藻來(lái)生成一個(gè)語(yǔ)言模型分?jǐn)?shù)最高的詩(shī)句。隨后我們應(yīng)用統(tǒng)計(jì)機(jī)器翻譯的技術(shù),結(jié)合鄰近的詩(shī)句和全詩(shī)的語(yǔ)境從詩(shī)歌的上句翻譯生成詩(shī)歌的其他句子。根據(jù)嚴(yán)格的人工評(píng)測(cè)的結(jié)果,我們的方法能夠生成比較合理的詩(shī)歌,并且比已有的一個(gè)中文詩(shī)歌生成器準(zhǔn)確率高。
未來(lái)我們的工作包括以下幾個(gè)方面:首先,采用首句模板生成和統(tǒng)計(jì)機(jī)器翻譯模型來(lái)進(jìn)行絕句的生成,并不是十全十美的。我們已經(jīng)考慮了絕句作為一個(gè)整體的影響,并加入了互信息模型,然而未來(lái)可以考慮采用別的更好的辦法來(lái)加強(qiáng)整個(gè)絕句的整體性和完整性。并對(duì)韻律要求更加嚴(yán)格。
在對(duì)特征函數(shù)進(jìn)行評(píng)價(jià)的過(guò)程中,我們考慮采用固定其他特征函數(shù),對(duì)某一個(gè)特征函數(shù)的作用進(jìn)行實(shí)驗(yàn)研究,得到定量數(shù)據(jù),這樣能夠使得若干特征函數(shù)的權(quán)重更加科學(xué)合理。
還有,古典絕句的格律要求十分嚴(yán)格,現(xiàn)代人寫(xiě)絕句已經(jīng)不拘泥于這樣嚴(yán)格的格律要求了,同時(shí)古音(特別是平仄)到今天已經(jīng)發(fā)生了改變。因此我們的系統(tǒng)只考慮了押韻要求,沒(méi)有考慮平仄要求。未來(lái)我們可能根據(jù)《平水韻》將古漢語(yǔ)的平仄要求加入作詩(shī)機(jī),生成韻律更為精準(zhǔn)的詩(shī)歌。
另外,我們還考慮對(duì)產(chǎn)生的詩(shī)歌和已有的古典名詩(shī)混合進(jìn)行“圖靈測(cè)試”,通過(guò)測(cè)試可以判斷,一個(gè)懂得一定詩(shī)歌知識(shí)但不是詩(shī)歌專(zhuān)家的讀者能否正確地區(qū)分詩(shī)人寫(xiě)出的詩(shī)歌和電腦寫(xiě)出的詩(shī)歌。
[1]Long Jiang, Ming Zhou. Generating Chinese Couplets using a Statistical MT Approach[C]//The 22nd International Conference on Computational Linguistics, Manchester, England, August 2008.
[2]Philipp Koehn, Franz Josef Och, and Daniel Marcu. Statistical Phrase-Based Translation[C]//HLT/NAACL 2003.
[3]Franz Josef Och. Minimum Error Rate Training for Statistical Machine Translation[C]//ACL 2003:Proc. of the 41st Annual Meeting of the Association for Computational Linguistics, Japan, Sapporo, July 2003.
[4]Franz Josef Och, Hermann Ney. Discriminative Training and Maximum Entropy Models for Statistical Machine Translation[C]//ACL 2002:Proc. of the 40th Annual Meeting of the Association for Computational Linguistics, Philadelphia, PA, July 2002:295-302.
[5]羅鳳珠,李元萍,曹偉政.〈中國(guó)古代詩(shī)詞格律自動(dòng)檢索與教學(xué)系統(tǒng)〉[J].中文信息學(xué)報(bào),1999,13(1):35-42
[6]李良炎,何中市,易勇.〈基于詞連接的中文詩(shī)詞風(fēng)格評(píng)價(jià)技術(shù)〉[J].中文信息學(xué)報(bào),2005.19(6):98-104.
[7]蘇勁松 , 周昌樂(lè) , 李翼鴻.基于統(tǒng)計(jì)抽詞和格律的全宋詞切分語(yǔ)料庫(kù)建立[J].中文信息學(xué)報(bào),2007.21(2):52-57.
[8]Charles O. Hartman. Virtual Muse:Experiments in Computer Poetry[M]. Wesleyan University Press, 1996.
[9]Naoko Tosa, Hideto Obara and Michihiko Minoh. Hitch Haiku:An Interactive Supporting System for Composing Haiku Poem[C]//ICEC 2008:209-216.
[10]H. Manurung, G. Ritchie and H. Thompson. Towards a computational model of poetry generation[C]//Proc. of the AISB-00 Symposium on Creative and Cultural Aspects of AI, 2001.
[11]Franz Josef Och, Nicola Ueffing, Hermann Ney. An Efficient A*Search Algorithm for Statistical Machine Translation[C]//Data-Driven Machine Translation Workshop, Toulouse, France, July 2001:55-62.
[12]Philipp Koehn. Pharaoh:a beam search decoder for phrase-based statistical machine translation models[C]//Proceedings of the Sixth Conference of the Association for Machine Translation in the Americas, 2004, pp.115-124.
[13]Andreas Stolcke. SRILM—An Extensible Language Modeling Toolkit[C]//Proc. of Intl. Conf. on Spoken Language Processing, 2002, 2:901-904.
[14]Kishore Papineni, Salim Roukos, Todd Ward, Wei-Jing Zhu. BLEU:a Methor for automatic evaluation of machine translation[C]//Proc. of the 40th Meeting of the Association for Computational Linguistics, 2002.