朱若塵,楊長春,張登輝
(1.常州大學(xué) 計算機(jī)與人工智能學(xué)院,江蘇 常州 213159;2.浙江樹人大學(xué) 信息科技學(xué)院,浙江 杭州 310015)
任務(wù)型對話系統(tǒng)依靠對話狀態(tài)追蹤(dialog state trac-king,DST)預(yù)測并監(jiān)控用戶語句中的目標(biāo)(即對話狀態(tài)),然后使用對話策略模塊接收對話狀態(tài)以生成系統(tǒng)回復(fù),從而完成一輪任務(wù)型對話。因此DST屬于任務(wù)型對話系統(tǒng)中一個至關(guān)重要的模塊。
近年來,研究人員提出了大量的DST模型,其中主要包括基于本體(ontology-based)的方法和無本體的(ontology-free)方法[1]。前者[2-4]假定候選槽值(candidate values)已知,然后將DST簡化為分類任務(wù),這隱式地解決了詞匯多樣性現(xiàn)象。例如,對于語義相同的表達(dá)“high end”和“pricey”,分類結(jié)果只能是“expensive”。后者[5-7]假定候選槽值不可知,然后使用指針神經(jīng)網(wǎng)絡(luò)[8,9](Pointer Network)直接從用戶表達(dá)中抽取槽值,這緩解了未知值現(xiàn)象。例如,對于無窮的日期或者周期性增加的音樂名稱,它們不可預(yù)先定義,只能由用戶提供。近期還有工作[10,11]處理了值共享和推薦接受的現(xiàn)象。
雖然這些模型都具有不錯的表現(xiàn),但是它們沒有同時考慮到以上4種現(xiàn)象。此外,它們也沒有考慮到這些對話現(xiàn)象在數(shù)據(jù)集中分布不平衡的問題。因此,本文提出了一種基于模式引導(dǎo)和焦點損失的對話狀態(tài)追蹤算法。該算法能夠全面地處理這4種現(xiàn)象,能夠利用焦點損失函數(shù)[12]保證難樣本得到充分訓(xùn)練,以此緩解數(shù)據(jù)不平衡的問題。
以往基于數(shù)據(jù)驅(qū)動的DST模型[2-4]大多依賴一個預(yù)定義的本體(ontology),其中包含所有槽位(slot)及其對應(yīng)的候選槽值(candidate values),然后將DST簡化為分類任務(wù)。分類模型相對容易實現(xiàn)并且能夠處理詞匯多樣性現(xiàn)象,這是因為對于語義相同的表達(dá),分類模型能夠根據(jù)對話歷史生成一個唯一且固定的值。然而在真實場景中,許多槽值是不可枚舉的,例如預(yù)定日期、酒店名稱、出租車目的地等,它們無法預(yù)先定義,只能由用戶提供。
為解決上述問題,Xu等[5]舍棄了本體并且首次引入了指針神經(jīng)網(wǎng)絡(luò)[8,9],從上下文中直接抽取槽值。具體來說,指針神經(jīng)網(wǎng)絡(luò)將對話歷史作為輸入,然后得到兩個基于對話歷史的概率分布,最后分別取最大值就能夠得到起始位置和終止位置,即跨度(span)。跨度之內(nèi)的字符串就是槽值。后續(xù)的許多工作[6,7,10,11]都繼承了這種思想。
綜上所述,根據(jù)是否使用本體,DST可以被劃分為基于本體(ontology-based)的方法和無本體的(ontology-free)方法。當(dāng)槽位可分類(categorical)時,基于本體的方法更具有優(yōu)勢;當(dāng)槽位不可分類(non-categorical)時,無本體的方法更具有優(yōu)勢。基于上述想法,有些工作開始使用混合方法[1,13]建模DST。然而,如何決定槽位是否可分類仍是一個難點。為此,Rastogi等[13]提議在構(gòu)建模型之前應(yīng)該預(yù)先分類槽位,并提出一種模式(schema)。模式?jīng)Q定了槽位是否可分類,例如當(dāng)候選槽值的數(shù)量小于50時,槽位被視為可分類,否則被視為不可分類。
雖然無本體的方法能夠初步處理未知值現(xiàn)象,但是還有兩種更含蓄的現(xiàn)象沒被考慮到,即值共享和推薦接受。可分類槽位和不可分類槽位上都可能產(chǎn)生這兩種現(xiàn)象。
值共享現(xiàn)象指的是兩個槽位共享同一個槽值,例如槽位“hotel-name”和“text-destination”的值都是“Gonville Hotel”。假設(shè)用戶在多輪對話之前已經(jīng)提及“Gonville Hotel”,當(dāng)他預(yù)定出租車前往該酒店時,可能不會表達(dá)酒店的全稱,而是使用代詞。以往的模型很難應(yīng)對這種現(xiàn)象,Ouyang 等[10]利用前一輪的對話狀態(tài)首次處理了該難題。推薦接受現(xiàn)象表現(xiàn)得更含蓄。當(dāng)系統(tǒng)向用戶推薦一些餐廳、酒店或旅游景點時,用戶可能會表達(dá)諸如“Yes”、“That sounds nice”等接受語句。為了處理推薦接受現(xiàn)象,Heck等[11]將系統(tǒng)的所有推薦儲存在推薦內(nèi)存中。在預(yù)測時,DST模型將直接從推薦內(nèi)存中拷貝槽值。
圖1展示了4種不同現(xiàn)象。為了選擇合適的方法處理對應(yīng)的現(xiàn)象,與以往做法類似,我們應(yīng)用了槽位門控機(jī)制[6]。模型的總體結(jié)構(gòu)如圖2所示,其目標(biāo)是:在每輪根據(jù)對話歷史,利用槽位門控機(jī)制選擇合適的方法生成所有槽位(slot)的槽值(value),最終得到對話狀態(tài)。一般來說,對話狀態(tài)中絕大部分槽值都是none,其表示用戶在對話中沒有提到對應(yīng)槽位。這是因為系統(tǒng)中包含大量的槽位,用戶幾乎不可能在一場對話中全部提到它們。

