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