天天看點

微軟研究院開源DialoGPT:「你有什麼夢想?」「讓世界充滿機器人」

微軟研究院開源DialoGPT:「你有什麼夢想?」「讓世界充滿機器人」

利用微軟 DialoGPT 生成的對話結果示例。

DialoGPT 是一種用于對話響應生成的可調節式千兆詞級神經網絡模型,其訓練基于 Reddit 資料。該研究成果的源代碼已經開源,另外他們也釋出了一個大規模預訓練模型。

近來,使用基于 transformer 的架構進行大規模預訓練方面進展頗豐(Radford et al., 2018; Devlin et al., 2019; Raffel et al., 2019),這些進展也在實踐中取得了巨大的成功。舉個例子,OpenAI 的 GPT-2(Radford et al., 2018)表明在大型資料集上訓練的 transformer 模型能夠捕獲文本資料中的長程依賴性,進而生成流暢、詞法多樣以及内容豐富的文本。這樣的模型有能力習得細粒度的文本資料,并得到能近似模仿人類所寫的真實世界文本的高分辨率輸出。

 DialoGPT 是對 GPT-2 的擴充,目标是解決對話神經響應生成中的挑戰性難題。神經響應生成是文本生成的一個子類。而文本生成任務的目标都是生成與提示有關聯的看起來自然的文本(同時又與任何訓練執行個體都不同)。但是,模組化對話面臨着很多顯著的難題,因為人類對話中兩個參與者的目标可能是互相抵觸的,而且可能響應的範圍在本質上也更具多樣性。是以,對話生成中的一對多問題通常比神經機器翻譯、文本摘要和文本釋義等其它文本生成任務的問題更為困難。人類對話通常更加不正式、噪聲更多,而當以文本形式聊天時,通常還含有非正式的縮寫或句法/詞法錯誤。

類似于 GPT-2,DialoGPT 是以自回歸語言模型的形式建構的,其模型架構使用了多層 transformer。但不同于 GPT-2,DialoGPT 的訓練使用了從 Reddit 讨論鍊中提取出的大規模對話對/會話。作者猜想這應該能讓 DialoGPT 學到對話流中更細粒度的 P(Target, Source) 的聯合分布。他們在實踐中也觀察到了這一現象:DialoGPT 生成的句子豐富多樣而且包含特定于源提示的資訊,類似于 GPT-2 為連續文本生成的結果。

 作者在一個公開的基準資料集(DSTC-7)和一個新的從 Reddit 文章中提取出的 6k 大小的多參照測試資料集上對新提出的預訓練模型進行了評估。結果表明,DialoGPT 在自動評估和人類評估方面都取得了目前最佳的表現,将對話生成結果的品質提升到了接近人類的水準。

 作者已經公布了本研究的源代碼與預訓練模型。作者表示,這種模型使用簡單,能夠輕松地适應新的對話資料集,尤其是訓練樣本較少的資料集。這個 DialoGPT 軟體包還包含一個開源的基于 Huggingface PyTorch transformer(HuggingFace, 2019)建構的訓練工作流程(資料提取/準備和模型訓練/評估)。

方法 

模型架構

 DialoGPT 模型基于 GPT-2 架構。它從 GPT-2 繼承了帶有層歸一化的 12 到 24 層 transformer、一種适用于經過作者修改的模型深度的初始化方案,用于 token 化器的位元組對編碼(Sennrich et al., 2016)。遵照 OpenAI 的 GPT-2 方法,作者将多輪對話會話模組化為了長文本,将生成任務納入到了語言模組化任務的架構中。

 作者首先将一個對話會話中所有對話回合連接配接成一個長文本 x_1, · · · , x_N(N 為序列長度),并以「文本結束 token」結束。可将源句子(對話曆史)記為 S = x_1, · · · , x_m,将目标句子(基本真值響應)記為 T = x_{m+1}, · · · , x_N,則 P(T|S) 的條件分布可以寫為一系列條件機率的積: 

微軟研究院開源DialoGPT:「你有什麼夢想?」「讓世界充滿機器人」

對于多輪對話執行個體 T_1, · · · , T_K,(1)式可寫為 p(T_K, · · · , T_2|T_1),這本質上就是 p(T_i |T_1, · · · , T_{i−1}) 的條件機率的積。最終,對單個目标 p(T_K, · · · , T_2|T_1) 的優化可以被視為是優化所有的 p(T_i |T_1, · · · , T_{i−1}) 源-目标對。作者這裡的實作基于開源的 PyTorch-transformer 庫。