圖1 任務(wù)型對話中的4種不同現(xiàn)象
本文定義對話歷史X={(USR1,SYS1),(USR2,SYS2),…,(USRT)}, 其中USRt代表t輪時用戶的輸入,SYSt代表t輪時系統(tǒng)的回復(fù),T代表對話總輪數(shù)。定義槽位集合s={si}(1≤i≤S), 其中S代表槽位總數(shù)。假設(shè)可分類槽位數(shù)量為C,不可分類槽位數(shù)量為N,則S=C+N。以下分別介紹模型的編碼器、槽位門控機(jī)制、4種槽值生成機(jī)制和優(yōu)化目標(biāo)。
本文使用長短期記憶網(wǎng)絡(luò)(long short-term Memory,LSTM)捕獲上下文特征。每個LSTM單元的計算公式如下
ut=σ(Wu·[at-1,xt]+bu)
ft=σ(Wf·[at-1,xt]+bf)
gt=tanh(Wg·[at-1,xt]+bg)
mt=ft⊙mt-1+ut⊙gt
ot=σ(Wo·[at-1,xt]+bo)
at=ot⊙tanh(mt)
(1)

圖2 本文提出的對話狀態(tài)追蹤模型結(jié)構(gòu)
其中,⊙是哈達(dá)瑪積(Hadamard product),σ是sigmoid函數(shù)。ut,ft,ot分別是更新門,遺忘門和輸出門。W和b分別是權(quán)重矩陣和偏差項。mt是記憶(memory)。在t輪時,給定上下文Xt和初始激活值a0,通過LSTM就能夠得到上下文表征Rt。
本文使用Rastogi等[13]提出的模式(schema),其包含槽位的自然語言描述,以此期望能夠加強(qiáng)槽位的表征能力。例如,對于槽位“hotel-area”,它的描述是“area or place of the hotel”。此外,它還明確地劃分槽位是否可分類。本文嘗試了3種槽位編碼方式,在消融實驗中將分別展示它們的表現(xiàn)。3種方式分別為:①隨機(jī)初始化槽位表征,然后在訓(xùn)練過程中進(jìn)行更新。②在多領(lǐng)域場景下,槽位一般被表示為“domain-slot”,例如“hotel-area”。本文以“-”為界對槽位進(jìn)行切分,然后將領(lǐng)域(domain)和槽位(slot)的詞向量相加并視其為槽位表征。③將槽位描述輸入進(jìn)一個額外的LSTM,得到句子表征,取最后一個時間步的輸出作為槽位表征。本文將以上3種槽位表征形式記為slot1,slot2和slot3。
本文定義5種槽位類別G={none,dontcare,inform,gen,refer}, 其中,前兩種是兩個特殊例子,none代表用戶沒有提及對應(yīng)槽位,dontcare指的是用戶沒有偏好,它們將直接被用于填充槽位。當(dāng)槽位類別是inform時,模型需要處理推薦接受現(xiàn)象。gen代表需要分別處理詞匯多樣性和未知值兩種現(xiàn)象;refer代表模型需要處理值共享現(xiàn)象。

