对话预训练_百度发布首个大规模隐变量对话模型PLATO
百度于去年10月公布的基于飛槳開源深度學習平臺開發的通用領域對話生成預訓練模型PLATO,相關論文最近已正式被ACL 2020接收。
PLATO是業界首個基于隱空間(Latent Space)的端到端的預訓練對話生成模型。據悉,該模型利用隱向量來表示對話的潛在方向,從而達到對話內容豐富度和流暢度的顯著提升。針對具體的對話任務,基于PLATO可以用少量數據訓練得到非常流暢的對話系統。
論文名稱:
PLATO:Pre-trained Dialogue Generation Model with Discrete Latent Variable
論文地址:
https://arxiv.org/abs/1910.07931
預訓練模型及代碼:
https://github.com/PaddlePaddle/Research/tree/master/NLP/Dialogue-PLATO
引言
研發開放領域(Open-Domain)的對話機器人,使得它能用自然語言與人自由地交流,這一直是自然語言處理領域終極目標之一。
對話系統的挑戰非常多,其中有兩點非常重要,一是大規模開放域多輪對話數據匱乏; 二是對話中涉及常識、領域知識和上下文,因此在對話回復時,存在“一對多”問題。
比如這個例子“李雷:今天好冷啊,外面風好大。”韓梅梅Bot可以怎樣回復李雷呢?
A.是啊,天氣預報說今天氣溫驟降10度呢。
B.好期待下雪啊,這樣就可以堆雪人了。
C.剛在外面走了一會,發型都被吹亂了。
一個對話的上文(Context),往往可以對應多個不同回復(Response)的方向。這些不同的回復隨著不同的人,不同的背景和環境可能有所不同,但都是合理的回復。
對于這種復雜的一對多的模式,神經網絡擬合起來往往非常棘手。在學習這樣一對多的數據的時候,會因為模型能力和數據匱乏導致最終學習的效果趨向于平庸,極易產生如“哈哈”、“嗯”這樣大家熟知的索然無味的“聊天終結語”。
預訓練模型近年來不管在自然語言理解還是在自然語言生成領域都產生了巨大的影響。利用通用語料進行預訓練,在目標領域上能用少量的數據得到很好的效果。
盡管如此,對話預訓練的效果因為上述原因仍然不能讓人滿意。為了解決這些問題,百度提出了基于飛槳開源深度學習平臺開發的一個新的對話生成框架——帶離散隱變量的對話生成預訓練模型“柏拉圖”(PLATO)。
隱變量較為普遍地在VAE、CVAE等技術中使用,但在論文中,作者們首次提出將離散的隱變量結合Transformer結構,應用到通用的對話領域。通過引入離散隱變量,可以對上文與回復之間的“一對多”關系進行有效建模。
同時,文章中通過利用大規模的與人人對話類似的語料,包括Reddit和Twitter,進行了生成模型的預訓練,后續在有限的人人對話語料上進行微調,即可以取得高質量的生成效果。
PLATO可以靈活支持多種對話,包括閑聊、知識聊天、對話問答等等。而文章最終公布的在三個公開對話數據集上的測試,PLATO都取得了新的最優效果。
模型介紹
在PLATO中,離散隱變量可以有K個取值,它的每個取值,是與一個回復中的意圖相對應的,或者可以理解為多樣化的對話的動作(Action)。
在PLATO的訓練中,有2個任務同步進行,且共享網絡參數:回復生成和隱變量識別。給定上文和離散隱變量的取值(即確定了回復中的意圖),生成任務會盡量最大化目標回復的似然概率。
同時,識別任務盡量估計給定上文和目標回復對應的隱變量取值。顯然,隱變量的準確識別,可以進一步提升回復生成的質量。
PLATO的網絡架構如圖1所示,由Transformer Blocks組成。針對多輪對話的輸入的表示方法,PLATO也進行了獨特的設計,每個token的Input Embedding是由對應的token、role、turn和position embedding相加得到。
預訓練中同步進行了2個任務——回復生成(Response Generation)和隱變量識別(Latent Act Recognition)。
在回復生成任務中,PLATO借鑒UniLM使用了靈活的注意力機制:對上文進行了雙向編碼,充分利用和理解上文信息;對回復我們進行了單向解碼,適應回復生成的Autoregressive特性。
在隱變量識別任務中,PLATO使用特殊符號[M]作為輸入,收集給定上文和目標回復的信息,用于估計回復意圖(即離散隱變量的取值)。
?
圖1 帶離散隱變量對話生成預訓練的網絡架構
PLATO訓練使用了三個目標函數(Loss Function)——negative log-likelihood (NLL) loss、bag-of-words (BOW) loss和response selection (RS) loss,如圖1最后一列所示。
在文本生成任務中,最常用的是NLL loss,PLATO引入了BOW loss是為了促進離散隱變量的訓練。此外,RS可以輔助判斷一個回復與上文的相關性。
PLATO的模型由大規模語義預訓練模型進行參數初始化,在預訓練中,PLATO使用了8.3M Twitter和Reddit對話樣本。預訓練的PLATO模型以及代碼,已經在GitHub上開源,開源地址見本文開頭部分。
實驗結果及分析
為了驗證預訓練模型的效果,論文在3個公開對話數據集上進行了測試:Persona-Chat、Daily Dialog以及DSTC7-AVSD。
Persona-Chat是典型的知識聊天任務:兩個人講述自己信息(Persona Profiles),并在對話中盡量了解對方;Daily Dialog偏向日常閑聊類型;DSTC7-AVSD是對話式問答,根據視頻場景信息,兩人進行多輪問答,討論視頻中物體和事件。
在每個數據集上的實驗,作者們對比了基線方法以及每個數據集上的SOTA方法。PLATO在Persona-Chat和Daily Dialog上的自動和人工評估結果,如表1所示。
?
表1 Persona-Chat和Daily Dialog上的評估結果
PLATO在DSTC7-AVSD上的結果,如表2所示。
?
表2 DSTC7-AVSD上的自動評估結果
由這些結果可見,PLATO在各個對話數據上,均超過了當前最優,取得了新的最優效果。
PLATO也與其他預訓練模型進行了對比,在Persona-Chat上的實驗結果如表3所示,其中2.2是不使用Latent Space的對比模型,3.1是完整PLATO模型。
?
表3 不同預訓練模型在Persona-Chat的PPL結果
通過對比這些結果,可以看出:
靈活的注意力機制可以充分利用上文的雙向信息(Model 1.2 v.s. Model 1.3);大規模的Twitter和Reddit語料,顯著改善回復生成(Group 2&3 v.s. Group 1);離散隱變量的引入,則可以進一步提升回復質量(Model 3.1 v.s. Model 2.2)。
對于PLATO的定性分析,論文也在表4中提供了一些case。給定一個上文,通過對離散隱變量進行不同賦值,PLATO可以產生多樣且都合理的回復。
?
表4 PLATO模型生成的回復
總結和未來工作
盡管越來越多的工作證明了隨著預訓練和大規模語料的引入,自然語言處理領域開啟了預訓練然后微調的范式。在對話模型上,大規模預訓練還處于初級階段,需要繼續深入探索。
論文提出的隱變量空間預訓練模型,可能成為端到端對話系統邁上一個新臺階的關鍵點之一。百度NLP也在持續優化當前對話模型,在不久的將來,更加強大的對話預訓練模型也許會被陸續披露。
如果您加入官方 QQ 群,您將遇上大批志同道合的深度學習同學。官方 QQ 群:703252161。
如果您想詳細了解更多飛槳的相關內容,請參閱以下文檔。
- Dialogue-PLATO項目地址:https://github.com/PaddlePaddle/Research/tree/master/NLP/Dialogue-PLATO
- 官網地址:https://www.paddlepaddle.org.cn
- 飛槳開源框架項目地址:
GitHub: https://github.com/PaddlePaddle/Paddle
Gitee: https://gitee.com/paddlepaddle/Paddle
總結
以上是生活随笔為你收集整理的对话预训练_百度发布首个大规模隐变量对话模型PLATO的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eclipse集成lombok了但是无法
- 下一篇: pr如何处理音效_Pr基础全通关:从0到