本文主要介紹深度強(qiáng)化學(xué)習(xí)在任務(wù)型對(duì)話上的應(yīng)用,兩者的結(jié)合點(diǎn)主要是將深度強(qiáng)化學(xué)習(xí)應(yīng)用于任務(wù)型對(duì)話的策略學(xué)習(xí)上
來源:騰訊技術(shù)工程微信號(hào)
背景
本文主要介紹深度強(qiáng)化學(xué)習(xí)在任務(wù)型對(duì)話上的應(yīng)用,兩者的結(jié)合點(diǎn)主要是將深度強(qiáng)化學(xué)習(xí)應(yīng)用于任務(wù)型對(duì)話的策略學(xué)習(xí)上,目前工業(yè)界普遍使用的策略都是基于規(guī)則的,顯然基于規(guī)則的方法有人力成本高、泛化能力差等缺點(diǎn),而強(qiáng)化學(xué)習(xí)恰好能解決這些問題,而且強(qiáng)化學(xué)習(xí)只需要一些目標(biāo),無需大量的訓(xùn)練語料,避免了深度學(xué)習(xí)的一大缺點(diǎn)。
首先簡(jiǎn)單介紹一下強(qiáng)化學(xué)習(xí)和對(duì)話系統(tǒng),然后再具體介紹一下深度強(qiáng)化學(xué)習(xí)在任務(wù)型對(duì)話中是怎么應(yīng)用的,最后給出訓(xùn)練的結(jié)果和總結(jié)。以下舉例部分都會(huì)以訂餐場(chǎng)景為準(zhǔn)。
強(qiáng)化學(xué)習(xí)
強(qiáng)化學(xué)習(xí)系統(tǒng)由智能體(Agent)、狀態(tài)(state)、獎(jiǎng)賞(reward)、動(dòng)作(action)和環(huán)境(Environment)五部分組成。
Agent:智能體是整個(gè)強(qiáng)化學(xué)習(xí)系統(tǒng)核心。它能夠感知環(huán)境的狀態(tài)(State),并且根據(jù)環(huán)境提供的獎(jiǎng)勵(lì)信號(hào)(Reward),通過學(xué)習(xí)選擇一個(gè)合適的動(dòng)作(Action),來最大化長(zhǎng)期的Reward值。簡(jiǎn)而言之,Agent就是根據(jù)環(huán)境提供的Reward作為反饋,學(xué)習(xí)一系列的環(huán)境狀態(tài)(State)到動(dòng)作(Action)的映射,動(dòng)作選擇的原則是最大化未來累積的Reward的概率。選擇的動(dòng)作不僅影響當(dāng)前時(shí)刻的Reward,還會(huì)影響下一時(shí)刻甚至未來的Reward,因此,Agent在學(xué)習(xí)過程中的基本規(guī)則是:如果某個(gè)動(dòng)作(Action)帶來了環(huán)境的正回報(bào)(Reward),那么這一動(dòng)作會(huì)被加強(qiáng),反之則會(huì)逐漸削弱,類似于物理學(xué)中條件反射原理。
Environment:環(huán)境會(huì)接收Agent執(zhí)行的一系列的動(dòng)作(Action),并且對(duì)這一系列的動(dòng)作的好壞進(jìn)行評(píng)價(jià),并轉(zhuǎn)換成一種可量化的(標(biāo)量信號(hào))Reward反饋給Agent,而不會(huì)告訴Agent應(yīng)該如何去學(xué)習(xí)動(dòng)作。Agent只能靠自己的歷史(History)經(jīng)歷去學(xué)習(xí)。同時(shí),環(huán)境還像Agent提供它所處的狀態(tài)(State)信息。
Reward:環(huán)境提供給Agent的一個(gè)可量化的標(biāo)量反饋信號(hào),用于評(píng)價(jià)Agent在某一個(gè)時(shí)間步所做action的好壞。強(qiáng)化學(xué)習(xí)就是基于一種最大化累計(jì)獎(jiǎng)賞假設(shè):強(qiáng)化學(xué)習(xí)中,Agent進(jìn)行一系列的動(dòng)作選擇的目標(biāo)是最大化未來的累計(jì)獎(jiǎng)賞。
State:狀態(tài)指Agent所處的環(huán)境信息,包含了智能體用于進(jìn)行Action選擇的所有信息,它是歷史(History)的一個(gè)函數(shù):St = f(Ht)。
可見,強(qiáng)化學(xué)習(xí)的主體是Agent和環(huán)境Environment。Agent為了適應(yīng)環(huán)境,做出的一系列的動(dòng)作,使最終的獎(jiǎng)勵(lì)最高,同時(shí)在此過程中更新特定的參數(shù)。實(shí)際上可以把強(qiáng)化學(xué)習(xí)簡(jiǎn)單理解成是一種循環(huán),具體的工作方式如下:
智能體從環(huán)境中獲取一個(gè)狀態(tài)St;
智能體根據(jù)狀態(tài)St采取一個(gè)動(dòng)作at;
受到at的影響,環(huán)境發(fā)生變化,轉(zhuǎn)換到新的狀態(tài)St+1;
環(huán)境反饋給智能體一個(gè)獎(jiǎng)勵(lì)(正向?yàn)楠?jiǎng)勵(lì),負(fù)向則為懲罰)。
對(duì)話系統(tǒng)
對(duì)話系統(tǒng)是為了某種目的設(shè)計(jì)的用以與人類對(duì)話的機(jī)器,這種目的可以是為了特定的任務(wù),也可以是簡(jiǎn)單的與人聊天,前者就是任務(wù)型對(duì)話,后者為非任務(wù)型對(duì)話系統(tǒng)。
任務(wù)型的對(duì)話主要為了一個(gè)特定的目標(biāo)進(jìn)行對(duì)話,比如常見的訂飛機(jī)票、訂餐等。對(duì)于任務(wù)型對(duì)話工業(yè)界主要實(shí)現(xiàn)方案還是為pipeline的方式,即按照SLU、DST、DPL和NLG的方式組織整個(gè)對(duì)話系統(tǒng),在學(xué)術(shù)界上end-to-end的方式也越來越受到關(guān)注,與pipeline不同,end-to-end模型使用一個(gè)模塊,并與結(jié)構(gòu)化的外部數(shù)據(jù)庫(kù)交互。
非任務(wù)型的對(duì)話則類似于微軟小冰和人進(jìn)行一些聊天。非任務(wù)型的對(duì)話主流實(shí)現(xiàn)方案有兩種:生成式和檢索式。隨著seq2seq模型的越來越成熟,生成式方案也越來越受到關(guān)注,這種方法是把對(duì)話任務(wù)看成是一種翻譯任務(wù),認(rèn)為Q(人說的話)和A(機(jī)器的回復(fù))是兩種語言。檢索式則是系統(tǒng)有很多訓(xùn)練數(shù)據(jù),其中包括擴(kuò)展問題(每個(gè)問題都對(duì)應(yīng)一個(gè)標(biāo)準(zhǔn)問)、答案(每個(gè)標(biāo)準(zhǔn)問對(duì)應(yīng)一個(gè)答案),當(dāng)用戶說一句話時(shí),則系統(tǒng)用這句話作為query在訓(xùn)練集中進(jìn)行檢索和排序得到匹配的問題,最后根據(jù)這個(gè)問題的標(biāo)準(zhǔn)問查詢答案。當(dāng)然也有這兩種方式的結(jié)合,即使用生成式生成候選的答案,再使用檢索式進(jìn)行匹配和排序得到精準(zhǔn)回答。
DQN+任務(wù)型對(duì)話
DQN
Q-learning是強(qiáng)化學(xué)習(xí)中的一種,在Q-learning中,我們維護(hù)一張Q值表,表的維數(shù)為:狀態(tài)數(shù)S * 動(dòng)作數(shù)A,表中每個(gè)數(shù)代表在態(tài)s下可以采用動(dòng)作a可以獲得的未來收益的折現(xiàn)和——Q值。我們不斷的迭代我們的Q值表使其最終收斂,然后根據(jù)Q值表我們就可以在每個(gè)狀態(tài)下選取一個(gè)最優(yōu)策略。由于這里主要介紹強(qiáng)化學(xué)習(xí)的在任務(wù)型對(duì)話中的應(yīng)用,不進(jìn)行詳細(xì)的介紹,具體的可參照《極簡(jiǎn)Qlearning教程》
DQN是深度學(xué)習(xí)與強(qiáng)化學(xué)習(xí)的結(jié)合,即使用神經(jīng)網(wǎng)絡(luò)代替Q-learning中Q表。在普通的Q-learning中,當(dāng)狀態(tài)和動(dòng)作空間是離散且維數(shù)不高時(shí)可使用Q-Table儲(chǔ)存每個(gè)狀態(tài)動(dòng)作對(duì)的Q值,但是當(dāng)狀態(tài)和動(dòng)作空間是高維或者連續(xù)時(shí),使用Q-Table不現(xiàn)實(shí),而神經(jīng)網(wǎng)絡(luò)恰好擅長(zhǎng)于此。因此將Q-Table的更新問題變成一個(gè)函數(shù)擬合問題,相近的狀態(tài)得到相近的輸出動(dòng)作。具體來說,比如我們現(xiàn)在還有一個(gè)Q值表,神經(jīng)網(wǎng)絡(luò)的作用就是給定一個(gè)狀態(tài)s和動(dòng)作a,預(yù)測(cè)對(duì)應(yīng)的Q值,使得神經(jīng)網(wǎng)絡(luò)的結(jié)果與Q表中的值接近。不過DQN的方式肯定不能繼續(xù)維護(hù)一個(gè)Q表,所以將上次反饋的獎(jiǎng)勵(lì)作為逼近的目標(biāo),如下式,通過更新參數(shù) θ 使Q函數(shù)逼近最優(yōu)Q值 。因此,DQN就是要設(shè)計(jì)一個(gè)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),通過函數(shù)來擬合Q值,即:
當(dāng)然這也會(huì)帶來一些問題:
神經(jīng)網(wǎng)絡(luò)需要大量帶標(biāo)簽的樣本進(jìn)行監(jiān)督學(xué)習(xí),但是強(qiáng)化學(xué)習(xí)只有reward返回值,如何構(gòu)造有監(jiān)督的數(shù)據(jù)成為第一個(gè)問題,而且伴隨著噪聲、延遲(過了幾十毫秒才返回)、稀疏(很多State的reward是0)等問題;
神經(jīng)網(wǎng)絡(luò)的前提是樣本獨(dú)立同分布,而強(qiáng)化學(xué)習(xí)前后state狀態(tài)和反饋有依賴關(guān)系——馬爾科夫決策;
神經(jīng)網(wǎng)絡(luò)的目標(biāo)分布固定,但是強(qiáng)化學(xué)習(xí)的分布一直變化,比如你玩一個(gè)游戲,一個(gè)關(guān)卡和下一個(gè)關(guān)卡的狀態(tài)分布是不同的,所以訓(xùn)練好了前一個(gè)關(guān)卡,下一個(gè)關(guān)卡又要重新訓(xùn)練;
過往的研究表明,使用非線性網(wǎng)絡(luò)表示值函數(shù)時(shí)出現(xiàn)不穩(wěn)定等問題。
針對(duì)以上問題的具體解決方案如下:
構(gòu)造標(biāo)簽:通過Q-Learning使用reward來構(gòu)造標(biāo)簽(對(duì)應(yīng)問題1),如上所述,用神經(jīng)網(wǎng)絡(luò)來預(yù)測(cè)reward,將問題轉(zhuǎn)化為一個(gè)回歸問題;
經(jīng)驗(yàn)回放:通過experience replay(經(jīng)驗(yàn)池)的方法來解決相關(guān)性及非靜態(tài)分布問題(對(duì)應(yīng)問題2、3);
雙網(wǎng)絡(luò)結(jié)構(gòu):使用一個(gè)神經(jīng)網(wǎng)絡(luò)產(chǎn)生當(dāng)前Q值,使用另外一個(gè)神經(jīng)網(wǎng)絡(luò)產(chǎn)生Target Q值(對(duì)應(yīng)問題4)。
構(gòu)造標(biāo)簽
對(duì)于函數(shù)優(yōu)化問題,監(jiān)督學(xué)習(xí)的一般方法是先確定Loss Function,然后求梯度,使用隨機(jī)梯度下降等方法更新參數(shù)。DQN則基于Q-Learning來確定Loss Function。我們想要使q-target值和q-eval值相差越小越好。DQN中的損失函數(shù)是:
這里yi先可以認(rèn)為是狀態(tài)s和動(dòng)作a對(duì)應(yīng)的標(biāo)準(zhǔn)Q值,實(shí)際根據(jù)后面的雙網(wǎng)絡(luò)結(jié)構(gòu),yi是根據(jù)上一個(gè)迭代周期或者說target-net網(wǎng)絡(luò)的參數(shù)計(jì)算出的q-target值,跟當(dāng)前網(wǎng)絡(luò)結(jié)構(gòu)中的參數(shù)無關(guān),yi的計(jì)算如下,然后整個(gè)目標(biāo)函數(shù)就可以通過隨機(jī)梯度下降方法來進(jìn)行優(yōu)化
經(jīng)驗(yàn)回放
經(jīng)驗(yàn)池的功能主要是解決相關(guān)性及非靜態(tài)分布問題。具體做法是把每個(gè)時(shí)間步agent與環(huán)境交互得到的轉(zhuǎn)移樣本 (st, at, rt, st+1) 儲(chǔ)存到回放記憶單元,要訓(xùn)練時(shí)就隨機(jī)拿出一些(minibatch)來訓(xùn)練。(其實(shí)就是將對(duì)話的過程打成碎片存儲(chǔ),訓(xùn)練時(shí)隨機(jī)抽取就避免了相關(guān)性問題),上面的代碼是將每次神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)的結(jié)果保存在經(jīng)驗(yàn)池中,下面則是在每次訓(xùn)練的時(shí)候從經(jīng)驗(yàn)池中隨機(jī)取出一個(gè)batch進(jìn)行訓(xùn)練。
雙網(wǎng)絡(luò)結(jié)構(gòu)
雙網(wǎng)絡(luò)結(jié)構(gòu)即構(gòu)建兩個(gè)神經(jīng)網(wǎng)絡(luò):target_net和eval_net,eval_net用來進(jìn)行參數(shù)訓(xùn)練和預(yù)測(cè)Q值,而target_net是eval_net的一個(gè)副本,這個(gè)網(wǎng)絡(luò)使用來預(yù)測(cè)目標(biāo)Q值(構(gòu)造標(biāo)簽中的yi),相當(dāng)于監(jiān)督訓(xùn)練中的label。target_net是每隔一定時(shí)間更新為eval_net的參數(shù),這樣在一段時(shí)間里目標(biāo)Q值使保持不變的,一定程度降低了當(dāng)前Q值和目標(biāo)Q值的相關(guān)性,提高了算法穩(wěn)定性。
任務(wù)型對(duì)話
任務(wù)型對(duì)話的主要目標(biāo)是完成一個(gè)任務(wù)如訂餐、訂票等,在這種場(chǎng)景下僅僅給用戶一個(gè)回答是遠(yuǎn)遠(yuǎn)不夠的,還需要真正的理解一個(gè)用戶的意圖,以及這個(gè)意圖相關(guān)的信息,如果一個(gè)用戶想訂餐,那么需要知道用戶的就餐具體日期、用餐人數(shù)等等,所以就需要進(jìn)行槽提取等等,同時(shí)還需要關(guān)注當(dāng)前的獲取的信息量以及未獲取的信息等。
SLU:語言理解,把用戶的自然語言表述的文本處理成預(yù)先設(shè)計(jì)好的機(jī)器能夠理解的形式,通常為意圖和槽值對(duì)。如用戶輸入“我想訂一個(gè)明天的位子”,則SLU的輸出應(yīng)該是intent=訂餐,slot=date:明天(實(shí)際中提取出的槽值需要做標(biāo)準(zhǔn)化處理)。這個(gè)部分意圖識(shí)別可作為分類任務(wù)或者檢索任務(wù),而槽提取一般可用作為NER問題。
DST:對(duì)話狀態(tài)跟蹤,根據(jù)對(duì)話歷史管理每一輪對(duì)話的輸入,并且預(yù)測(cè)當(dāng)前對(duì)話的狀態(tài)。比如使用規(guī)則的方法:有哪些槽已經(jīng)填充,哪些未填充等、哪些已經(jīng)問過usr、問過多少次等等。
DPL,對(duì)話策略學(xué)習(xí),根據(jù)當(dāng)前對(duì)話狀態(tài)做出下一步的反應(yīng)。比如根據(jù)DST知道有哪些槽未填充,用規(guī)則的方法選取一個(gè)優(yōu)先級(jí)最高的槽提問。DPL的任務(wù)是一個(gè)序列決策的過程,因此常用的方法有規(guī)則方法、CRF,以及本文的重點(diǎn):強(qiáng)化學(xué)習(xí)方法。
NLG,自然語言生成,根據(jù)系統(tǒng)得到的動(dòng)作生成客戶易理解的自然語言文本。這個(gè)很容易理解,如果DPL的動(dòng)作是問用戶就餐人數(shù),在系統(tǒng)里面可能是類似request{“num”:“UNK”},NLG的作用就是把這個(gè)轉(zhuǎn)換成“請(qǐng)問有幾個(gè)人就餐呢”。
應(yīng)用
將強(qiáng)化學(xué)習(xí)應(yīng)用于任務(wù)型對(duì)話的主要是把強(qiáng)化學(xué)習(xí)應(yīng)用于DPL學(xué)習(xí)對(duì)話的動(dòng)作決策,即強(qiáng)化學(xué)習(xí)中的Action對(duì)應(yīng)于對(duì)話中的下一步動(dòng)作,比如是回答用戶的某個(gè)問題還是問用戶下一個(gè)槽相關(guān)的問題等等。用強(qiáng)化學(xué)習(xí)的一個(gè)好處就是不需要訓(xùn)練數(shù)據(jù),因?yàn)橛?xùn)練過程中只需要Simulator根據(jù)設(shè)置的goal進(jìn)行回答和提問就可以了。實(shí)際應(yīng)用中將DM作為強(qiáng)化學(xué)習(xí)中的Agent,反饋一些信息給用戶。DQN中的reward是根據(jù)對(duì)話的結(jié)果進(jìn)行提供,分為兩個(gè)階段,一個(gè)是在對(duì)話未完成的時(shí)候,每增加一輪對(duì)話就給一個(gè)-1的獎(jiǎng)勵(lì),另外就是在對(duì)話完成時(shí),如果完成任務(wù)則給一個(gè)(max_turn-turn)的獎(jiǎng)勵(lì),否則獎(jiǎng)勵(lì)為-(2* max_turn)。
另外,在訓(xùn)練強(qiáng)化學(xué)習(xí)的過程中,實(shí)際上并不需要用到SLU和NLG,在Agent和User Simulator之間只需要通過結(jié)構(gòu)化的數(shù)據(jù)進(jìn)行交流,而不需要轉(zhuǎn)換成自然語言,比如:
表示“2019年2月18日和2019年2月19還有空位置”:
則表示“我想訂一個(gè)5人的位子,什么時(shí)間有空位子?”。
Simulator:模擬用戶行為,Simulator的主要做法就是針對(duì)Agent反饋的信息,結(jié)合自身的goal進(jìn)一步與Agent進(jìn)行交互,比如是回答Agent問題,還是進(jìn)行反問,是完成goal結(jié)束對(duì)話,還是拒絕。這相當(dāng)于使用的是規(guī)則的方式,不過也有使用模型的方式構(gòu)建一個(gè)world model來模型用戶。
Goal:任務(wù)的目標(biāo),在訂餐任務(wù)中我們?cè)O(shè)置的目標(biāo)形式如下圖。強(qiáng)化學(xué)習(xí)能夠很好的應(yīng)用于任務(wù)型對(duì)話的一大原因就是這些goal本身并不需要人為一個(gè)個(gè)編寫,只需要根據(jù)業(yè)務(wù)需求根據(jù)各個(gè)槽完成生成即可,這就避免了大量的訓(xùn)練預(yù)料。
除了以上,還需要根據(jù)實(shí)際的情況虛構(gòu)一個(gè)數(shù)據(jù)庫(kù)以模擬實(shí)際使用中的數(shù)據(jù)查詢,如餐廳在某些條件下是不是有剩余位子等。
效果
成功率
獎(jiǎng)勵(lì)
對(duì)話輪數(shù)
舉例(此處不考慮SLU和NLG,在真正訓(xùn)練過程中都是使用了結(jié)構(gòu)化的數(shù)據(jù)),假設(shè)我們的goal如下:
使用強(qiáng)化學(xué)習(xí)的的結(jié)果如下:
人工翻譯過來(其實(shí)就是基于模板方法的NLG)如下:
上面的結(jié)果還是很好的,與針對(duì)這個(gè)場(chǎng)景精心設(shè)計(jì)的規(guī)則的方法基本上能保持一致:
總結(jié)
可以加入額外懲罰和獎(jiǎng)勵(lì),加快收斂,比如上一章節(jié)中的效果是不加任何額外懲罰和獎(jiǎng)勵(lì),可以看出大概在5000個(gè)epoch的時(shí)候就已經(jīng)收斂,但是如果加入一些答非所問、回答重復(fù)問題等懲罰則不到1000個(gè)epoch就會(huì)收斂,另外加入這些懲罰和獎(jiǎng)勵(lì)也會(huì)讓網(wǎng)絡(luò)朝著我們想要的方向進(jìn)行訓(xùn)練,得到更好的結(jié)果。
目前我們主要在訂餐的任務(wù)上進(jìn)行了試驗(yàn),這個(gè)任務(wù)還比較簡(jiǎn)單,需要找一個(gè)更為復(fù)雜的場(chǎng)景進(jìn)行驗(yàn)證。
訓(xùn)練過程中只是使用了slot是否填充等,對(duì)于已經(jīng)填充的slot未利用slot的值,對(duì)此需要進(jìn)一步探究slot的值對(duì)于DPL的決策是否有影響。
一旦在線上使用的槽的個(gè)數(shù)需要發(fā)生變化就必須重新進(jìn)行訓(xùn)練,非常耗時(shí)。
Goal和Simulator還是一種比較“僵硬”的做法,需要在實(shí)際線上的使用過程中不斷訓(xùn)練,這樣可以使得對(duì)話決策更智能更符合用戶預(yù)期。
更多騰訊AI相關(guān)技術(shù)干貨,請(qǐng)關(guān)注專欄騰訊技術(shù)工程
審核編輯 黃昊宇
-
人工智能
+關(guān)注
關(guān)注
1789文章
46652瀏覽量
237070 -
強(qiáng)化學(xué)習(xí)
+關(guān)注
關(guān)注
4文章
265瀏覽量
11197
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論