林健成,藺曉川
(暨南大學 網絡空間安全學院,廣東 廣州 510000)
隨著用戶對人機對話的需求不斷演變,越來越多的研究者在該領域開展廣泛的研究。為了滿足用戶情感陪伴的需求,微軟亞太研究院推出了微軟小冰[1],而為了通過對話完成特定的任務,如電商、咨詢等,阿里團隊推出了阿里小蜜[2]?;谏疃葘W習的預訓練模型已經在對話系統中被廣泛使用,如DialoGPT[3],這些模型能夠在沒有特定背景的閑聊中取得近似人類聊天的表現水平。在上述提及的對話系統中,都引入了一些外部知識源,如知識圖譜[4]、新聞文章[5]等。這些外部知識源能夠幫助對話系統生成符合語境且與客觀事實相一致的回復。
知識對話系統包括知識庫的構建、知識選擇[6]和知識對話生成[7]三個部分。其中,知識庫的類型包括知識圖譜、文章片段等。在知識對話中知識庫是一個與特定領域相關的語料集合,主要依靠人工標注和信息抽取等方式來構建和維護。知識選擇指的是在知識對話中,檢索和選擇所需要的知識。知識對話生成則是指根據給定的知識,生成一個符合聊天上下文的回復。圖1是一個具體的知識對話例子,用戶談及電影《我是山姆》,對話系統不僅生成了與電影話題相關的回復,并且正確引用了《我是山姆》的信息。

圖1 知識對話樣例
目前知識對話系統的研究較少考慮知識對話系統的在線零資源更新的情況。然而在實際應用中,及時更新知識對話系統的參數,使得其與時俱進是至關重要的。在模型的在線更新中,需要一個結構為<知識,對話>的數據集,其中對話部分結構為<上下文,回復>。在實際環境中,我們可以通過網絡爬蟲等獲取相關的知識描述。但由于對話部分需要與對應的知識相關,所以很難自動收集,并且人工標注的成本過于巨大,造成了知識對話系統在線更新遭遇零資源可用的問題。
如圖2所示,對話語料零資源可用的情況分兩種: ①對話語料整體缺失。因為用于在線更新的語料

圖2 在線更新遇到的問題與緩解方法
本文的貢獻如下: ①使用合成數據在零資源的情況下進行模型在線更新,驗證了其可行性; ②針對不同的場景,提出了不同的合成數據生成方法; ③實驗表明,本文方法接近使用人工標注數據進行在線更新的效果。
近年來,由于深度學習在多個領域取得了顯著成效,研究人員開始將深度學習使用在知識對話系統中。當前的BERT[9]和GPT-2[10]等算法使用大量數據進行訓練,在對話領域取得十分突出的成果?;谶@兩種模型,Google推出Meena[11],Facebook推出Blenderbot[12]等對話預訓練模型,進一步推動了人機對話的研究進展。在這個過程中,研究人員發現知識集成到對話生成中可以使生成的結果更加多樣化和可控。文獻[13]使用wiki作為知識庫,進行知識對話生成,使得回復更具備信息量;文獻[14]將人設信息作為一種額外知識,使模型基于這些信息進行對話,使得對話內容更加可控;文獻[15]依據給定的圖片進行多模態對話,使得對話生成的結果更符合圖片內容。雖然上述方法都在給定的知識背景下取得一定進展,但未考慮模型在新知識上的表現。比如當模型遇上不在訓練集中的實體時,模型表現會有所下降,尤其是當新實體與訓練集存在領域上的差異時,模型甚至無法繼續使用。目前,為了解決模型更新前后領域可能不一致的問題,文獻[16]提出一種遷移學習的方法,文獻[17]提出使用不同的adaptor來適應前后領域存在差異的情況。文獻[16-17]都緩解了模型更新前后領域沖突的情況,但都假設新領域的數據充足,而現實情況并不總是能滿足該假設。這些更新方法需要離線更新模型再部署,造成人力成本、時間成本較大。因此研究知識對話系統零資源在線更新是有必要的。Facebook[18-19],以及文獻[20]提出在線交互學習方法,利用人類交互數據進行模型更新,雖然它們能夠滿足在線更新的條件,但其用于學習的數據仍然具有收集成本巨大、噪聲大等缺點,且該方法并沒有考慮知識對話的場景,只考慮了無背景閑聊的場景。在知識對話在線更新的場景中,對話語料需要和特定的知識背景相關,這導致了想自動地收集到大量的數據是十分困難的。針對數據資源缺乏的問題,文獻[21]使用RNN對上下文編碼器和知識編碼器的預訓練在少資源的知識對話系統上取得進步。文獻[22]使用預訓練模型與合成數據等方式來緩解對話生成模型對人工標注數據的依賴,在一定程度上減輕了知識對話系統的學習對知識標注的依賴。但上述兩種方法只考慮了知識對話模型的初次學習,并沒有考慮模型后續在線更新中數據零資源的問題,不能直接用到知識對話零資源更新的問題上。同時,上述研究內容主要集中在英語領域,在中文領域的知識對話系統研究較為缺乏,需要研究人員彌補這個缺陷。
本節中先陳述任務描述,然后分別描述不同情況下合成數據生成的策略。
用于知識對話系統在線更新的語料結構由多個
在知識對話系統的在線更新中,需要與新知識K′相關的的語料
在實際的知識對話系統的在線更新中,對話語料零資源,最常見的情況是對話語料

