0
| 本文作者: 黃善清 | 2018-08-27 15:50 |
雷鋒網(wǎng)AI研習(xí)社按:在閑聊對話領(lǐng)域,對話策略研究是近幾年的熱門話題,實(shí)現(xiàn)對話策略需要引入一些要素,讓聊天機(jī)器人變得更加擬人化,以便能跟用戶更好地交互。來自清華大學(xué)的柯沛認(rèn)為,日常對話中的句式可以直接反映一個(gè)人的對話目的,通過引入句式控制,聊天機(jī)器人將能生成優(yōu)質(zhì)的回復(fù)——不僅句式受控,還包含了豐富的信息量。
在近日的 AI 研習(xí)社大講堂上,柯沛給我們介紹了這項(xiàng)具有開創(chuàng)性的研究成果。
公開課回放地址:
分享主題:閑聊對話中的句式控制
分享提綱:
從對話策略分析句式控制的緣由
基于條件變分自編碼器的對話生成模型
生成質(zhì)量的自動評價(jià)和人工評測
未來工作及展望
雷鋒網(wǎng)AI研習(xí)社將其分享內(nèi)容整理如下:
很高興能有機(jī)會跟大家分享我們的工作,我叫柯沛,是清華大學(xué)計(jì)算機(jī)系的在讀博士生,研究方向是自然語言處理,主要關(guān)注自然語言生成和對話系統(tǒng)。
今天分享的是我們今年發(fā)表在 ACL 上的一個(gè)工作,研究的是閑聊對話中的句式控制問題。首先,我會從對話策略講起,跟大家談?wù)勯e聊對話主要會涉及哪些問題,再結(jié)合句式控制的任務(wù)介紹我們所使用的模型,然后通過機(jī)器評測和人工評測說明模型的效果,同時(shí)給出一些對話示例,最后總結(jié)我們的工作和未來的發(fā)展方向。
我們先來講一下對話策略的問題。閑聊對話與任務(wù)型對話有本質(zhì)上的區(qū)別,閑聊對話最大的特點(diǎn)是涉獵的話題較廣泛,什么都能聊。目前閑聊對話做得比較好的產(chǎn)品是微軟小冰,只要有足夠的耐心和它聊,對話就會一直持續(xù)下去。

在閑聊對話領(lǐng)域,對話策略研究是近幾年的熱門話題,實(shí)現(xiàn)對話策略需要引入一些要素,讓聊天機(jī)器人變得更加擬人化,能夠跟用戶更好地交互。比如我們實(shí)驗(yàn)室所做的一個(gè)工作:通過引入情緒因素,讓聊天機(jī)器人可以生成帶有不同情緒的回復(fù),提高用戶的聊天體驗(yàn)。我們實(shí)驗(yàn)室還試圖將人物設(shè)定賦予聊天機(jī)器人,讓聊天體驗(yàn)變得更有意思。
我們這篇文章著重要談的是句式(Sentence Function)問題,在我們看來,日常對話中的句式可以直接反映一個(gè)人的對話目的,所以我們總結(jié)出了常見的 3 種句式類型:
第一種類型是疑問句,在雙方都不熟悉的情況下,如果我想認(rèn)識你,可能就會更多使用疑問句,通過提問來獲取更多關(guān)于你的信息。
第二種類型是祈使句,主要用于發(fā)出請求或者邀請,類似的回復(fù)我們一律稱為祈使句,祈使句一般可以促進(jìn)更深層次的交互。
第三種類型是平時(shí)用得比較頻繁的陳述句,從語氣上來講比較平淡,主要用于陳述事實(shí)或者解釋原因。
在進(jìn)一步展開我們文章的話題前,需要跟大家理清幾個(gè)近義詞,Sentence Function 被我們暫譯為「句式」,根據(jù) Sentence Function 可以把所有的句子劃分成多種 Sentence Type,比如我們目前考慮的 3 種 Sentence Type:疑問句、祈使句和陳述句。然而單就疑問句而言,其實(shí)還包含很多種細(xì)分的模式,比如一般疑問句和特殊疑問句,這說明同一類型的句子中也可能存在多種不同的 Sentence Pattern。
既然我們說句式可以反映一個(gè)人的說話目的,那么引入句式因素,是否就能有效提高聊天機(jī)器人的交互性呢?

