張志昌,于沛霖,龐雅麗,朱 林,曾揚揚
(西北師范大學(xué)計算機科學(xué)與工程學(xué)院,甘肅蘭州 730070)
隨著各種智能設(shè)備的快速發(fā)展,人機對話近年來引起了學(xué)術(shù)界和產(chǎn)業(yè)界的廣泛關(guān)注.任務(wù)型對話系統(tǒng)相關(guān)技術(shù)已經(jīng)在許多產(chǎn)品中得到運用,例如微軟公司的“小娜”(Cortana),蘋果公司的智能語音助手“Siri”等.在任務(wù)型對話系統(tǒng)中,對話狀態(tài)跟蹤(Dialogue State Tracking,DST)是一個重要模塊,該模塊的主要目標(biāo)是追蹤用戶意圖并構(gòu)建對話狀態(tài)集合,集合由多個結(jié)構(gòu)化的“領(lǐng)域-槽位-值”三元組構(gòu)成.表1展示了一個對話狀態(tài)跟蹤任務(wù)示例,對于用戶輸入的話語,對話狀態(tài)跟蹤模型需要識別出句子的對話狀態(tài)(例如“酒店-房間類型-標(biāo)準(zhǔn)間”).正確識別對話狀態(tài)對任務(wù)型對話系統(tǒng)非常重要.
表1 對話狀態(tài)跟蹤任務(wù)示例
傳統(tǒng)的靜態(tài)對話狀態(tài)跟蹤模型僅依賴當(dāng)前輪用戶輸入的話語[1~4].這類方法忽略了對話歷史和當(dāng)前對話的關(guān)系.在多輪對話中,經(jīng)常需要利用歷史對話中的信息來幫助理解用戶當(dāng)前的意圖,所以歷史敏感的對話狀態(tài)跟蹤模型成了主流研究方向[5~8].其中多數(shù)研究都選擇通過對歷史文本進行編碼來引入上文信息,而文獻[9~11]等研究表明,對歷史時刻生成的對話狀態(tài)進行編碼會更有效.與對話文本不同的是,對話狀態(tài)本身具有結(jié)構(gòu)性,文獻[9]就利用這種結(jié)構(gòu)建立模式圖來幫助模型進行特征交互.但是,過去的研究沒有顯式利用對話狀態(tài)的結(jié)構(gòu),只是通過注意力機制中特征的連接來模擬模式圖,這種方法忽略了圖結(jié)構(gòu)中結(jié)點自身包含的信息.
另外,隨著對話系統(tǒng)的復(fù)雜度逐漸提升,如何生成復(fù)雜格式的對話狀態(tài)也成了一個研究的熱點.傳統(tǒng)方法是使用序列標(biāo)注生成對話狀態(tài)[12],該方法在其他自然語言處理研究中得到了廣泛的運用[13,14].但是這種方法無法應(yīng)對復(fù)雜場景下的要求.例如,某些槽位對應(yīng)的值僅出現(xiàn)在歷史對話中,或者槽位并不對應(yīng)某個具體的值而是對應(yīng)“是”或“否”(例如在預(yù)定酒店場景中,可能會出現(xiàn)“酒店-停車位-否”這類對話狀態(tài)).已有研究提出多種方法使模型可以生成復(fù)雜格式的對話狀態(tài).例如文獻[7,10]等通過預(yù)測4 種離散的運算狀態(tài)來決定對槽位執(zhí)行何種操作,文獻[15]提出通過編碼器-解碼器模型(Seq2Seq)將狀態(tài)預(yù)測轉(zhuǎn)化為生成式任務(wù).這些方法會為模型帶來額外的計算負(fù)擔(dān),并且需要針對不同的對話狀態(tài)調(diào)整生成規(guī)則,可擴展性差.
針對上述問題,本文提出了一種狀態(tài)記憶圖網(wǎng)絡(luò)(State Memory Graph Network,SMGN).在對話開始時,模型枚舉所有可能出現(xiàn)的“領(lǐng)域-槽位”關(guān)系對,通過編碼器進行編碼生成槽結(jié)點,再使用槽結(jié)點與對話文本生成的值結(jié)點進行特征交互,通過兩類結(jié)點連接形成狀態(tài)記憶圖.圖1展示了表1樣例對應(yīng)的狀態(tài)記憶圖.
圖1 狀態(tài)記憶圖示例
在狀態(tài)記憶圖中,槽結(jié)點與值結(jié)點相連的邊對應(yīng)一條對話狀態(tài),整個狀態(tài)記憶圖對應(yīng)對話狀態(tài)集合.模型會使用狀態(tài)記憶圖與當(dāng)前對話進行特征交互并更新對話狀態(tài)集合,之后通過圖注意力網(wǎng)絡(luò)(Graph Attention neTwork,GAT)[16]對狀態(tài)記憶圖進行更新.此外,本文通過值結(jié)點標(biāo)記器和圖連接層實現(xiàn)了一個新的對話狀態(tài)生成方法,首先通過值結(jié)點標(biāo)記器為當(dāng)前對話生成值結(jié)點,之后通過判斷槽結(jié)點與值結(jié)點是否連接來生成對話狀態(tài).由于狀態(tài)記憶圖會保留歷史對話產(chǎn)生的值結(jié)點,語義槽可以和歷史文本中的值構(gòu)建對話狀態(tài).通過預(yù)生成公共值結(jié)點,模型也可以生成類似“是”或“否”的特殊類型值,這使得本文的模型可以生成復(fù)雜格式的對話狀態(tài),并且具有很強的擴展性.
為了驗證模型的有效性,本文在3個公開的任務(wù)型對話數(shù)據(jù)集(中文數(shù)據(jù)集CrossWOZ[17],英文數(shù)據(jù)集MultiWOZ 2.0[18]及MultiWOZ 2.1[19])上進行了實驗.實驗結(jié)果表明,本文提出的模型在3個數(shù)據(jù)集上的聯(lián)合正確率分別為37.47%,53.03%和54.88%.實驗分析表明了本文的模型可以有效提升對話狀態(tài)跟蹤任務(wù)的性能.相比其他模型,本文模型對歷史對話的語義理解能力更強.另外該模型比其他同類模型的運算效率更高.
本文的主要貢獻如下:
(1)提出了一種顯式利用圖結(jié)構(gòu)的狀態(tài)記憶圖網(wǎng)絡(luò),通過狀態(tài)記憶圖與當(dāng)前對話進行特征交互,可以更有效地捕獲對話狀態(tài)的語義信息;
(2)針對復(fù)雜結(jié)構(gòu)對話狀態(tài)生成困難的問題,本文實現(xiàn)了一個基于狀態(tài)記憶圖的復(fù)雜對話狀態(tài)生成方法,通過這種方法模型可以應(yīng)對各種復(fù)雜格式的對話狀態(tài)生成要求;
(3)在3 個公開的多輪對話數(shù)據(jù)集上進行了對比實驗,實驗結(jié)果表明本文方法可以有效提高對話狀態(tài)跟蹤任務(wù)的聯(lián)合正確率,與同類模型相比運算效率更高.
本文提出的狀態(tài)記憶圖網(wǎng)絡(luò)模型結(jié)構(gòu)如圖2所示.狀態(tài)記憶圖網(wǎng)絡(luò)由編碼層、值結(jié)點標(biāo)記器、圖連接層以及圖更新層4部分組成.
圖2 狀態(tài)記憶圖網(wǎng)絡(luò)模型結(jié)構(gòu)圖
針對任意一個多輪對話,t時刻的對話歷史文本X可以表示為
其中,Ri表示系統(tǒng)在第i輪生成的回復(fù),Ui表示用戶在第i輪(或者i時刻)輸入的話語.t-1 時刻的對話狀態(tài)集合可以表示為,其中,dj表示領(lǐng)域,sj表示槽位,vj表示槽位對應(yīng)的值,J表示對話狀態(tài)總數(shù).
雖然不同對話系統(tǒng)間的對話狀態(tài)格式有所區(qū)別,但都能通過規(guī)則轉(zhuǎn)化為“領(lǐng)域-槽位-值”結(jié)構(gòu)的三元組.例如某些對話系統(tǒng)需要預(yù)測意圖,此時只需要將“意圖”槽位對應(yīng)值設(shè)為“空”即可(形如“領(lǐng)域-意圖-null”).對話狀態(tài)跟蹤任務(wù)的目標(biāo)是給定對話歷史X和歷史狀態(tài)集合St-1,根據(jù)用戶t時刻的輸入Ut預(yù)測對話狀態(tài)集合St.
在編碼層中,模型分別進行槽結(jié)點編碼以及輸入編碼,兩部分編碼任務(wù)共享同一個編碼器.
槽結(jié)點編碼:在對話開始時,模型通過枚舉列出所有可能出現(xiàn)的“領(lǐng)域-槽位”關(guān)系對,并且為每個關(guān)系對編碼生成一個槽結(jié)點.本文使用BERT(Bidirectional Encoder Representation from Transformers)作為編碼器.BERT 是一種大規(guī)模預(yù)訓(xùn)練語言模型[18],具有強大的通用上下文語意表示能力,已在其他自然語言處理任務(wù)中得到充分運用[19].槽結(jié)點的具體編碼計算方式如下:
其中,[CLS]和[SEP]為BERT 編碼器預(yù)先設(shè)定的標(biāo)記符,⊕表示拼接操作,dj表示第j個領(lǐng)域,sjk表示第j個領(lǐng)域下對應(yīng)的第k個語義槽.BERTft表示在訓(xùn)練期間將對BERT 進行微調(diào)(fine-tune).編碼后模型截取標(biāo)識符[CLS]對應(yīng)的上下文向量作為結(jié)點的整體表示ni.
通過槽結(jié)點編碼,模型獲得了一系列槽結(jié)點構(gòu)成的集合N={n1,n2,…,nJ}.需要說明的是,槽結(jié)點編碼過程并不受對話內(nèi)容影響,槽結(jié)點的個數(shù)只與對話系統(tǒng)所支持的領(lǐng)域與槽位有關(guān).
輸入編碼:在t時刻,模型將系統(tǒng)回復(fù)Rt及用戶輸入Ut進行拼接并通過BERT 進行編碼,具體計算方式如下:
在獲得用戶輸入Ut對應(yīng)的上下文向量后,模型通過值結(jié)點標(biāo)記器提取值結(jié)點.值結(jié)點標(biāo)記器會進行一個簡單的序列標(biāo)注任務(wù),為每個上下文向量標(biāo)注一個邊界標(biāo)簽來劃分出實體邊界.本文采用BIO((B-begin,I-inside,O-outside))標(biāo)注方法,標(biāo)注方法的具體細(xì)節(jié)可以參考文獻[12].在標(biāo)注任務(wù)中,模型只判斷實體的邊界而不進行實體分類.在標(biāo)注結(jié)束后,模型對同一實體內(nèi)的上下文向量進行平均池化,再與當(dāng)前時刻的句向量拼接獲得值結(jié)點.具體計算方式為
經(jīng)過值結(jié)點標(biāo)記器后,模型將當(dāng)前時刻的值結(jié)點添加到狀態(tài)記憶圖中,并對每一對“槽結(jié)點-值結(jié)點”進行分類,判斷兩個結(jié)點之間是否有邊,從而構(gòu)建連接關(guān)系.圖連接層的具體計算方式為
在圖更新層中,模型將根據(jù)狀態(tài)記憶圖的連接關(guān)系對結(jié)點進行更新.除了保留圖連接層的信息外,模型還為相似的槽結(jié)點添加連接.具體方法是,如果兩個槽結(jié)點具有相同的領(lǐng)域或者槽位,則為這一對結(jié)點添加一條邊.完成連接后,模型得到了t時刻狀態(tài)記憶圖對應(yīng)的鄰接矩陣At,之后將使用該鄰接矩陣對狀態(tài)記憶圖進行更新.
經(jīng)過圖注意力網(wǎng)絡(luò)后,狀態(tài)記憶圖中的結(jié)點信息將被更新,在t+1 時刻被傳送至圖連接層,為新一輪對話帶來歷史信息.
整個網(wǎng)絡(luò)的損失由值結(jié)點標(biāo)記損失和狀態(tài)分類損失兩部分組成.兩部分損失都通過交叉熵?fù)p失函數(shù)(cross entropy loss)[20]計算得到,具體計算方式如下:
其中,Lv是值結(jié)點標(biāo)記損失,LN是狀態(tài)分類損失,α1和α2是通過開發(fā)集結(jié)果微調(diào)的超參數(shù).
本文在3 個公開數(shù)據(jù)集CrossWOZ,MultiWOZ 2.0和MultiWOZ 2.1 上進行實驗.CrossWOZ[17]是一個大規(guī)??珙I(lǐng)域中文任務(wù)導(dǎo)向?qū)υ挃?shù)據(jù)集,包含6 000 余輪對話和102 萬句話語,涉及5 種領(lǐng)域、72 種槽位、7 000 余種槽位值,每個對話平均涉及3.2 種領(lǐng)域.MultiWOZ 2.0[18]是英文多領(lǐng)域?qū)υ挃?shù)據(jù)集,包含7種領(lǐng)域、25種槽位、4 500余種槽位值.為了對比的公平性,本文效仿文獻[5]丟棄兩個數(shù)量過少且僅出現(xiàn)在訓(xùn)練集的領(lǐng)域數(shù)據(jù).MultiWOZ 2.1[19]是對2.0 版本數(shù)據(jù)集的修正版本.表2為3個數(shù)據(jù)集的具體信息統(tǒng)計.
表2 數(shù)據(jù)集信息統(tǒng)計
針對CrossWOZ 數(shù)據(jù)集,本文采用文獻[23]發(fā)布的BERT-WWM 版本作為預(yù)訓(xùn)練模型;針對MultiWOZ 2.0及MultiWOZ 2.1數(shù)據(jù)集,模型使用Google發(fā)布的BERTlarge-uncased[20]版本.模型初始學(xué)習(xí)率設(shè)為5e-5,學(xué)習(xí)率熱身系數(shù)設(shè)為0.1,即在前10%的訓(xùn)練中,學(xué)習(xí)率從0遞增至預(yù)設(shè)值,并在之后線性衰減.模型的優(yōu)化算法使用Adam[24].其他參數(shù)通過對比開發(fā)集的實驗結(jié)果來確定.模型批處理大小設(shè)置為32,在Tesla P40 GPU 上訓(xùn)練迭代100 個周期,當(dāng)連續(xù)10 個周期損失沒有降低時訓(xùn)練過程會提前終止.本文平均了多個隨機種子下的實驗結(jié)果,用以減少統(tǒng)計誤差.
表3和表4 分別給出了在中文數(shù)據(jù)集CrossWOZ和英文數(shù)據(jù)集MultiWOZ 上的實驗結(jié)果.針對CrossWOZ數(shù)據(jù)集,本文與文獻[15]提供的TRADE 模型進行性能比較.CrossWOZ 數(shù)據(jù)集的特點是大量對話發(fā)生在跨領(lǐng)域場景中,而跨領(lǐng)域或多領(lǐng)域場景會為模型帶來更大的噪音,影響模型預(yù)測.表中S 表示單一領(lǐng)域;M表示多領(lǐng)域但是領(lǐng)域內(nèi)信息并不發(fā)生交叉;M+T 表示多領(lǐng)域并且與交通領(lǐng)域相關(guān);CM 表示跨領(lǐng)域,即領(lǐng)域內(nèi)信息會發(fā)生交叉,多個槽位可能指向同一實體;CM+T 表示跨領(lǐng)域并且與交通領(lǐng)域相關(guān).本文的模型與TRADE 模型相比在S 場景下聯(lián)合正確率提升了0.97%,在M 場景下提升了1.47%,在M+T 場景下提升了1.27%,在CM 場景下提升了2.15%,在CM+T 場景下提升了2.09%,總體提升了1.39%.可以看出SMGN 模型在多領(lǐng)域和跨領(lǐng)域等復(fù)雜場景下性能提升更加明顯.
表3 CrossWOZ數(shù)據(jù)集實驗結(jié)果
表4 是在MultiWOZ 數(shù)據(jù)集上的實驗結(jié)果.為了公平進行對比,本文將各個模型實驗時使用模型的具體情況列在表4 中.其中“Ontology”列表示模型在實驗中是否使用預(yù)定義本體方法.預(yù)定義本體是指在對話開始之前提前告知模型哪些槽位類型會出現(xiàn)在該對話中,使用預(yù)定義本體會大幅降低對話狀態(tài)種類數(shù)目,從而降低任務(wù)難度.“BERT”列表示該模型在實驗中是否使用例如BERT 等預(yù)訓(xùn)練語言模型.使用BERT 的模型相比其他模型在詞向量編碼過程中更有優(yōu)勢,模型可以捕獲到更豐富的語義信息.
表4 MultiWOZ數(shù)據(jù)集實驗結(jié)果
本文主要與以下對話狀態(tài)跟蹤方法進行對比.
DST-Reader[7]:將對話狀態(tài)跟蹤任務(wù)建模為閱讀理解任務(wù),通過預(yù)測字段跨度來提取槽位值.
HyST[23]:使用分層循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)編碼器,通過混合模型結(jié)合預(yù)定義本體與開放詞表.
TRADE[5]:對整個對話歷史文本進行編碼,使用復(fù)制增強解碼器對每個槽位進行解碼.
DSTQA[6]:將對話狀態(tài)跟蹤任務(wù)建模為問答任務(wù),并使用動態(tài)演變的知識圖來學(xué)習(xí)槽值對的連接關(guān)系.
SOM-DST[24]:將對話狀態(tài)視為一個固定大小的臨時記憶,并提出了選擇覆蓋機制.
SUMBT[11]:使用BERT 作為話語,槽位和值的編碼器,通過計算距離來對每個候選值進行評分.
SST[9]:利用注意力機制模擬對話狀態(tài)模式圖,通過循環(huán)網(wǎng)絡(luò)控制狀態(tài)更新.
從表4 可以看出,SMGN 在2 個數(shù)據(jù)集上的聯(lián)合正確率分別為53.03%和54.88%.在MultiWOZ 2.0 數(shù)據(jù)集中本文模型超越其他模型;在MultiWOZ 2.1 數(shù)據(jù)集中,本文模型性能略弱于SST 模型,這是因為SST 模型是使用預(yù)定義本體方法方法設(shè)計的模型.相比起其他同種類模型,本文模型的性能有明顯提升.
在本節(jié)中,本文將進行消融實驗,通過對模型中各個模塊進行替換或刪除后比較性能,從而驗證SMGN模型中各部分改進的有效性.表5 是在MultiWOZ 2.0 數(shù)據(jù)集上進行消融實驗的結(jié)果.
表5 消融實驗結(jié)果
首先嘗試從SMGN模型中刪除圖更新層,這將使模型變?yōu)殪o態(tài)模型,僅能保留上一輪對話的歷史信息,更早的信息將被覆蓋.這種方法會大幅降低模型的正確率.
其次嘗試將模型圖更新層中的圖注意力GAT 網(wǎng)絡(luò)替換為Transformer 結(jié)構(gòu),并使用結(jié)構(gòu)圖的連接關(guān)系作為注意力權(quán)重矩陣.這使得狀態(tài)記憶圖退化為僅利用邊結(jié)構(gòu)的模擬圖方法.可以看出,替換后性能與隱式利用圖網(wǎng)絡(luò)的SST模型性能相近,這表明顯式構(gòu)建圖網(wǎng)絡(luò)可以有效提升模型對上文信息的利用能力.
為了與其他不使用BERT預(yù)訓(xùn)練語言模型的對話狀態(tài)跟蹤方法進行對比,本文將BERT 替換為Word2Vec+雙向長短時記憶網(wǎng)絡(luò)(Bidirectional Long Short-Term Memory,BiLSTM)方法并將其作為模型的編碼層進行對比實驗.從結(jié)果可以看出,使用預(yù)訓(xùn)練語言模型可以提升對話狀態(tài)跟蹤任務(wù)性能,但即使不使用BERT,狀態(tài)記憶圖網(wǎng)絡(luò)仍然比其他同類模型性能更好.
最后本文嘗試使用狀態(tài)預(yù)測方法代替模型的值結(jié)點標(biāo)記器,實驗結(jié)果表明在使用狀態(tài)記憶圖的模型中,“標(biāo)記值結(jié)點+結(jié)點分類”的方法會比直接進行狀態(tài)預(yù)測的方法效果更好.
SMGN 模型的另一優(yōu)點是可以提高計算效率.由于使用了狀態(tài)記憶圖,模型無需在每一輪都對歷史文本或?qū)υ挔顟B(tài)進行重新編碼,僅需要保存并傳遞狀態(tài)記憶圖中的結(jié)點信息和連接關(guān)系.為了證明以上觀點,本文在相同的計算環(huán)境下,使用不同模型在MultiWOZ 2.0 數(shù)據(jù)集上進行實驗,并對比一輪對話狀態(tài)跟蹤任務(wù)所需的平均時間,實驗結(jié)果如表6 所示.其中SOMDST,SUMBT和本文提出的SMGN 模型使用BERT 作為編碼器.
表6 模型計算效率對比
可以看出,相比TRADE 等對話文本編碼模型,雖然BERT 編碼器編碼所需時間比RNN 要高出數(shù)倍,但是本文模型整體運算時間遠(yuǎn)低于此類模型.與其他狀態(tài)信息編碼模型相比,本文的模型計算效率僅略低于SST 模型,這主要是由于使用BERT 編碼會比其他靜態(tài)語言模型花費更多計算時間.但橫向?qū)Ρ仁褂肂ERT作為編碼器的SOM-DST和SUMBT 模型,本文模型可以提升48%~138%的計算效率.如果對運算效率有嚴(yán)格要求或沒有GPU 運算資源,SST 模型是最佳選擇;如果可以使用預(yù)訓(xùn)練語言模型,綜合考量性能和效率,本文模型優(yōu)勢更明顯.
為了進一步驗證SMGN 模型的有效性,本文在CrossWOZ 數(shù)據(jù)集中選取了一個跨領(lǐng)域場景的對話作為樣例進行分析,結(jié)果如表7所示.
表7 CrossWOZ數(shù)據(jù)集示例結(jié)果對比
為了便于對比,在表格中省去了兩種模型均預(yù)測正確的對話狀態(tài).在樣例中,用戶于第二輪對話時使用“那附近”一詞代替了景點名稱“壽延寺”,而“壽延寺”一詞僅出現(xiàn)在上一輪對話歷史中.TRADE 模型在這個樣例中無法正確預(yù)測出用戶希望尋找“壽延寺”景點附近的酒店,只能判斷出酒店類型為高檔型.另外,TRADE模型無法有效區(qū)分“延壽寺”和“延壽寺附近”這種語義非常相近的槽值,這導(dǎo)致餐館領(lǐng)域的地點槽位沒有找到完全正確的答案.本文的模型在狀態(tài)記憶圖中保留了第一輪對話形成的值結(jié)點“壽延寺附近”,在結(jié)合當(dāng)前時刻用戶的描述后模型可以正確判斷出(酒店-位置-壽延寺附近)對話狀態(tài),并且“延壽寺”和“延壽寺附近”會作為兩個向量相似但不同的值結(jié)點存儲在狀態(tài)記憶圖中,使模型可以正確區(qū)分相似的槽值.這表明了SMGN 模型可以更加有效地處理復(fù)雜格式的對話狀態(tài)生成要求,并且對歷史對話的語義理解能力更強.
針對對話狀態(tài)跟蹤任務(wù),本文提出了一種狀態(tài)記憶圖網(wǎng)絡(luò)模型,旨在顯式利用對話狀態(tài)自身結(jié)構(gòu)來增加歷史信息的語義理解能力.此外,針對復(fù)雜格式對話狀態(tài)生成困難的問題,本文實現(xiàn)了一個基于狀態(tài)記憶圖的對話狀態(tài)生成方法,通過判斷結(jié)點連接情況來生成對話狀態(tài).因為結(jié)點定義自由且易于擴展,該方法可以應(yīng)對不同格式的生成要求.本文在3 個公開的多輪對話數(shù)據(jù)集上進行了實驗.實驗結(jié)果表明,本文的方法可以有效提高對話狀態(tài)跟蹤任務(wù)的性能,同時可以提高運算效率.在今后的研究中會考慮如何將模型修改為并行的多任務(wù)學(xué)習(xí)模型,以解決現(xiàn)有模型會受到錯誤傳播影響的問題.