(2)
(3)

(4)
其中,Wattn∈H×H和Wgate∈H×5為可訓(xùn)練權(quán)重,H代表特征向量的維度。本文使用交叉熵?fù)p失函數(shù)優(yōu)化損失值,記為Lgate。
如圖1所示,系統(tǒng)向用戶推薦了“Curry Garden”,該槽值由系統(tǒng)直接生成。我們將對話過程中系統(tǒng)所做的所有推薦都存儲在推薦內(nèi)存(recommendation memory)中。當(dāng)槽位門控機(jī)制的預(yù)測結(jié)果是inform時,例如槽位“hotel-name”屬于inform類別,模型就從推薦內(nèi)存中匹配同名的槽位。如果匹配成功,就直接拷貝槽值。如果沒有槽位被匹配到,就填充none。
本文進(jìn)一步定義gen={classify,span}, 當(dāng)槽位類別為classify時,模型需要處理詞匯多樣性現(xiàn)象;當(dāng)槽位類別為span時,模型需要處理未知值現(xiàn)象。兩種現(xiàn)象分別對應(yīng)于槽位是否可分類。
對于可分類槽位s’={sj}(1≤j≤C), 本文嘗試了兩種槽值生成策略。第一種為每個可分類槽位配備基于候選集Vj={v1,…,vl} 的多元分類器,其中l(wèi)代表第j個槽位的候選槽值數(shù)量;第二種將所有候選集Vj合并為總候選集V={v1,…,vL}, 然后為每個槽位配備基于總候選集的多元分類器,其中L代表總候選集中的槽值數(shù)量。本文將兩種策略分別記為cls1和cls2。上述兩種生成策略的輸出是在候選集上的概率分布,滿足式(5)和式(6)

(5)

(6)

對于不可分類槽位s*={sk}(1≤k≤N), 本文使用指針神經(jīng)網(wǎng)絡(luò)填充槽值。在t輪時,使槽位sk與對話歷史進(jìn)行交互,從而得到用于計算跨度(span)的起始向量αt,k和終止向量βt,k。 數(shù)學(xué)公式表示如式(7)所示
[αt,k,βt,k]=Rt·relu(sk·Wspan)
(7)

(8)