這里我們給了一個(gè)例子,用戶說我現(xiàn)在餓了,聊天機(jī)器人則可以根據(jù)不同的對話目的,給出不同句式類型的回復(fù)。
如果機(jī)器人想知道用戶為什么餓了,那么他會提問:你早餐吃的什么呀?
如果機(jī)器人想向用戶發(fā)出邀請/請求,就會使用祈使句:那我們一起吃晚飯吧!
當(dāng)然,機(jī)器人也可以選擇比較平穩(wěn)的回復(fù),這時(shí)會選擇陳述句:我也餓了,可你在午飯時(shí)候吃了很多。
為了賦予機(jī)器人生成不同句式的回復(fù)的能力,我們的工作在生成過程中規(guī)劃了句式控制詞、話題詞以及普通詞的生成位置,以達(dá)到理想的生成效果。

我們的工作涉及到可控對話生成和可控文本生成的任務(wù),也就是說給定一個(gè)屬性值,生成的語言必須和這個(gè)屬性值相匹配,目前學(xué)界做的較多的是跟情緒相關(guān)的研究,比如設(shè)定一個(gè)情緒「喜歡」,聊天機(jī)器人自動生成各種與「喜歡」屬性相匹配的對話內(nèi)容;還有一種更加粗線條的情感極性,主要分為「正向情感」和「負(fù)向情感」。另外還有一種與英語時(shí)態(tài)相關(guān)。還有人研究對話意圖,讓生成的對話能夠符合事先設(shè)定的對話意圖。也有人做「風(fēng)格」相關(guān)的一些研究工作,不過這方面更多集中在圖像領(lǐng)域,比如說風(fēng)格遷移,就語言領(lǐng)域的研究來講,這塊還是處于比較初級的階段(比如把對話風(fēng)格統(tǒng)一調(diào)整為「男性」)。
以上這 5 類工作是近幾年比較熱門的研究方向。
回到我們的工作,我們首先會輸入用戶請求以及設(shè)定的句式類型,模型會生成一個(gè)回復(fù)——這個(gè)回復(fù)不僅在語義上要與用戶的請求對應(yīng),并且還要與設(shè)置的句式類別相匹配。
完成這項(xiàng)任務(wù)會面臨兩個(gè)比較大的挑戰(zhàn):第一個(gè)是涉及到對生成過程的全局控制,比如生成一個(gè)疑問句,開頭可能是個(gè)疑問詞,中間還涉及到一些助動詞,最后可能還要考慮標(biāo)點(diǎn)符號的因素;第二個(gè)挑戰(zhàn)在于如何平衡句式控制與信息量兼容性的問題,畢竟生成結(jié)果中如果不能包含豐富的信息量,句式控制得再完美也會影響到對話體驗(yàn)。
基于條件變分自編碼器的對話生成模型
接下來我會給大家介紹我們的模型,看看我們是如何解決以上兩個(gè)挑戰(zhàn)的。

左邊是對話領(lǐng)域中常見的「編碼-解碼」結(jié)構(gòu),該結(jié)構(gòu)一般帶有 attention,以增強(qiáng) post 和 Response 間的對齊關(guān)系,然而僅僅只有這個(gè)結(jié)構(gòu),生成的結(jié)果肯定不是我們想要的,因此我們需要增加控制組件,讓模型能夠達(dá)到控制句式的效果。
整個(gè)模型主要基于條件變分自編碼器(CVAE 模型),該模型早年更多在圖像領(lǐng)域使用,一直到最近兩年才運(yùn)用到文本與對話上來,如果只是單純引入 CVAE 作為技術(shù)框架,之前提到的全局控制與信息量兼容問題依然無法得到解決,因此我們便在原先的 CVAE 基礎(chǔ)上做了改進(jìn)。
我會從四個(gè)關(guān)鍵部件來給大家講解這個(gè)模型,分別是:傳統(tǒng)的編碼-解碼器、識別/先驗(yàn)網(wǎng)絡(luò)、判別器以及類型控制器。
傳統(tǒng)的編碼-解碼框架會先通過循環(huán)神經(jīng)網(wǎng)絡(luò)對用戶的 post 進(jìn)行編碼,得到每個(gè)位置的隱層向量,然后再將隱層向量傳給解碼器,通過逐步解碼最終生成回復(fù)。
是編碼器每個(gè)位置的隱狀態(tài)向量;
是解碼器中每個(gè)位置的隱狀態(tài)向量;在我們得到解碼器中每個(gè)位置的隱狀態(tài)后,我們通過簡單的映射,即線性變換加上 softmax 層,來得到每一個(gè)位置生成每一個(gè)詞的概率,然后我們再從詞的概率分布里進(jìn)行采樣,就能得到最終的解碼結(jié)果。這個(gè)是一個(gè)非常經(jīng)典的帶有 attention 機(jī)制的編碼-解碼模型。