連結:

https://github.com/huggingface/pytorch-transformers

互資訊最大化

 開放域文本生成模型有一個衆所周知的困難,即會生成枯燥的、沒有資訊的樣本。為了解決這個問題,作者實作了一個最大互資訊(MMI)評分函數(Li et al., 2016a; Zhang et al., 2018)。MMI 是利用一個預訓練的後向模型來預測給定響應的源句子,即 P(Source|target)。作者首先使用 top-K 采樣生成一組假設,然後使用 P(Source|Hypothesis) 的機率來對所有假設重新排序。直覺來看,最大化後向模型似然會對所有枯燥的假設施加懲罰,因為頻繁的和重複性的假設可能與很多可能的查詢有關,是以在任意特定查詢下得到的機率會更低。

 作者也嘗試了使用政策梯度來優化獎勵

微軟研究院開源DialoGPT:「你有什麼夢想?」「讓世界充滿機器人」

,其中與 Zhang et al. (2018) 一樣使用了一種樣本平均的基線。這個驗證獎勵可以得到穩定提升,但不同于 RNN 架構下的訓練,作者觀察到強化學習訓練容易收斂到某個劣化的局部最優解,這時的假設僅僅是對源句子的重複(即學舌模式),此時的互資訊是最大化的。作者猜想,由于 transformer 具有強大的模型表征能力,是以它們很容易陷入局部最優位置。但強化學習訓練規範化的相關工作還有待未來研究。

結果 

作者将 DialoGPT 與另外兩個基準進行了比較:作者自己内部的基于 (Li et al., 2016a) 的序列到序列模型 PersonalityChat,這個模型是基于 Twitter 資料訓練的,已經在微軟 Azure 的 Cognitive Service 得到了實際應用。表 2 總結了自動化評估的結果。有 345M 個參數的 DialoGPT 以及波束搜尋在幾乎所有基準上都得到了最高的自動評估分數。

微軟研究院開源DialoGPT:「你有什麼夢想?」「讓世界充滿機器人」

表 2:DSTC 評估

作者進一步在一個有 6K 個樣本的多參照測試集上評估了 DialoGPT。結果見表 3。測試過程使用了兩種設定:從頭開始訓練以及使用 GPT-2 作為預訓練模型進行微調。在這兩種設定中,更大的模型都總是優于更小的模型。另外表 3 的倒數第二行總結了執行互資訊最大化的結果。

微軟研究院開源DialoGPT:「你有什麼夢想?」「讓世界充滿機器人」

表 3:6K Reddit 多參照評估

表 4(互動式聊天)和表 5(有使用者提示的自播放聊天)給出了一些生成對話的樣本。

微軟研究院開源DialoGPT:「你有什麼夢想?」「讓世界充滿機器人」

表 4:解決常識問題

微軟研究院開源DialoGPT:「你有什麼夢想?」「讓世界充滿機器人」

表 5:多輪對話的互動式示例

有趣的是,新提出的模型表現出了在一定程度上解決常識問題的能力,作者猜想這可能要歸功于 Reddit 資料中可以學習到的豐富資訊。在某些案例中,模型并不是給出「所需的」答案,而會生成另一個可替代的合理答案。作者觀察到,該系統能比 RNN 對話生成系統更好地處理多輪對話生成,而且往往在上下文方面更能保持一緻(表 5)。

 作者還通過衆包評估了從 Reddit 6K 測試資料集随機采樣的 2000 個測試源。系統經過了配對,每一對系統的輸出都被随機呈現給 3 位評判者,他們會根據相關性、資訊量和生成結果與人類結果的相似程度使用一個 3 分制的類 Likert 度量對這些結果進行排名。作者先要求這些評判者經過了一個資格測試,并采用了一種垃圾檢測制度。表 7 給出了評判者在相關性、資訊量和人類相似度方面的整體偏好,結果用原始數值與占整體的百分比來表示。

微軟研究院開源DialoGPT:「你有什麼夢想?」「讓世界充滿機器人」

表 7:在相關性、資訊量和人類響應可能性方面的人類評估結果

表 7 還表明「單純」的 DialoGPT 基質模型可能就已經能達到與人類響應相近的品質了。

繼續閱讀