吳邦譽(yù), 周 越, 趙群飛, 張朋柱
(1. 上海交通大學(xué) 自動(dòng)化系 系統(tǒng)控制與信息處理教育部重點(diǎn)實(shí)驗(yàn)室,上海 200240;2. 上海交通大學(xué) 安泰經(jīng)濟(jì)與管理學(xué)院 管理信息系統(tǒng)系,上海 200240)
對(duì)話(huà)是自然語(yǔ)言處理問(wèn)題中的一項(xiàng)重要工作,它包括意圖理解、知識(shí)推理和問(wèn)題回答等多個(gè)方面的技術(shù)。
傳統(tǒng)的對(duì)話(huà)模型主要可以分為以下兩種方法:基于規(guī)則的方法[1]和基于統(tǒng)計(jì)機(jī)器學(xué)習(xí)的方法[2-4]?;谝?guī)則的方法通過(guò)人為制定多種語(yǔ)法規(guī)則,以匹配的方法來(lái)選擇候選答案,但該方法存在規(guī)則難以制定和匹配答案固定單一的問(wèn)題。基于統(tǒng)計(jì)機(jī)器學(xué)習(xí)的方法則是通過(guò)特定的學(xué)習(xí)算法和少量的數(shù)據(jù)對(duì)模型進(jìn)行訓(xùn)練,該方法同樣難以實(shí)現(xiàn)一個(gè)可擴(kuò)展的對(duì)話(huà)系統(tǒng)。
深度神經(jīng)網(wǎng)絡(luò)近年來(lái)在自然語(yǔ)言處理領(lǐng)域取得了巨大成功。如Socher[5]將深度神經(jīng)網(wǎng)絡(luò)用于釋意檢測(cè)方向,Hinton[6]將深度神經(jīng)網(wǎng)絡(luò)用于語(yǔ)音識(shí)別方向,均取得了很好的效果。編碼—解碼模型首先由Sutskever[7]提出,應(yīng)用于神經(jīng)機(jī)器翻譯領(lǐng)域。該模型由一個(gè)編碼器網(wǎng)絡(luò)和一個(gè)解碼器網(wǎng)絡(luò)構(gòu)成。編碼器網(wǎng)絡(luò)接收輸入序列并將其編碼為固定長(zhǎng)度的中間語(yǔ)義向量,解碼器網(wǎng)絡(luò)對(duì)固定長(zhǎng)度的中間語(yǔ)義向量進(jìn)行解碼得到輸出序列。這種編碼—解碼結(jié)構(gòu)很好地解決了模型的輸入和輸出都為不定長(zhǎng)序列的問(wèn)題。由于編碼—解碼模型在神經(jīng)機(jī)器翻譯上的成功,Vinyals[8]在2015年將該模型用于自然語(yǔ)言對(duì)話(huà)領(lǐng)域。同年,Shang等[9]將編碼—解碼模型應(yīng)用于單輪短文本對(duì)話(huà),Sordoni[10]采用編碼—解碼模型結(jié)合上下文信息提出一種上下文敏感的對(duì)話(huà)生成模型。在此基礎(chǔ)上,Bahdanau[11]提出了注意力機(jī)制,使得輸出序列可以更好地與輸入序列對(duì)應(yīng)起來(lái),提升了編碼—解碼模型結(jié)構(gòu)的效果。
編碼—解碼模型雖然取得了不錯(cuò)的對(duì)話(huà)效果,但仍存在字詞表規(guī)模受限的問(wèn)題。為了控制模型的時(shí)空開(kāi)銷(xiāo),模型在編碼器網(wǎng)絡(luò)的輸入端和解碼器網(wǎng)絡(luò)的輸出端都要限制詞語(yǔ)表的規(guī)模。對(duì)于詞語(yǔ)表之外的詞語(yǔ),如果用特殊字符UNK代替,將導(dǎo)致句子信息的缺失。這一問(wèn)題對(duì)詞語(yǔ)規(guī)模較大的語(yǔ)言(如漢語(yǔ)、德語(yǔ)等)將產(chǎn)生較大影響。Jean[12]提出一種基于重要性采樣的方法,以保證在使用大規(guī)模詞語(yǔ)表示時(shí)模型訓(xùn)練復(fù)雜度不顯著增加。Ling[13]以字符作為編碼器網(wǎng)絡(luò)的輸入,以此減少字詞表規(guī)模。
本文利用漢字可用漢語(yǔ)拼音表述這一特點(diǎn),將漢字輸入轉(zhuǎn)換為拼音輸入,并將拼音分解為聲母、韻母和聲調(diào)三個(gè)部分作為編碼器的輸入,以此減少輸入的字詞規(guī)模。然后通過(guò)全卷積神經(jīng)網(wǎng)絡(luò)和雙向LSTM網(wǎng)絡(luò)提取拼音特征,通過(guò)該方法提取的拼音特征可以被精確地還原為輸入漢字。最后采用4層GRU網(wǎng)絡(luò)對(duì)拼音特征進(jìn)行解碼,得到輸出序列。同時(shí)在解碼階段加入了注意力機(jī)制,使模型的輸出可以更好的與輸入對(duì)應(yīng)起來(lái),提升對(duì)話(huà)效果。
目前漢字總數(shù)已經(jīng)超過(guò)了8萬(wàn),如果將漢字作為對(duì)話(huà)模型的輸入,模型的時(shí)空開(kāi)銷(xiāo)將會(huì)很大。本文針對(duì)漢字可用漢語(yǔ)拼音表述這一特點(diǎn),將漢字輸入轉(zhuǎn)換為拼音輸入,并將拼音拆分為聲母、韻母和聲調(diào)三個(gè)部分輸入對(duì)話(huà)模型。在保證擁有完整信息的情況下減少了模型的輸入維數(shù),降低模型的時(shí)空開(kāi)銷(xiāo),如圖1所示。
圖1 漢字拼音輸入對(duì)比
1.1.1 多音字處理
為了降低模型的輸入維數(shù),先將漢字輸入轉(zhuǎn)換為拼音輸入。漢字轉(zhuǎn)化為拼音時(shí)存在大量多音字干擾,故將漢字輸入轉(zhuǎn)化為拼音輸入時(shí)并不是對(duì)逐個(gè)漢字進(jìn)行轉(zhuǎn)化,而是對(duì)整個(gè)句子進(jìn)行轉(zhuǎn)化。這樣多音字在轉(zhuǎn)化為拼音時(shí)不僅結(jié)合了自身信息,同時(shí)也結(jié)合了前后文的信息,可以被有效地轉(zhuǎn)化為正確的拼音。例如,“他的頭部受到重創(chuàng)”,對(duì)于多音字“重”,其拼音表示可以有“zhong4”和“chong2”兩種選擇,通過(guò)結(jié)合前后文信息可以得知“zhong4”是此處多音字“重”的正確拼音轉(zhuǎn)換。多音字處理示例如圖2所示。
圖2 多音字處理示例
漢字輸入轉(zhuǎn)換為拼音輸入之后,將拼音拆分為聲母、韻母和聲調(diào)三個(gè)部分。這樣,模型的輸入維數(shù)將由原來(lái)的漢字個(gè)數(shù)降低到63,包括24個(gè)聲母部分、34個(gè)韻母部分和5個(gè)聲調(diào)部分。拼音表如表1所示。
表1 拼音表
注: “—”表示聲母部分為空(如“啊”、“哦”)的情況。
1.1.2 拼音向量生成
為了將拼音信息作為網(wǎng)絡(luò)模型的輸入,需要用數(shù)值表示拼音的各個(gè)部分(聲母、韻母和聲調(diào)),并將輸入的拼音信息映射為一張拼音圖。最簡(jiǎn)單的方法就是對(duì)拼音表中的每一個(gè)聲母、韻母和聲調(diào)都賦予一個(gè)值進(jìn)行表征,即one-hot編碼方式。但該編碼方式使聲母、韻母和聲調(diào)之間相互獨(dú)立,無(wú)法體現(xiàn)各部分拼音之間的聯(lián)系。于是本文將拼音表中的每一個(gè)聲母、韻母和聲調(diào)都表示為一個(gè)隨機(jī)生成的可訓(xùn)練的64維稠密向量,即embedding編碼方式。這樣對(duì)于長(zhǎng)度為n的中文詞匯 c=[c1,c2,…,cn] 可以采用拼音向量進(jìn)行表示,如式(1)所示。
(1)
其中,c_pinyin∈3×64為中文詞匯的拼音向量表示,ci∈3×64表示第i個(gè)字的拼音表示, xi∈64為聲母部分向量, yi∈64為韻母部分向量, zi∈64為聲調(diào)部分向量。
拼音向量在經(jīng)過(guò)訓(xùn)練之后,相近中文詞匯的拼音向量表示在空間上的距離較小,而無(wú)關(guān)中文詞匯的拼音向量表示在空間上的距離很大,可以表現(xiàn)出詞匯之間的聯(lián)系。
通過(guò)上述步驟,可以構(gòu)建出一個(gè)高度為3,寬度為輸入序列長(zhǎng)度,深度為64的拼音圖。拼音圖的構(gòu)建流程如圖3所示。
圖3 拼音圖構(gòu)建流程
1.2.1 FCN提取拼音特征
構(gòu)建了拼音圖之后,將拼音圖作為模型輸入,通過(guò)全卷積神經(jīng)網(wǎng)絡(luò)將聲母、韻母和聲調(diào)向量進(jìn)行融合,從而提取單個(gè)字的拼音特征。全卷積神經(jīng)網(wǎng)絡(luò)共設(shè)計(jì)了3個(gè)卷積層,將拼音特征的維度由原來(lái)的64維轉(zhuǎn)換到256維,最終得到長(zhǎng)度為輸入序列長(zhǎng)度,維數(shù)為256的拼音特征序列。全卷積神經(jīng)網(wǎng)絡(luò)提取拼音特征的流程,如圖4所示。
圖4 卷積網(wǎng)絡(luò)特征提取
令I(lǐng)∈3×time_step×64表示輸入的拼音圖,其中time_step為輸入序列的長(zhǎng)度。W∈3×k×64×256表示卷積窗口,k為卷積窗口的寬度。則全卷積網(wǎng)絡(luò)的輸出,如式(2)所示。
1.2.2 雙向LSTM處理同音字
通過(guò)全卷積神經(jīng)網(wǎng)絡(luò)提取的是單個(gè)字的拼音特征,該網(wǎng)絡(luò)無(wú)法對(duì)同音字的拼音特征進(jìn)行區(qū)分。由于漢字中存在大量同音字,若只考慮單獨(dú)的拼音信息而不結(jié)合前后文信息則會(huì)導(dǎo)致語(yǔ)義分析錯(cuò)誤。例如,“生病需要休養(yǎng)”和“生病需要修養(yǎng)”這兩句話(huà)在拼音表示上都是一樣的。對(duì)于“xiu1”的兩個(gè)同音字“休”和“修”,通過(guò)結(jié)合前后文信息可以知道“休”才是此處的正確表示。同音字處理示例如圖5所示。
圖5 同音字處理示例
因此,采用雙向LSTM網(wǎng)絡(luò)進(jìn)一步提取拼音特征,該網(wǎng)絡(luò)不僅提取當(dāng)前拼音自身的信息,還提取當(dāng)前拼音前后文的信息,得到結(jié)合了前后文信息的拼音特征。通過(guò)提取結(jié)合前后文信息的拼音特征可以有效地解決同音字帶來(lái)的語(yǔ)義分析錯(cuò)誤問(wèn)題。雙向LSTM提取拼音特征的流程如圖6所示。
令 xt表示t時(shí)刻輸入序列的值,At表示t時(shí)刻前向傳播隱藏層節(jié)點(diǎn)的值,Bt表示t時(shí)刻后向傳播隱藏層節(jié)點(diǎn)的值。則At、Bt的計(jì)算如式(3)、式(4)所示。
其中,t時(shí)刻網(wǎng)絡(luò)的輸出值yt取決于At和Bt,其計(jì)算過(guò)程,如式(5)所示。
最終的輸出Y=[y1,y2,…,ytime_step] 是長(zhǎng)度為輸入序列長(zhǎng)度,維數(shù)為256的拼音特征序列。
中文對(duì)話(huà)模型采用編碼器—解碼器網(wǎng)絡(luò)框架。編碼器網(wǎng)絡(luò)接受拼音信息輸入并將輸入序列轉(zhuǎn)化成一個(gè)固定長(zhǎng)度的中間語(yǔ)義向量。解碼器網(wǎng)絡(luò)對(duì)生成的中間語(yǔ)義向量進(jìn)行分析和解碼并最終得到模型的輸出序列。中文對(duì)話(huà)模型框架如圖7所示。
圖7 中文對(duì)話(huà)模型框架
圖7中編碼器部分即第1節(jié)中全卷積神經(jīng)網(wǎng)絡(luò)和雙向LSTM網(wǎng)絡(luò)的組合。該部分以拼音圖作為網(wǎng)絡(luò)的輸入,提取結(jié)合了前后文信息的拼音特征作為中間語(yǔ)義向量。解碼器部分由一個(gè)4層的GRU網(wǎng)絡(luò)構(gòu)成,該網(wǎng)絡(luò)由一個(gè)重置門(mén)和一個(gè)更新門(mén)構(gòu)成。重置門(mén)決定是否要忘記之前的信息,而更新門(mén)負(fù)責(zé)對(duì)輸出的信息進(jìn)行更改,GRU網(wǎng)絡(luò)能夠記住很長(zhǎng)時(shí)間內(nèi)的信息,對(duì)長(zhǎng)時(shí)間序列處理有較好的表現(xiàn)。解碼器部分對(duì)拼音特征進(jìn)行解碼,最終得到中文對(duì)話(huà)模型的輸出。
編碼器—解碼器模型雖然非常經(jīng)典,但也存在其局限性,即中間語(yǔ)義是一個(gè)固定長(zhǎng)度的向量。這將導(dǎo)致輸入序列或輸出序列的長(zhǎng)度較大時(shí),中間語(yǔ)義向量無(wú)法包含足夠多的信息。為了解決這一問(wèn)題,模型在解碼階段加入了注意力機(jī)制。這樣,編碼器不再需要將所有的輸入信息都編碼進(jìn)一個(gè)固定長(zhǎng)度的向量之中,而是得到一個(gè)中間語(yǔ)義向量序列V=[v1,v2,…,vn]。 在解碼時(shí),t時(shí)刻解碼器的輸出 st將與當(dāng)前時(shí)刻計(jì)算得出的中間語(yǔ)義向量 vt有關(guān)。注意力機(jī)制如圖8所示。
圖8 注意力機(jī)制
圖8中 hj表示編碼器輸出序列中的第j個(gè)值,A=[a1,a2,…,an] 表示注意力機(jī)制的權(quán)值網(wǎng)絡(luò),V為中間語(yǔ)義向量序列, st表示t時(shí)刻解碼器輸出的值,則 st的計(jì)算如式(6)、式(7)所示。
其中,atj為由網(wǎng)絡(luò)訓(xùn)練出的權(quán)值矩陣,表示t時(shí)刻解碼器的輸出st對(duì)第j個(gè)編碼器輸出hj注意力程度,該值越高則st對(duì)hj越重視??梢钥吹?,st由上一時(shí)刻解碼器的輸出st-1和當(dāng)前時(shí)刻的中間語(yǔ)義向量 vt得出。
通過(guò)以上步驟,得到了使用拼音輸入的中文對(duì)話(huà)模型,該模型的總體實(shí)現(xiàn)流程如圖9所示。
圖9 對(duì)話(huà)模型總體流程
目前公開(kāi)的中文對(duì)話(huà)數(shù)據(jù)庫(kù)數(shù)量較少,無(wú)法滿(mǎn)足深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練要求。為了對(duì)中文對(duì)話(huà)模型進(jìn)行訓(xùn)練與測(cè)試,本文建立了應(yīng)用于醫(yī)療領(lǐng)域的中文對(duì)話(huà)數(shù)據(jù)庫(kù)。該數(shù)據(jù)庫(kù)由325萬(wàn)多條問(wèn)答對(duì)組成,其中問(wèn)題為患者對(duì)疾病提出的疑問(wèn),回答為醫(yī)生根據(jù)患者描述做出的解答。在建立該數(shù)據(jù)庫(kù)的過(guò)程中,先在尋醫(yī)問(wèn)藥網(wǎng)站上提取了大量的問(wèn)答對(duì)話(huà)。再對(duì)得到的數(shù)據(jù)進(jìn)行清洗和預(yù)處理,包括:
(1) 去除重復(fù)出現(xiàn)的問(wèn)答對(duì)話(huà)。
(2) 去除過(guò)于簡(jiǎn)短和過(guò)于繁雜的問(wèn)答對(duì)話(huà),將對(duì)話(huà)句子的長(zhǎng)度控制在一定范圍之內(nèi)。
(3) 去除表情符號(hào)等干擾因素。
(4) 將網(wǎng)址用特殊符號(hào)LINK_ID代替。
(5) 將數(shù)字用特殊符號(hào)NUM_ID代替。
將建立的數(shù)據(jù)庫(kù)以1 000∶1的比例分為訓(xùn)練集和測(cè)試集兩部分,其中訓(xùn)練集用于訓(xùn)練對(duì)話(huà)模型,測(cè)試集用于驗(yàn)證對(duì)話(huà)模型的效果。為了作進(jìn)一步分析,對(duì)建立的中文對(duì)話(huà)數(shù)據(jù)庫(kù)進(jìn)行了統(tǒng)計(jì),統(tǒng)計(jì)結(jié)果如表2所示。
表2 數(shù)據(jù)庫(kù)統(tǒng)計(jì)信息
由表2可以看到,訓(xùn)練集和測(cè)試集中問(wèn)題與回答的最大句長(zhǎng)都為200,這是因?yàn)樵跀?shù)據(jù)預(yù)處理時(shí)去除了過(guò)于繁雜的問(wèn)答對(duì)話(huà),將問(wèn)題和回答的最大句長(zhǎng)控制在了200。而數(shù)據(jù)庫(kù)中回答的平均句長(zhǎng)要遠(yuǎn)大于問(wèn)題的平均句長(zhǎng),表示醫(yī)生的回答比患者的提問(wèn)要更加詳盡,包含的內(nèi)容更多。中文對(duì)話(huà)數(shù)據(jù)庫(kù)部分示例如表3所示。
表3 對(duì)話(huà)模型示例
為了使訓(xùn)練出的中文對(duì)話(huà)模型有更好的表現(xiàn),對(duì)模型的訓(xùn)練參數(shù)進(jìn)行了如下設(shè)置:
(1) 初始學(xué)習(xí)率設(shè)置為0.01,并且每遍歷一次訓(xùn)練集就將學(xué)習(xí)率降為原來(lái)的一半,整個(gè)訓(xùn)練過(guò)程共遍歷訓(xùn)練集10次(epoch)。
(2) 批處理數(shù)(batch_size)設(shè)置為256,即每批訓(xùn)練投入256個(gè)訓(xùn)練數(shù)據(jù)。
(3) 因?yàn)檫f歸神經(jīng)網(wǎng)絡(luò)存在梯度爆炸的問(wèn)題,所以對(duì)梯度g進(jìn)行了限制。計(jì)算s=‖g‖2,若s>5,則令g=5g/s。
本文在空間復(fù)雜度和時(shí)間復(fù)雜度上對(duì)模型進(jìn)行了分析。首先在空間復(fù)雜度上分析模型性能。分別以拼音、漢字和漢詞作為對(duì)話(huà)模型的輸入,計(jì)算模型在輸入層的參數(shù)數(shù)量。聲母、韻母和聲調(diào)共63個(gè),而在建立的中文對(duì)話(huà)數(shù)據(jù)庫(kù)中共6 521個(gè)漢字,392 071個(gè)漢詞,統(tǒng)一以64維的向量對(duì)每個(gè)輸入進(jìn)行表示,即embedding_size=64。則以拼音為輸入的模型在輸入層共有63×64個(gè)權(quán)值參數(shù)(weights),64個(gè)偏執(zhí)參數(shù)(bias)。同理可得到以漢字和漢詞為輸入的模型參數(shù)數(shù)量,如表4所示。
表4 不同輸入下輸入層參數(shù)數(shù)量
通過(guò)表4可以看到以拼音為輸入的模型在輸入層的參數(shù)數(shù)量遠(yuǎn)低于以漢字和漢詞為輸入的模型,說(shuō)明以拼音為輸入減小了模型的空間復(fù)雜度,在空間上優(yōu)化了模型。
其次,在時(shí)間復(fù)雜度上分析模型性能。取批處理數(shù)batch_size=16,在不同輸入下分別記錄訓(xùn)練每批數(shù)據(jù)所需要的時(shí)間,如表5所示(硬件條件為E5-2630 CPU和單張GTX Titan XP顯卡)。
表5 不同輸入下的批訓(xùn)練時(shí)間
由表5可以看到,以拼音為輸入的模型訓(xùn)練每批數(shù)據(jù)的時(shí)間要短于以漢字和漢詞為輸入的模型。這是因?yàn)槠匆糨斎刖哂懈〉囊?guī)模,所需的計(jì)算數(shù)量較少的緣故。
為了驗(yàn)證模型提取的拼音特征的有效性,在全卷積神經(jīng)網(wǎng)絡(luò)和雙向LSTM網(wǎng)絡(luò)組成的編碼器后面加入了一層全連接層(注: 該全連接層在最后端到端的對(duì)話(huà)模型中將被去除,以降低模型的時(shí)空開(kāi)銷(xiāo)),該全連接層以分類(lèi)的方式將拼音特征還原為漢字。即網(wǎng)絡(luò)的輸入為漢語(yǔ)拼音組成的句子,輸出為漢字組成的句子。如果網(wǎng)絡(luò)可以精確地將拼音還原為漢字,則說(shuō)明拼音特征包含了完整的漢字輸入信息。拼音還原漢字流程,如圖10所示。
圖10 拼音還原漢字流程
在拼音還原漢字實(shí)驗(yàn)中,將對(duì)話(huà)數(shù)據(jù)庫(kù)訓(xùn)練集3 253 268條問(wèn)答對(duì)中問(wèn)題的拼音表示和漢字表示作為模型的訓(xùn)練數(shù)據(jù),測(cè)試集3 256條問(wèn)答對(duì)中問(wèn)題的拼音表示和漢字表示作為模型的測(cè)試數(shù)據(jù)。實(shí)驗(yàn)中輸入為句子的拼音表示,輸出為句子的漢字表示。模型在訓(xùn)練集上的初始學(xué)習(xí)率為0.01,取batch_size=256,epoch=10對(duì)模型進(jìn)行訓(xùn)練。在測(cè)試集上將訓(xùn)練出的模型和其他開(kāi)源的拼音轉(zhuǎn)漢字算法進(jìn)行了比較,如表6所示。
表6 拼音轉(zhuǎn)漢字實(shí)驗(yàn)結(jié)果
表6中HMM為基于隱馬爾科夫模型的轉(zhuǎn)換算法,使用viterbi算法計(jì)算拼音輸入對(duì)應(yīng)的漢字輸出。DAG為基于有向無(wú)環(huán)圖的轉(zhuǎn)換算法,使用的是詞庫(kù)和動(dòng)態(tài)規(guī)劃的原理??梢钥吹?,相比于HMM和DAG算法,本文的模型算法在各個(gè)句長(zhǎng)分段上都有較好表現(xiàn),在測(cè)試數(shù)據(jù)集上拼音轉(zhuǎn)漢字的準(zhǔn)確率達(dá)到了96.8%。
同時(shí),采用主成分分析(PCA)方法將對(duì)話(huà)模型提取到的拼音特征降到2維,實(shí)現(xiàn)拼音特征的可視化,在空間上分析各個(gè)句子拼音特征的關(guān)系??梢暬钠匆籼卣?如圖11所示。
圖11 拼音特征可視化
由圖11可以看到,擁有相近病癥的句子的拼音特征在空間上較為接近,而擁有不同病癥的句子的拼音特征在空間上距離較遠(yuǎn)。說(shuō)明拼音特征可以有效區(qū)分句子中包含的病癥信息,這樣對(duì)話(huà)網(wǎng)絡(luò)利用拼音特征生成的輸出回答將準(zhǔn)確地與輸入問(wèn)題中的病癥信息對(duì)應(yīng)起來(lái),有利于提高對(duì)話(huà)模型輸出回答的質(zhì)量。
對(duì)話(huà)問(wèn)答是具有發(fā)散性的,相同的問(wèn)題可能有完全不同的答案。回答的適當(dāng)性、流暢性和相關(guān)性都會(huì)影響到對(duì)話(huà)模型的效果。如今基于深度學(xué)習(xí)的對(duì)話(huà)系統(tǒng)常用的評(píng)價(jià)指標(biāo)包括詞重疊指標(biāo)、詞向量指標(biāo)和困惑度指標(biāo)。本文采用BLEU和ROUGE_L評(píng)價(jià)指標(biāo)作為評(píng)價(jià)中文對(duì)話(huà)模型回答好壞的標(biāo)準(zhǔn)。BLEU評(píng)價(jià)指標(biāo)由IBM[14]在2002年提出,最初用于神經(jīng)機(jī)器翻譯(NMT)領(lǐng)域,近年來(lái)也被廣泛應(yīng)用于對(duì)話(huà)系統(tǒng)的性能評(píng)估。ROUGE_L在2004年由Chin-Yew提出,是一種利用最長(zhǎng)公共子序列求得回答好壞的方法,其計(jì)算如式(8)~式(10)所示。
其中,X為參考輸出,長(zhǎng)度為m。Y為模型生成輸出,長(zhǎng)度為n。R為召回率,表示為公共序列長(zhǎng)度與參考輸出長(zhǎng)度的比值。P為準(zhǔn)確率,表示為公共序列長(zhǎng)度與生成輸出長(zhǎng)度的比值。實(shí)驗(yàn)中考慮到要對(duì)話(huà)模型要綜合考慮召回率和準(zhǔn)確率,故計(jì)算ROULE_L時(shí)取β=1。對(duì)話(huà)模型測(cè)試結(jié)果如表7所示。
表7 對(duì)話(huà)模型評(píng)價(jià)
表7中Seq2Seq Model為基于漢字輸入的對(duì)話(huà)模型,Pinyin Model為本文提出的基于拼音輸入的對(duì)話(huà)模型。以拼音為輸入的模型分為了無(wú)調(diào)拼音模型和有調(diào)拼音模型兩種,無(wú)調(diào)拼音模型即輸入的拼音不包含聲調(diào)信息,有調(diào)拼音模型即輸入的拼音包含了聲調(diào)信息。Pinyin Model使用貪婪搜索(Greedy)、采樣搜索(Sample)和集束搜索(Beam Search)三種搜索策略在測(cè)試集上進(jìn)行了對(duì)比。在采用有調(diào)拼音輸入,Beam Search搜索策略,詞表大小(beam size)為9時(shí),取得了最好的效果。
圖12是以BLEU為指標(biāo)在不同句長(zhǎng)下對(duì)中文對(duì)話(huà)模型的測(cè)試結(jié)果??梢钥吹?,采樣搜索策略和集束搜索策略整體都優(yōu)于貪婪搜索策略。這是因?yàn)樨澙匪阉鞑呗灾贿x擇當(dāng)前時(shí)刻的最優(yōu)匹配而沒(méi)有考慮一段時(shí)間內(nèi)的最佳答案,所以導(dǎo)致BLEU得分較低。而采樣搜索對(duì)于句長(zhǎng)大于150的句子表現(xiàn)較好,總體上集束搜索表現(xiàn)最優(yōu)。對(duì)話(huà)模型的具體示例如表3所示。
圖12 對(duì)話(huà)模型在不同句長(zhǎng)下的測(cè)試結(jié)果
本文利用漢字可用漢語(yǔ)拼音表述這一特點(diǎn),提出了一種利用全卷積神經(jīng)網(wǎng)絡(luò)和雙向LSTM網(wǎng)絡(luò)提取中文對(duì)話(huà)模型拼音特征的方法,該方法減少了對(duì)話(huà)模型的輸入維數(shù),降低了模型的時(shí)空開(kāi)銷(xiāo)。在此基礎(chǔ)上,采用4層GRU網(wǎng)絡(luò)結(jié)合注意力機(jī)制對(duì)拼音特征進(jìn)行解碼以解決普通RNN網(wǎng)絡(luò)無(wú)法記憶長(zhǎng)時(shí)間信息的問(wèn)題,得到中文對(duì)話(huà)系統(tǒng)的輸出。最后,建立了用于醫(yī)療領(lǐng)域的對(duì)話(huà)數(shù)據(jù)庫(kù)并在該數(shù)據(jù)庫(kù)上采用BLEU和ROUGE_L作為評(píng)價(jià)指標(biāo)進(jìn)行了實(shí)驗(yàn)與對(duì)比,取得了很好的效果。