表1 簡單模板示例
其中,{entity}、{attr}、{value}分別對應ki中的Entity、Attr、Value三個部分。通過對新的知識K′進行遍歷,在遍歷過程中對模板進行填充,即可生成批量的合成數據。
在知識對話系統的應用過程中,除了與特定知識相關外,用戶也可能與其進行閑聊。在閑聊中,回復是否多樣化、是否平滑地銜接上下文成為主要的目的。模板生成數據除樣式缺乏多樣性外,對話的銜接和遞進也較差,不利于模型在線更新后使用。與模板特性相反的是,生成模型具有靈活、生成結果多樣化等優點,在NLP任務中得到了廣泛使用。模型可以通過指定的上下文來完成問答、對話生成、文章續寫等功能。DialoGPT是微軟將Transformer結構應用到對話生成任務中的生成模型,其在對話生成任務上取得穩健的效果。為了使生成的合成數據符合閑聊的場景,我們進一步將模板和DialoGPT模型進行結合。
我們先使用模板生成一個關于ki的對話對,然后使用DialoGPT模型續寫該對話,重復該過程至對話K’中的每一個ki遍歷完畢。
表2中Response的白體字部分使用模板生成,而粗體部分則是由DialoGPT模型續寫而成。該做法能使得回復在正確引用知識的同時,更自然和更具有多樣性。