為了讓回復(fù)的句式能夠符合我們之前的設(shè)定,我們引入了識別網(wǎng)絡(luò)和先驗(yàn)網(wǎng)絡(luò)。根據(jù)條件變分自編碼器原理,訓(xùn)練的過程中我們是知道真實(shí)回復(fù)的,所以訓(xùn)練的時(shí)候我們會利用后驗(yàn)網(wǎng)絡(luò)對 Post 信息和 Response 信息進(jìn)行編碼,獲得隱變量分布的參數(shù),隱變量分布選的是高斯分布,這里我們假設(shè)協(xié)方差矩陣是對角陣,所以我們要得到的兩個(gè)參數(shù)是
和
,那么我們可以設(shè)計(jì)一個(gè)識別網(wǎng)絡(luò),如 MLP,并通過識別網(wǎng)絡(luò)得到隱變量的高斯分布。
這個(gè)高斯分布的用處是什么呢?實(shí)際上引入隱變量的目的,是希望可以將一些跟句式相關(guān)的特征編碼到隱變量中,然后再通過隱變量來引導(dǎo) response 的生成。不過要注意的是,這個(gè)是在訓(xùn)練的過程獲得的,測試過程是看不到真實(shí)回復(fù)的,所以在測試時(shí)我們使用了不包含 response 信息的先驗(yàn)網(wǎng)絡(luò)。
這樣可能造成的一個(gè)問題是,兩個(gè)不一樣的網(wǎng)絡(luò)會導(dǎo)致訓(xùn)練和測試之間存在隔閡。對此,我們的解決方案是通過設(shè)計(jì)一個(gè) lost function 讓兩個(gè)網(wǎng)絡(luò)的隱變量分布盡可能的接近,以保證測試的時(shí)候也能得到一個(gè)含有句式信息的隱變量分布。

經(jīng)過識別/先驗(yàn)網(wǎng)絡(luò)后,我們會得到一個(gè)隱變量 z 的高斯分布,我們在高斯分布中采樣得到 z,那么又會面臨一個(gè)新的問題:網(wǎng)絡(luò)的輸入是 x(post)和 y(response),也就是說 z 是提取了 post 和 response 的信息,然而這個(gè)信息可能與句式無關(guān),我們要怎么做才能讓 z 編碼到盡可能多的句式信息呢?我們的解決方案是借助判別器,判別器以 z 為輸入,最終得到一個(gè)分類結(jié)果,這個(gè)分類結(jié)果就是之前提到的三種句式(疑問句、祈使句、陳述句)上的離散概率。
分類器以輸入時(shí)設(shè)定的句式類別為監(jiān)督,如果發(fā)現(xiàn)分類結(jié)果與人為設(shè)置的句式結(jié)果不一樣,就會產(chǎn)生一個(gè) loss,進(jìn)而督促 z 編碼更多在 Post 或者 response 中體現(xiàn)的句式信息。總的來說,判別器主要用于輔助 z 編碼與句式相關(guān)的信息。