(9)
其中,Wspan∈H×2H為可訓(xùn)練權(quán)重, |Xt| 代表對話歷史的長度。和是兩個基于上下文的概率分布,滿足式(8)~式(9),取其最大值就可以得到起始位置和終止位置,即跨度。在用戶語句中,處于該跨度內(nèi)的字符串就是槽值。本文定義不可分類槽位的損失值為起始損失值以及終止損失值之和: Lspan=Lstart+Lend, 并使用交叉熵?fù)p失函數(shù)對其優(yōu)化。
如圖1所示,真實場景中可能會出現(xiàn)復(fù)雜的值共享現(xiàn)象。在這種情況下,兩個槽位的值可以被視為相等。本文利用一個S+1元分類器預(yù)測所有可能的槽位,以此建立兩個槽位之間的關(guān)聯(lián),其中1代表特殊符號none。處理過程如圖3所示,公式為

(10)


圖3 值共享處理過程
在訓(xùn)練階段優(yōu)化所有損失值之和,最終的損失值如式(11)所示
L=Lgate+Lclassify+Lspan+Lrefer
(11)
此外,通過對數(shù)據(jù)集的調(diào)查分析,發(fā)現(xiàn)槽位類別的分布極不平衡,見表1,為此引入焦點損失(focal loss)函數(shù)[12],計算如式(12)所示

(12)
在類別不平衡的情況下,易分類樣主導(dǎo)了梯度并且其損失值占據(jù)總損失值的大部分比例。焦點損失函數(shù)[12]為交叉熵函數(shù)增加一項調(diào)整因子 (1-pi)γ, 其中pi為類別i的概率。當(dāng)易分類樣本的概率pi趨向于1時,調(diào)整因子趨向于0,這顯著地減少了易分類樣本損失值的占比,使得模型更偏重對難分類樣本的優(yōu)化。γ是可調(diào)整超參數(shù),原論文發(fā)現(xiàn)γ=2在其實驗中效果最好,本文沿用該設(shè)置。
本文實驗基于MultiWOZ 2.2[14],其橫跨8個領(lǐng)域且擁有超過10 000條標(biāo)注對話。數(shù)據(jù)集提供者在MultiWOZ 2.1上識別并修正了17.3%的對話狀態(tài)標(biāo)注錯誤,同時使用SGD(the schema-guided dialog dataset)[13]的任務(wù)導(dǎo)向?qū)υ捘J街匦露x了本體,將槽位分為可分類以及不可分類兩種類別。對于指代問題,還提供了copy_from標(biāo)簽,它代表一個槽位的槽值來源于另一個槽位。
MultiWOZ 2.2數(shù)據(jù)集不再為不可分類槽位提供候選值,例如酒店名稱、火車出發(fā)時間等。為了使模型能夠處理不可分類槽位,Zang等[14]引入了跨度(span)標(biāo)簽。以往研究人員通常會使用字符串在用戶語句中探測它的跨度,這種做法會增加數(shù)據(jù)處理的成本,也會引入額外的誤差。
為了與基線模型進(jìn)行客觀公平的對比,遵循以往工作,本次實驗只選擇5個領(lǐng)域(hotel,train,restaurant,attraction,taxi)[6]。這是因為其余領(lǐng)域只具有少量對話,并且只出現(xiàn)在訓(xùn)練集中。
由于計算設(shè)備內(nèi)存(12 G)的限制,本次實驗使用雙向雙層的LSTM,詞向量以及隱藏狀態(tài)的維度均設(shè)置為300,其中詞向量以GloVe向量初始化;使用Adam優(yōu)化器,批次大小設(shè)置為16,學(xué)習(xí)率設(shè)置為8E-4;使用聯(lián)合目標(biāo)準(zhǔn)確率(joint goal accuracy,JGA)評價模型性能,其計算流程為:在每輪對話中,當(dāng)且僅當(dāng)預(yù)測的對話狀態(tài)和真實的對話狀態(tài)完全相同時,才被認(rèn)為預(yù)測正確。