表2 簡單模板示例
DialoGPT是用于對話生成的一個預訓練模型。其輸入為詞語token embedding(te)和position embedding(pe)的和。
E(x)是tokenx的Embedding表示,P(x)是位置為x的Embedding表示。輸入的向量經過多層的Transformer得到最終的隱空間表示,并使用最后一層的Transformer進行句子概率的建模:
式(4)中Ht為第t層的隱變量輸入,Ot+1為該層的輸出,其中O0為式(1)中的Input。
除此之外,在模型的在線更新過程中,災難性遺忘是需要解決的一個重要的開放性問題。在本文中,使用了一種知識保留的方法來緩解該問題。雖然新對話領域的資源為零,但原對話領域的仍然可用。因此我們在生成的合成數據中混入了跟合成數據的比例為a的原領域的數據。模型在混合后對數據進行跨域學習。在我們的實驗中,a的取值為1時,模型的在線更新表現效果最好。
雖然對話語料很難收集,但網絡上仍有一些不成對文本可以作為對話的回復使用,比如一些用戶對某部電影的評論。這種情形我們稱其為上下文缺失。換言之,對于一些領域,除了新知識K′外,我們也能獲取可作為回復R′的語料。但是由于
在該場景下,我們使用檢索模型和過濾算法,在閑聊數據集LCCC[23]上進行檢索。用檢索的結果來作為C′,從而使得模型可以正常的建模P(R′|C′,K′)。該策略的合成數據的構造算法具體如下: ①先在LCCC數據集上根據(C,R)進行索引構建; ②我們在上文提及的不匹配數據中抽取含有知識的文本,作為R′。使用BM25算法在該數據庫上進行檢索,獲取R與R’最為相似的50數據對集合{(C,R)i|i=0,…,50}; ③是用過濾算法過濾掉含有人名、敏感詞的數據對(C,R)i; ④將經過過濾的數據對中的C與R′輸入BERT進行打分,將得分第一的C視作C′,構成合成數據。
其中BERT將對話的上下文和候選的kesponse作為輸入。其中原始的kesponse作為正例記作r, 在同一語料中隨機抽取樣本,作為負樣本,記作r-,按照以下損失函數在 LCCC數據集上進行優化,如式(6)、式(7)所示。
式(7)中,Wt和bt是全連接層的參數,其中,r是每個對話中對應的回復,將匹配的(c,r)的標簽設定為label=1,而r-是在同一語料、[不同對話上下文中隨機抽取的回復,以此作為負樣本,其標簽設定為 label = 0。用同樣的方法計算p(label=0|c,r),整體語義匹配問題轉化成文本二分類問題,可用以下損失函數對模型進行優化,如式(8)所示。
(8)
在我們的實驗中,使用了預訓練模型BERT和DialoGPT。DialoGPT共有12層Transformer。每一層Transformer具有12個head,每一個hidden state的輸出為768維向量。模型的訓練使用交叉熵作為目標函數,以1e-4的學習率使用Adam進行優化。在4.2節中提出的構建Pseudo Data方法中使用的DialoGPT使用清華公開的數據集LCCC進行訓練。我們使用DialoGPT在知識對話數據集上進行微調,作為我們用于進行實驗的知識對話系統。我們使用的BERT結構與上述提及的DialoGPT相似,不同點在于使用的損失函數不同。同時,本文使用的BERT為了學到可用于通用對話語義匹配的特征,在LCCC上進行訓練。
我們的實驗在清華大學公開的多領域數據集KdConv上進行實驗。KdConv是一個覆蓋電影、音樂、旅游三個領域的對話數據。該數據集包括了movie、music、travel三個領域的知識對話數據,86K的數據樣本、句子級別的知識標注。在知識部分,共包括13 072個實體,9 115個關系,總計157 029個知識三元組,如表3所示。

表3 KdConv數據統計
實驗中,我們假設模型的在線更新在前后不同主題的語料上進行,這也是符合現實的,因為現實增長的知識是多種多樣的。為了展示我們生成的合成數據,可以幫助知識對話模型在對話語料零資源的情況下實現在線更新,我們設計了增量實驗和對比實驗兩部分。增量實驗部分,我們以KdConv測試集為總數據量,0.25為一個步長,模擬現實中知識逐漸增長的過程。通過增量實驗去探索我們的知識對話系統是如何適應知識的不斷增長,以及說明模型在不同資源量下合成數據和人工標注數據對模型在線學習的影響。在對比實驗上我們采用如下幾個對比算法,用于衡量我們提出的方法各個部件對算法的影響。
(1)DA(DataAugmentation): 我們采用數據增強的方法來構建Baseline。由于本文假設在線更新時,新知識的對話語料可用資源為零,因此我們的數據增舊知識上的數據上進行。在數據增強算法中,常用的一種方法是使用同義詞進行替換,以達到表達方式的多樣化。在該文知識對話場景中,我們在對話數據上使用新知識的實體替換舊對話數據上知識實體的方法進行數據強化。
(2)DialoGPT: 我們的算法使用DialoGPT進行建模,所以使用在通用對話數據集LCCC上進行訓練的DialoGPT作為實驗的baseline。
(3)GPT_movie: 該模型是DialoGPT在電影領域的知識對話數據上進行微調,具有一定的知識對話能力。
(4)RR(ResponseRewrite): 美團聯合騰訊發表的論文[24]提出了一種利用同義詞表和語言模型對對話語料中的Response進行重寫。通過該方法構造的合成數據可以緩解不同對話風格的語料稀少難收集的問題。根據該論文的介紹,其方法在自動評估和人工評估中達到了當前的最佳水平(SOTA)。本論文將不同領域的對話數據視作不同的風格,在該方法上進行適配,并以此作為實驗的Baseline。
(5)GPT_movie+T(Our): 該模型在GPT_movie上加入特定領域的的模板數據進行訓練。
(6)GPT_movie+C(Our): 該模型在GPT_movie上加入特定領域合成的閑聊數據進行訓練。
(7)GPT_movie+T+OLD(Our): 這個模型使用特定領域的模板數據和等量的舊領域數據進行在線更新。
(8)GPT_R(Our): 這個模型針對上下文缺失的場景,我們使用目標領域上人工標注的對話回復視為R′,通過檢索模型構造其缺失的上下文,最終生成合成數據。
(9)GPT_human: 該模型使用對應領域中人類標注數據進行在線更新,是我們提出的方法應該逼近的模型。
以上所述的設置中,GPT_movie+T(Our)、GPT_movie+C(Our)、GPT_movie+T+OLD(Our)為利用本文針對對話缺失的情況提出由不同設置生成的合成數據進行在線更新后的模型。而GPT_R(Our)則是使用本文針對上下文缺失情況提出生成策略生成的合成數據進行在線更新后的模型。
在實驗中,我們使用如下指標進行模型性能的衡量。
(1)PPL(Perplexity): 該指標用來衡量生成的回復的語言流暢程度,PPL取值越小越好。
(2)Coverage:為了衡量生成的回復是否正確并充分地利用了給定的知識文本,我們首先使用開源工具jieba進行中文分詞。分詞后使用word-leval級別的token計算生成的response和給定知識的文本描述的程度。
(9)
其中,|V|表示給定知識描述K的token個數。|v|表示生成的對話回復中的token與給定知識的token交集大小。
(3)BagOfWordScore(BoW): 讓模型學習使用知識內容進行表達是十分中重要的。涉及不同主題的數據進行在線更新后的模型,仍有一定可能會混肴新知識和舊知識所對應的一些概念。為了衡量合成數據對模型這方面的能力的影響,我們使用Bag of Word Score對模的這一能力進行評測。Bag of Word Score的具體計算如下: ①首先采用TF-IDF算法計算出各領域的關鍵詞,將得分前10的關鍵詞作為候選集; ②然后人工在該候選集中挑選出5個與領域主題最為貼切的主題詞。具體的主題詞如表4所示。③當生成回復含有某個主題的主題詞時,積累1分。如果三個主題的主題詞都不包括,則記為主題無關。在測試集上首先使用模型進行回復生成,然后對整個生成結果進行計算。在計算的最后對電影、音樂、旅行、主題無關四個得分進行歸一化。由于生成結果具有隨機性,后續實驗結果均是三次實驗取平均后的結果。

表4 主題詞展示
我們使用該指標在人類標注數據上進行計算,結果如表5所示。其結果表明,在真實的人類對話中有大量的主題無關語句,比如用于打招呼、道謝等語句。而剔除主題無關的語句后,剩下的語句表現出明顯的主題傾向且符合對應的主題。這表明該指標能有效表明一個回復集合的主題傾向,進而可以評測模型生成的回復的主題傾向。下文中,我們使用BoW_movie, BoW_music, BoW_travel, BoW_natural分別表示movie,music,travel三種傾向和與主題無關的分數。

表5 人工標注數據的BoW分數
實驗結果如圖3、圖4所示。增量實驗表明,本文提出的各種合成數據都能使得模型有效地進行在線更新。從圖中可以看出,以0.25為步長增長的數據,在每次遞增后都能有效減少PPL。因為合成數據中含有噪聲等因素,其PPL下降曲線相比使用人工標注數據進行跨域學習的曲線下降起伏較大,但隨著數據量的增大,使用合成數據進行訓練的模型依然可以有效提升模型的表現性能,但總體仍然呈現下降的趨勢。考慮到災難性遺忘而提出的GPT_movie+T+OLD(Our)取得接近使用人工標注數據的水平。同時,為了應對上下文缺失而提出的GPT_R(Our),性能表現達到全部策略的最佳。這表明,如果不匹配數據可得,那么充分利用這些缺失上下文的語料能夠有效提升模型的跨域學習能力。這是因為,這些不匹配的上下文仍屬于人類自然產生的語句,具有更自然的表達方式。此外,對比不同目標領域的在線更新(從電影到音樂和從電影到旅游),我們提出的基于合成數據的在線更新方法不依賴于跨域學習前后是否具有領域相似性,其具有一定的普適性。

圖3 使用音樂領域數據進行在線更新

圖4 使用旅游領域數據進行在線更新
如表6、表7所示,經過對比實驗,我們發現本文提出的合成數據的生成方法生成的合成數據都能有效實現知識對話系統的在線更新。對比數據增廣方法(DA),我們的方法在主題傾向方面表現得更好。詞替換等常見數據增廣方法只能在訓練語料可能的情況下進行。據我們分析,這是因為在完成新領域知識對舊領域知識替換后,語句上一些無關知識的詞語并不會被替換,而這些詞語往往跟主題有關。比如“電影”“主演”等詞語與具體的實體無關,卻與主題高度相關。由于該原因,導致了使用常用的數據增廣方法進行跨域學習的模型,并不能學會新領域上特定的表達方式。比如從電影領域到音樂領域,使用DA進行跨域學習的模型會將“音樂專輯”實體視作“電影”實體進行表達。正如表中BoW_movie所示,在模型在線更新后生成的語料中,仍有12%或20%傾向于原有領域。而使用我們生成的合成數據進行的跨域學習,則只有少于8%的傾向。尤其是在不相似的領域進行在線更新,錯誤的主題傾向大幅度減少。

表6 使用音樂領域數據進行在線更新

表7 使用旅游領域數據進行在線更新
對比其他基線方法,雖然DialoGPT使用的大規模的閑聊數據LCCC中包括了廣泛的聊天話題,但模型并沒有學會在特定領域使用知識進行對話的能力。在KdConv上各項指標,尤其是知識覆蓋率上并不理想。而經過movie領域的數據進行微調得到的DialoGPT_movie則學到了一定的知識利用能力。但正如表中數據所示,這些能力與對話領域相關,在與原領域不相似的旅游領域上的表現要遠遠差于跟原領域相似的音樂領域上的性能。在音樂領域,DialoGPT_movie的知識覆蓋率為51%,而在旅游領域上,知識覆蓋率下降至34%。同時,在音樂領域生成的回復以27%傾向于對應的主題,而在旅游領域則只有5%。而使用我們生成的合成數據進行跨域學習后,各項數據都能超越DialoGPT_movie,說明了本文方法的有效性。作為SOTA的RR,因為考慮同義詞表對Response進行重寫操作,在PPL、BoW等指標上顯著優于其他Baseline,略優于本文方法。該方法即使使用了語言模型來保證重寫后數據的語法通順,也不能完全避免該問題,而我們提出的方法使用人類設計的模板或正常對話數據,因而在PPL上優于RR。同時,RR需要在模型更新前知道新數據所屬的領域以便維護同義詞表, 其通用性不如本文提出的方法。
對比我們提出的各種方法,每一種方法都適合特定的場景。比如我們只考慮問答場景而提出的GPT_movie+T(Our),在知識覆蓋率上超越使用人類數據進行在線更新的模型,因為問答場景下更在意知識是否正確使用,但對話的流暢度和多樣性會有所降低。而考慮上下文缺失的GPT_R取得了更佳的成績,各項指標與使用人工標注的數據更為接近。這表明,對話整體缺失要比上下文缺失更難解決,但在表8的人工評價上兩者差異并不明顯。另一方面,如何充分利用網絡上現有與知識相關的文本數據,并改造成適合對話的形式,可能是知識對話系統在新領域數據零資源時進行在線更新的關鍵因素。

表8 人工評測結果
為了更好地評估我們的方法,本文選用了baseline中的最優結果RR、對話缺失場景中綜合效果最好的GPT_move+T+OLD、上下文缺失場景中的GPT_R以及使用人類標注數據進行更新的模型GPT_human,在真實對話中進行評估。我們在不同領域的知識中隨機抽取若干知識項,要求多位評估人對不同模型在這些知識背景下生成的回復進行評分。因為在上述實驗中,已經使用了Coverage評價了知識能否合理使用,所以人工評分主要是為了評價一些難以量化的指標。指標為Relevance(回復是否與上下文相關)和Fluency(語法邏輯等表達是否通順)。評估人可以打分0、1、2。其中,0分表示完全不符合該指標,1分表示輕微沖突同,2分表示完全符合該指標。最終的結果為評估人給予分數的平均值。
從表8可以看出所示,我們提出的兩種方法雖然分別針對對話整體缺失和對話上下文缺失兩種不同的場景,但在人工評測上的結果是接近的,說明即使對話缺失程度較大仍能得到和缺失程度較輕的情況相似的結果,進一步說明零資源在線更新問題在本文的方法下得到一定的緩解。盡管Baseline在BoW指標上略微優于本文提出的方法,但在人工評測上差于本文提出的方法。同時,在流暢度上本論文提出的方法近似于使用人工數據進行更新的模型。但在相關度上,本文方法和使用人工數據進行更新的模型仍然有較大差距,這是因為使用算法合成的數據在上下文相關方面仍然有待提高。
為了解決知識對話系統在線更新時人工標注數據缺乏的問題,我們使用合成數據進行模型的在線更新,并且針對不同的場景提出了不同的合成數據的生成策略。實驗結果表明,使用合成數據能夠有效使得模型進行參數更新以適應于現實世界不斷增長的知識。同時本文方法顯著優于傳統的數據增強方法,能夠在一定程度上緩解知識對話系統在線更新中語料零資源的問題。