TEG數據平臺部聯合AiLab、Ai平臺部,結合語音合成、語音識別、機器人問答、大數據能力等前沿性、高複用性的功能模塊構建騰訊小知智能機器人產品,支持問答、業務辦理、營銷推廣、回訪調研、通知提醒等應用場景,下降人工服務成本、提高服務質量和轉化效率,目前已在多個領域落地,如公安、零售、教育和地產等。git
本文主要介紹深度強化學習在任務型對話上的應用,二者的結合點主要是將深度強化學習應用於任務型對話的策略學習上,目前工業界廣泛使用的策略都是基於規則的,顯然基於規則的方法有人力成本高、泛化能力差等缺點,而強化學習剛好能解決這些問題,並且強化學習只須要一些目標,無需大量的訓練語料,避免了深度學習的一大缺點。github
首先簡單介紹一下強化學習和對話系統,而後再具體介紹一下深度強化學習在任務型對話中是怎麼應用的,最後給出訓練的結果和總結。如下舉例部分都會以訂餐場景爲準。算法
強化學習系統由智能體(Agent)、狀態(state)、獎賞(reward)、動做(action)和環境(Environment)五部分組成,以下圖所示。數據庫
Agent:智能體是整個強化學習系統核心。它可以感知環境的狀態(State),而且根據環境提供的獎勵信號(Reward),經過學習選擇一個合適的動做(Action),來最大化長期的Reward值。簡而言之,Agent就是根據環境提供的Reward做爲反饋,學習一系列的環境狀態(State)到動做(Action)的映射,動做選擇的原則是最大化將來累積的Reward的機率。選擇的動做不只影響當前時刻的Reward,還會影響下一時刻甚至將來的Reward,所以,Agent在學習過程當中的基本規則是:若是某個動做(Action)帶來了環境的正回報(Reward),那麼這一動做會被增強,反之則會逐漸削弱,相似於物理學中條件反射原理。 Environment:環境會接收Agent執行的一系列的動做(Action),而且對這一系列的動做的好壞進行評價,並轉換成一種可量化的(標量信號)Reward反饋給Agent,而不會告訴Agent應該如何去學習動做。Agent只能靠本身的歷史(History)經歷去學習。同時,環境還像Agent提供它所處的狀態(State)信息。 Reward:環境提供給Agent的一個可量化的標量反饋信號,用於評價Agent在某一個時間步所作action的好壞。強化學習就是基於一種最大化累計獎賞假設:強化學習中,Agent進行一系列的動做選擇的目標是最大化將來的累計獎賞。 State:狀態指Agent所處的環境信息,包含了智能體用於進行Action選擇的全部信息,它是歷史(History)的一個函數:St = f(Ht)。 可見,強化學習的主體是Agent和環境Environment。Agent爲了適應環境,作出的一系列的動做,使最終的獎勵最高,同時在此過程當中更新特定的參數。實際上能夠把強化學習簡單理解成是一種循環,具體的工做方式以下:小程序
智能體從環境中獲取一個狀態St; 智能體根據狀態St採起一個動做at; 受到at的影響,環境發生變化,轉換到新的狀態St+1; 環境反饋給智能體一個獎勵(正向爲獎勵,負向則爲懲罰)。網絡
對話系統是爲了某種目的設計的用以與人類對話的機器,這種目的能夠是爲了特定的任務,也能夠是簡單的與人聊天,前者就是任務型對話,後者爲非任務型對話系統。函數
任務型的對話主要爲了一個特定的目標進行對話,好比常見的訂飛機票、訂餐等。對於任務型對話工業界主要實現方案仍是爲pipeline的方式,即按照SLU、DST、DPL和NLG的方式組織整個對話系統,在學術界上end-to-end的方式也愈來愈受到關注,與pipeline不一樣,end-to-end模型使用一個模塊,並與結構化的外部數據庫交互。學習
非任務型的對話則相似於微軟小冰和人進行一些聊天。非任務型的對話主流實現方案有兩種:生成式和檢索式。隨着seq2seq模型的愈來愈成熟,生成式方案也愈來愈受到關注,這種方法是把對話任務當作是一種翻譯任務,認爲Q(人說的話)和A(機器的回覆)是兩種語言。檢索式則是系統有不少訓練數據,其中包括擴展問題(每一個問題都對應一個標準問)、答案(每一個標準問對應一個答案),當用戶說一句話時,則系統用這句話做爲query在訓練集中進行檢索和排序獲得匹配的問題,最後根據這個問題的標準問查詢答案。固然也有這兩種方式的結合,即便用生成式生成候選的答案,再使用檢索式進行匹配和排序獲得精準回答。大數據
Q-learning是強化學習中的一種,在Q-learning中,咱們維護一張Q值表,表的維數爲:狀態數S * 動做數A,表中每一個數表明在態s下能夠採用動做a能夠得到的將來收益的折現和——Q值。咱們不斷的迭代咱們的Q值表使其最終收斂,而後根據Q值表咱們就能夠在每一個狀態下選取一個最優策略。因爲這裏主要介紹強化學習的在任務型對話中的應用,不進行詳細的介紹,具體的可參照zhuanlan.zhihu.com/p/29213893優化
DQN是深度學習與強化學習的結合,即便用神經網絡代替Q-learning中Q表。在普通的Q-learning中,當狀態和動做空間是離散且維數不高時可以使用Q-Table儲存每一個狀態動做對的Q值,可是當狀態和動做空間是高維或者連續時,使用Q-Table不現實,而神經網絡剛好擅長於此。所以將Q-Table的更新問題變成一個函數擬合問題,相近的狀態獲得相近的輸出動做。具體來講,好比咱們如今還有一個Q值表,神經網絡的做用就是給定一個狀態s和動做a,預測對應的Q值,使得神經網絡的結果與Q表中的值接近。不過DQN的方式確定不能繼續維護一個Q表,因此將上次反饋的獎勵做爲逼近的目標,以下式,經過更新參數 θ 使Q函數逼近最優Q值 。所以,DQN就是要設計一個神經網絡結構,經過函數來擬合Q值,即:
神經網絡須要大量帶標籤的樣本進行監督學習,可是強化學習只有reward返回值,如何構造有監督的數據成爲第一個問題,並且伴隨着噪聲、延遲(過了幾十毫秒才返回)、稀疏(不少State的reward是0)等問題;
神經網絡的前提是樣本獨立同分布,而強化學習先後state狀態和反饋有依賴關係——馬爾科夫決策; 神經網絡的目標分佈固定,可是強化學習的分佈一直變化,好比你玩一個遊戲,一個關卡和下一個關卡的狀態分佈是不一樣的,因此訓練好了前一個關卡,下一個關卡又要從新訓練; 過往的研究代表,使用非線性網絡表示值函數時出現不穩定等問題。 針對以上問題的具體解決方案以下:
構造標籤:經過Q-Learning使用reward來構造標籤(對應問題1),如上所述,用神經網絡來預測reward,將問題轉化爲一個迴歸問題; 經驗回放:經過experience replay(經驗池)的方法來解決相關性及非靜態分佈問題(對應問題二、3); 雙網絡結構:使用一個神經網絡產生當前Q值,使用另一個神經網絡產生Target Q值(對應問題4)。
對於函數優化問題,監督學習的通常方法是先肯定Loss Function,而後求梯度,使用隨機梯度降低等方法更新參數。DQN則基於Q-Learning來肯定Loss Function。咱們想要使q-target值和q-eval值相差越小越好。DQN中的損失函數是:
經驗池的功能主要是解決相關性及非靜態分佈問題。具體作法是把每一個時間步agent與環境交互獲得的轉移樣本 (st, at, rt, st+1) 儲存到回放記憶單元,要訓練時就隨機拿出一些(minibatch)來訓練。(其實就是將對話的過程打成碎片存儲,訓練時隨機抽取就避免了相關性問題),上面的代碼是將每次神經網絡預測的結果保存在經驗池中,下面則是在每次訓練的時候從經驗池中隨機取出一個batch進行訓練。
雙網絡結構即構建兩個神經網絡:target_net和eval_net,eval_net用來進行參數訓練和預測Q值,而target_net是eval_net的一個副本,這個網絡使用來預測目標Q值(構造標籤中的yi),至關於監督訓練中的label。target_net是每隔必定時間更新爲eval_net的參數,這樣在一段時間裏目標Q值使保持不變的,必定程度下降了當前Q值和目標Q值的相關性,提升了算法穩定性。
任務型對話的主要目標是完成一個任務如訂餐、訂票等,在這種場景下僅僅給用戶一個回答是遠遠不夠的,還須要真正的理解一個用戶的意圖,以及這個意圖相關的信息,若是一個用戶想訂餐,那麼須要知道用戶的就餐具體日期、用餐人數等等,因此就須要進行槽提取等等,同時還須要關注當前的獲取的信息量以及未獲取的信息等,任務型對話的pipeline實現方案以下圖所示:
將強化學習應用於任務型對話的主要是把強化學習應用於DPL學習對話的動做決策,即強化學習中的Action對應於對話中的下一步動做,好比是回答用戶的某個問題仍是問用戶下一個槽相關的問題等等。用強化學習的一個好處就是不須要訓練數據,由於訓練過程當中只須要Simulator根據設置的goal進行回答和提問就能夠了。實際應用中將DM做爲強化學習中的Agent,反饋一些信息給用戶。DQN中的reward是根據對話的結果進行提供,分爲兩個階段,一個是在對話未完成的時候,每增長一輪對話就給一個-1的獎勵,另外就是在對話完成時,若是完成任務則給一個(max_turn-turn)的獎勵,不然獎勵爲-(2*max_turn)。
另外,在訓練強化學習的過程當中,實際上並不須要用到SLU和NLG,在Agent和User Simulator之間只須要經過結構化的數據進行交流,而不須要轉換成天然語言,好比:
除了以上,還須要根據實際的狀況虛構一個數據庫以模擬實際使用中的數據查詢,如餐廳在某些條件下是否是有剩餘位子等。
1.成功率
2.獎勵
能夠加入額外懲罰和獎勵,加快收斂,好比上一章節中的效果是不加任何額外懲罰和獎勵,能夠看出大概在5000個epoch的時候就已經收斂,可是若是加入一些答非所問、回答重複問題等懲罰則不到1000個epoch就會收斂,另外加入這些懲罰和獎勵也會讓網絡朝着咱們想要的方向進行訓練,獲得更好的結果。 目前咱們主要在訂餐的任務上進行了試驗,這個任務還比較簡單,須要找一個更爲複雜的場景進行驗證。 訓練過程當中只是使用了slot是否填充等,對於已經填充的slot未利用slot的值,對此須要進一步探究slot的值對於DPL的決策是否有影響。 一旦在線上使用的槽的個數須要發生變化就必須從新進行訓練,很是耗時。 Goal和Simulator仍是一種比較「僵硬」的作法,須要在實際線上的使用過程當中不斷訓練,這樣可使得對話決策更智能更符合用戶預期。
在背景中介紹的技術都已在【騰訊小知】智能機器人上線,含文本與語音對話場景,目前已覆蓋零售、政務、通信、教育等行業。
掃碼開啓「騰訊小知「小程序即刻體驗或關注公衆號瞭解更多,小知期待各位的到來。
參考文獻
【1】Xiujun Li, Yun-Nung Chen,End-to-End Task-Completion Neural Dialogue Systems
【2】Volodymyr, Mnih, Human-level control through deep reinforcement learning