表2 MultiWOZ2.2上各模型JGA的對比
SGD-baseline[13]將所有槽位分為可分類和不可分類兩種,然后為每個可分類槽位執(zhí)行判別式方法,為每個不可分類槽位生成起始位置和終止位置。TRADE[6]將DST視為一個序列到序列任務(wù),要么從預(yù)定義的詞表中生成槽值,要么從對話歷史中生成。SUMBT[3]使用多頭注意力機(jī)制得到基于上下文的槽位表征,然后計算該表征和每個候選槽值之間的距離。DS-DST[1]類似于SGD-baseline,不同的是它將槽位和上下文一起編碼。然后,它將[CLS]位置上的輸出作為槽位表征,這意味著它需要單獨地處理每個槽位。Seq2Seq-DU[7]類似于TRADE,不同的是它直接生成對話狀態(tài)序列,而不是槽值,其中字符要么來自當(dāng)前輪對話,要么來自模式。STAR[4]使用slot self-attention 捕獲槽位之間的相關(guān)性,然后計算槽位與每個候選槽值之間的歐氏距離。
從表2可以看出我們模型的性能高于其余所有模型。模型的優(yōu)勢可能來源于兩個方面:①本文對槽位類別進(jìn)行嚴(yán)格劃分,模型能夠選擇合適的方法處理對應(yīng)現(xiàn)象并生成槽值;②焦點損失函數(shù)偏重訓(xùn)練難樣本,能夠提升槽位門控機(jī)制的預(yù)測能力。然而,焦點損失函數(shù)的有效性需要通過消融實驗進(jìn)一步驗證。
為了對比實驗中各項技術(shù)的區(qū)別,我們執(zhí)行了一系列的消融實驗,結(jié)果見表3。括號中的內(nèi)容代表模型使用了不同的槽位表征形式或者不同的槽值生成策略,“+”代表在基礎(chǔ)模型上增加一個算法。為了盡可能公平地進(jìn)行對比,實驗固定大部分超參數(shù),只調(diào)整學(xué)習(xí)率大小,其取值范圍為[0.0008,0.001]。
從表3可以看出,第三種槽位表征初始化方式(slot3)具有最優(yōu)的表現(xiàn),提升因素可能來源于LSTM捕獲到了槽位描述的語義信息,從而獲得更優(yōu)質(zhì)的表征。對于兩種槽值生成策略,它們只具有微妙的差別,分別得到53.3%和53.0%的聯(lián)合目標(biāo)準(zhǔn)確率。但是第二種槽值生成策略(cls2)

表3 消融實驗中各聯(lián)合目標(biāo)準(zhǔn)確率對比
可以減少模型參數(shù)數(shù)量,同時借助只有一個分類器的優(yōu)勢,可以實現(xiàn)向量化計算從而提升模型的訓(xùn)練速度。此外,在引入焦點損失函數(shù)之后,模型的表現(xiàn)確實能夠得到一定的提升。
為了驗證焦點損失函數(shù)對槽位門控機(jī)制有所幫助,表4展示了兩種損失函數(shù)的結(jié)果對比,其中還提供了各槽位類別的占比(來自表1)。從表中可以看出各類別的F1值都得到了一定程度的提升,尤其是占比較少的類別提升了2%~4%。該結(jié)果驗證了焦點損失函數(shù)對難分類樣本確實有所幫助。

表4 槽位門控機(jī)制在各類別上F1 值的對比
本文提出一種基于模式引導(dǎo)和焦點損失的對話狀態(tài)追蹤算法,其覆蓋任務(wù)型對話中的多種語言現(xiàn)象,包括詞匯多樣性、未知值、值共享和推薦接受。在MultiWOZ 2.2數(shù)據(jù)集上的實驗結(jié)果表明,本文提出的模型超過STAR模型1.2%的聯(lián)合目標(biāo)準(zhǔn)確率。此外,通過引入焦點損失函數(shù),還提高了槽位門控機(jī)制預(yù)測槽位類別的能力。下一步研究工作將考慮移除槽位門控機(jī)制進(jìn)一步緩解槽位類別不平衡的問題,同時還考慮探究系統(tǒng)推薦誤差對模型表現(xiàn)的影響。