接下來要分享的是比較重要的部分,那就是類型控制器,我們當(dāng)前每一步的生成,解碼器都會計(jì)算
,這個(gè)
和編碼句式信息的 z 會通過類型控制器先在詞的類型上生成一個(gè)分布,看當(dāng)前解碼位置上使用哪種類型的詞概率更高。
這里我將詞分成了三種類型:第一類是句式控制相關(guān)的詞、第二類是話題相關(guān)的詞、第三類是起句子連接作用的普通詞匯。然后我們將類別上的概率分布放進(jìn)正常的解碼過程中,這個(gè)概率分布與生成詞原本的概率分布可以做一個(gè)概率混合,最后得到每一個(gè)詞的解碼概率,通過采樣即可生成解碼結(jié)果。
這個(gè)類型控制器的實(shí)現(xiàn)也比較簡單,這里用的是 MLP,輸入是把當(dāng)前的
(輸出端語言模型的信息)和 z(句式控制相關(guān)的信息)兩個(gè)結(jié)合起來,再過一個(gè) MLP 和 softmax,最終得到詞類別上的概率分布。

我們的解碼器與一般解碼器不同的地方在于,在計(jì)算每一個(gè)詞的解碼概率時(shí),使用的是混合的計(jì)算方式——根據(jù)當(dāng)前
的和 z 去挑選當(dāng)前用哪一類詞更恰當(dāng),然后再到每個(gè)類型里去看哪一個(gè)詞的解碼概率更高一些,以此形成概率混合。其中,每一類的算法各有不同,比如第一類句式控制相關(guān)的詞,這一類詞的在計(jì)算概率時(shí)會用到
語言模型的信息、隱變量信息以及 label 信息。第二類主題詞與第三類普通詞的算法會比較類似,但詞表略有不同,是一個(gè)比較常規(guī)的
的投影過程。我們最終將三個(gè)詞表的結(jié)果用概率混合進(jìn)行計(jì)算,就能得到我們解碼出每一個(gè)詞的概率了,至此,我們的解碼工作也就完成了。
最后我們再來回顧一下整個(gè)模型,這個(gè)模型會產(chǎn)生 loss 的地方主要有三點(diǎn):第一點(diǎn)是最終生成的 response 與給定的 response 之間的交叉熵;然后在對 z 做分類時(shí),判斷當(dāng)前類別與我們設(shè)定的類別是否一樣,中間也會存在一個(gè) Loss;第三個(gè)點(diǎn)是為了拉近識別網(wǎng)絡(luò)與先驗(yàn)網(wǎng)絡(luò)產(chǎn)生的分布距離,我們設(shè)置了一個(gè) KL 項(xiàng),在這過程也會產(chǎn)生 loss。
三者我們做了聯(lián)合優(yōu)化,最終得出一個(gè)總的 loss,再通過梯度下降等方法去訓(xùn)練來得到我們最終的模型參數(shù)。
評測結(jié)果
我們工作的另外一項(xiàng)貢獻(xiàn),是構(gòu)建了一個(gè)帶句式標(biāo)簽的中文數(shù)據(jù)集,這個(gè)數(shù)據(jù)在學(xué)界是比較少的。

數(shù)據(jù)集里大概有 196 萬的 post,response 和 post 在數(shù)量上對等,不過帶了相應(yīng)的句式標(biāo)簽,最后我們還保留了 6000 個(gè) post 作為 test set。
如果不考慮話題因素,目前已有其他模型也在試圖做同樣的事情,如 c-seq2seq、MA 以及 KgCVAE 模型等,我們將他們作為基線模型,從生成回復(fù)的語法性、多樣性、準(zhǔn)確性三個(gè)方面進(jìn)行對比,結(jié)果顯示,除了語法性以外,多樣性和準(zhǔn)確性方面我們的模型都取得了比較出眾的效果。
涉獵對話領(lǐng)域的同學(xué)可能都知道,自動指標(biāo)有時(shí)候是不靠譜的,這時(shí)候我們需要借助一些人工評價(jià),我們這里采取的是一對一比較式評價(jià),我們給標(biāo)注者一個(gè)用戶請求以及對應(yīng)的模型生成結(jié)果,讓他們從我們的模型更好、基線模型更好、以及平局三者之間做出選擇——為了公平起見,標(biāo)注過程我們會對模型的名稱進(jìn)行保密。
我們比較的指標(biāo)主要有三個(gè):語法性、合適性、信息量,從結(jié)果來看,只要結(jié)果顯示超過 0.5,就表示我們的模型在該項(xiàng)目的表現(xiàn)要比其他模型更好,我們還會做顯著性的測試,結(jié)果中我們可以看到除了疑問句(相對而言句式較簡單),其他方面都是我們的模型表現(xiàn)得更顯著,尤其是在信息量上,這也是我們文章所要解決的挑戰(zhàn),使得回復(fù)既包含豐富的信息量,又在句式上是可控的。

