學界 | TreeGAN:為序列生成任務構建有句法意識的GAN
選自
arXiv
作
者: Xinyue Liu、Xiangnan Kong、Lei Liu、Kuorong Chiang
機器之心編譯
參與
:Geek AI、張倩
生成對抗網路(GAN)在圖像生成領域表現出了很強的能力。最近,GAN 從圖像生成領域擴展到了序列生成領域。用於序列生成的現有 GAN 主要關注的是一些語法無關的一般序列。然而,在許多實際應用程序中,我們需要生成一種形式語言的序列,並受相應語法的約束。生成這樣的序列非常具有挑戰性。為了解決這些問題,本文研究了通過 GAN 實現的有句法意識的序列生成問題,提出了一個新的 GAN 框架——TreeGAN,將給定的上下文無關文法(CFG)融入序列生成過程中。本文證明了 TreeGAN 可以為任何 CFG 生成序列,它的生成完全符合給定的句法。在合成和真實數據集上的實驗表明,TreeGAN 顯著提高了上下文無關語言中序列生成的質量。
1. 引言
生成對抗網路是由生成網路和判別網路組成的無監督學習框架。我們將它們稱為生成器(G)和判別器(D)。D 學著去區分某個數據實例是來自真實世界還是人為合成的。G 試圖通過生成高質量的合成實例來迷惑 D。在 GAN 框架中,D 和 G 被不斷地輪流訓練直到它們達到納什均衡。訓練好的 GAN 會得到一個能夠產生看起來與真實數據十分相似的高質量數據實例的生成器。
受到其在圖像生成和相關領域取得的巨大成功的啟發,GAN[1] 最近已經被擴展到序列生成任務中 [2,3]。用於序列生成的 GAN 在現實世界中有許多重要的應用。例如,為了給一個資料庫構建一個良好的查詢優化器,研究人員可能希望生成大量高質量的合成 SQL 查詢語句對優化器進行基準對比測試。不同於圖像生成任務,大多數語言都有其固有的語法或句法。現有的用於序列生成的 GAN 模型 [2,3,7] 主要著眼於如圖 1a 所示的句法無關(grammar-free)的環境。這些方法試圖從數據中學習到複雜的底層句法和語法模式,這通常是非常具有挑戰性的,需要大量的真實數據樣本才能取得不錯的性能。在許多形式語言中,語法規則或句法(例如,SQL 句法,Python PL 句法)是預定義好的。將這樣的句法引入到 GAN 的訓練中,應該會得出一個具有句法意識的更好的序列生成器,並且在訓練階段顯著縮小搜索空間。有句法意識的現有序列生成模型 [4] 主要是通過極大似然估計(MLE)進行訓練的,它們高度依賴於真實數據樣本的質量和數量。一些研究 [2,5] 表明,對抗性訓練可以進一步提高基於極大似然估計的序列生成性能。即使有句法意識的現有序列生成方法引入了語法信息,其生成結果也可能不是最好的。
圖 1:兩個問題設定背景的比較。(a)句法無關的序列生成問題。僅僅使用了一組真實序列訓練生成器,生成的序列可能會出現句法錯誤。(b)有句法意識的序列生成問題。除了一組真實序列(方框左側頂部),我們還給出了一套句法規則作為先驗知識(方框右側頂部,例如「A 7→ A, A」和「B 7→ 表名」)。在每個步驟中,生成器都遵循一個或多個預定義的規則(輸出箭頭中間的小方框,如「R1」、「R2」等)來構造一個序列(虛線框),該序列與實際序列相類似並且遵循語法。
為了解決上述問題,我們深入研究了在預定義的語法環境下使用 GAN 生成序列的問題。我們在圖 1b 中闡述了這個問題,其中給出了一個真實序列的語料庫(方框左側頂部)和一組語法規則(方框右側頂部)作為輸入。我們的目的是學到一個生成網路 G,使其能夠根據給定的語法構建高質量序列,同時通過對抗性訓練模擬真實序列。我們根據著名的喬姆斯基層級(Chomsky hierarchy)[8] 將研究重點放在上下文無關語法(Context-Free Grammar,CFG)上,它可以應用於許多現有的形式語言。上下文無關語法的正式定義在本文的第二章-C 中給出。據我們所知,我們的工作是第一份致力於為序列生成任務構建一個有句法意識的 GAN 的研究工作。
雖然 GAN 在很多任務上都取得了成功,想要學習到這樣一個具有句法意識的生成網路並非易事,它面臨著如下挑戰:
確保句法的正確性:保證句法正確性的困難是序列生成器與生俱來的:它依次逐個生成單詞。大多數語法模型都適用一種自頂向下的結構,例如用樹形結構來抽象語法信息。為了充分實現句法意識,序列生成器必須遵循一定的語法樹結構。然而,語法樹的結構可能有很大的區別,序列生成器不可能涵蓋所有可能存在的樹形結構情況。
跟蹤不完整短語的句法狀態:循環神經網路(RNN)通常在序列生成任務中被用作生成器,它在每個步驟中將生成的單詞的摘要存儲在其隱藏狀態中。然而這樣的摘要並沒有跟蹤部分生成的序列中的句法信息,這會導致整個序列中可能出現句法錯誤。為了構建一個有句法意識的生成器,我們需要建立一種機制,使 RNN 能夠在生成序列時存儲完整的句法信息,並跟蹤當前狀態。
有句法意識的判別器:判別器是一個 GAN 框架的關鍵組成部分,應該根據待研究任務的特性專門設計。DCGAN 使用了卷積神經網路(CNN)[9] 作為判別器在圖像表示和生成方面取得了更好的模型性能。而 MaskGAN[6 ] 則使用了 LSTM[10] 作為判別器訓練序列生成器,用來填補缺失的文本。在我們的問題中,簡單地使用 LSTM 或 CNN 作為判別模型可能會遺漏關鍵的語法模式,這會讓 GAN 框架得到一個較弱的分類器。因此,對於具有句法感知能力的序列生成任務來說,需要精心設計一個量身定做的判別器,從而對序列中豐富的語法信息進行恰當的編碼,引導生成器更好地獲取底層句法模式。
預訓練:生成器和判別器通常都需要適當的預訓練。然而,由於我們是首次使用 GAN 研究該問題,尚不清楚如何為有句法意識的序列生成任務設計一個合適的預訓練策略。
為了解決上述問題,我們提出了一個新的 GAN 模型,稱為 TreeGAN。TreeGAN 納入了一套語法規則並且學著生成解析樹,而不是直接生成序列。每棵生成的樹都對應於一個序列,該序列在給定的語法下是正確的。這種方法對生成器有嚴格的限制,並且保證了生成序列的句法正確性。我們將在第三章-B 中詳細介紹如何應用這些限制。由於 TreeGAN 的生成器生成的是樹而不是普通的序列,基本的 RNN/LSTM 並不再是判別器的最佳選擇。為了更好地區分假解析樹(不正確的人為合成的解析樹)和真解析樹,我們在對抗訓練中使用 TreeLSTM [11] 指導樹生成器,本文的第三章-C 將會介紹詳細細節。相應的預訓練策略將在第三章-D 中討論。現將本文的貢獻總結如下:
我們將序列生成任務轉化為解析樹生成任務,從而有效地引入結構化的信息。我們說明了在一個上下文無關句法環境下的序列可以被轉換為相應的解析樹,這在 TreeGAN 中被用於指導生成器生成真實的解析樹。
我們提出了一個樹生成器,它使用 LSTM 生成遵循預定義的上下文無關語法的解析樹。
我們提出了一個名為 TreeGAN 的對抗訓練框架,其中使用樹結構的 LSTM 模型 [11] 作為判別器指導樹生成器構建解析樹。
在合成數據集和真實數據集上進行的大量實驗表明,本文提出的 TreeGAN 框架可以根據預定義的上下文無關語法生成高質量的文本/序列。
圖 2: 相關的 GAN 模型的對比。「D」代表 GAN 模型的判別器,「G」代表生成器。(a)DCGAN[5](b)MaskGAN[6](c)TreeGAN(本文提出的模型)
論文:TreeGAN: Syntax-Aware Sequence Generation with Generative Adversarial Networks
論文鏈接:https://arxiv.org/abs/1808.07582
生成對抗網路(GAN)在圖像生成領域表現出了很強的能力,GAN 框架中有一個指導生成器模型進行訓練的判別器模型,從而構建與真實圖像極為相似的圖像。最近,GAN 從圖像生成領域擴展到了序列生成領域(例如,詩歌、音樂和代碼)。用於序列生成的現有 GAN 主要關注的是一些語法無關的一般序列。然而,在許多實際應用程序中,我們需要生成一種形式語言的序列,並受相應語法的約束。例如,為了測試資料庫的性能,可能需要生成一組 SQL 查詢語句,這些查詢不僅需要與真實的用戶查詢相類似,還需要遵循目標資料庫的 SQL 句法。生成這樣的序列非常具有挑戰性,因為 GAN 的生成器和判別器都需要考慮序列的結構和形式語言中給定的語法。為了解決這些問題,我們研究了通過 GAN 實現的有句法意識的序列生成問題,在該問題中,判別器和生成器同時獲得了一組真實序列和一組預定義的語法規則。我們提出了一個新的 GAN 框架,即 TreeGAN,將給定的上下文無關文法(CFG)融入序列生成過程中。在 TreeGAN 中,生成器使用循環神經網路(RNN)來構造解析樹。然後,可以將每個生成的解析樹轉換為給定語法的正確序列。判別器使用樹結構的 RNN 來區分生成的樹和真實的樹。我們證明了 TreeGAN 可以為任何 CFG 生成序列,它的生成完全符合給定的句法。在合成和真實數據集上的實驗表明,TreeGAN 顯著提高了上下文無關語言中序列生成的質量。
圖 7:在 SQL-B 上進行的定量分析
表 3:SQL—B 中的 SQL 查詢語句生成結果。句法錯誤用紅字標註。
圖 8:在 Django 上進行的定量分析
表 4:Django 中生成的 Python 代碼。句法錯誤用紅字標註。
圖 3:左圖:序列「010010」的解析樹。右圖:用於生成左圖所示的解析樹的動作序列。實線箭頭表示動作流的時間順序,虛線肩頭表示上一層嵌入的輸入(參見第三章-B)
圖 4: 圖 3 所示的解析樹的生成過程。生成器維護了一個父棧(灰色的列)和一個子棧(黃色的列),當前節點(子棧下方的黃色方框)及其父節點(灰色方框)在每個生成步驟中分別從兩個棧中彈出。棧中的紅色元素指的是在每一步中壓入棧的元素。當兩個棧都為空時停止序列生成。
本文為機器之心編譯,
轉載請聯繫本公眾號獲得授權
。?------------------------------------------------
加入機器之心(全職記者 / 實習生):hr@jiqizhixin.com
投稿或尋求報道:
content
@jiqizhixin.com廣告 & 商務合作:bd@jiqizhixin.com
※機器之心發布《全球500強AI戰略適應性報告》:縱覽上市公司落地AI得與失
※學界 | 自動生成高效DNN,適用於邊緣設備的生成合成工具FermiNets
TAG:機器之心 |