為了分析這些回復(fù)究竟有什么樣的規(guī)律,我們統(tǒng)計(jì)了高頻詞和常見的模式,主要是通過頻繁模式挖掘的算法來分析的。疑問句中較突出的是疑問詞,頻繁出現(xiàn)的模式既包含一般疑問句,還包含特殊疑問句,如果模型確實(shí)能夠?qū)⑦@些模式靈活運(yùn)用到回復(fù)上的話,我們即可獲得優(yōu)質(zhì)的生成結(jié)果。祈使句和陳述句同理。
值得一提的是,陳述句的頻繁模式與高頻詞相對疑問句和祈使句而言沒有那么顯著,因?yàn)殛愂鼍涓嗟氖寝D(zhuǎn)折和并列,但我們的模型有能力利用這些模式生成多樣的回復(fù)。

接下來我用更加直觀的生成例子來做講解。
這個(gè)例子里,post 是「如果有一天我跟你絕交,你會怎樣?」在我們的模型生成的回復(fù)里,紅色部分是從句式控制相關(guān)的詞表里生成的;藍(lán)色則是從話題詞詞表里生成的;而剩余的黑色部分則是從一般詞匯詞表中生成。這也意味著,如果要生成一個(gè)好的回復(fù),我們需要將這三種不同類型的詞進(jìn)行合理的規(guī)劃,這樣在面對不同句式類型的生成要求時(shí),才能夠生成比較優(yōu)質(zhì)的回復(fù)——不僅能夠控制句式,還能夠包含豐富的信息量。
要是我們要求模型生成多個(gè)疑問句回復(fù)會怎樣?我們的模型可以通過采樣多個(gè)隱變量 z 來達(dá)成目標(biāo)。如圖所示,目前的生成結(jié)果中,既有一般疑問句的問法,也有特殊疑問句的問法。這說明,我們的模型能夠做到的不僅僅是區(qū)分 3 種句式類別,通過引入隱變量還能夠?qū)W習(xí)到句式內(nèi)部的多樣性。
結(jié)論
總結(jié)一下,在單輪對話里通過生成不同句式的回復(fù)來實(shí)現(xiàn)對話目的,這一點(diǎn)我們的模型已經(jīng)做得比較好了。在初步具備控制能力的情況下,下一步我們需要做感知,即知道用戶表現(xiàn)出什么樣的狀態(tài),這樣我們才能決定我們使用的句式、對話目的與策略,從而在多輪對話里生成較高質(zhì)量的回復(fù)。目前我們的工作只做到了第一步,第二步相對來說比較有難度,因?yàn)樯婕暗降氖怯脩粜袨榈奶綔y和感知。這個(gè)可以看做是我們工作未來發(fā)展的一個(gè)方向。
另外,在語義和結(jié)構(gòu)方面,我們的工作目前只是通過類別控制器去做規(guī)劃性的工作,比如回復(fù)里哪個(gè)地方該用哪種類別的詞。實(shí)際上我們還可以做語義和結(jié)構(gòu)的解耦,以保證在同一個(gè)結(jié)構(gòu)下表現(xiàn)不同語義時(shí)結(jié)構(gòu)能夠不發(fā)生變化,這也是我們工作未來的一個(gè)發(fā)展方向。

最后給大家展示的是可控對話近兩年的一些研究成果,它們都是在解決同一個(gè)問題:怎樣控制回復(fù)的某種屬性。如果大家對這些話題感興趣的話,都可以考慮看看這些最新的論文。我今天的分享就到這里,謝謝大家。
以上就是本期嘉賓的全部分享內(nèi)容。更多公開課視頻請到雷鋒網(wǎng)AI研習(xí)社社區(qū)(https://club.leiphone.com/)觀看。關(guān)注微信公眾號:AI 研習(xí)社(okweiwu),可獲取最新公開課直播時(shí)間預(yù)告。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。