用RNN實現機器寫詩,機器寫作思路發展歷程你必須了解!
編者按:本文原作者蕭瑟,原載於作者的知乎專欄,雷鋒網 AI 研習社已獲授權。文中所有鏈接詳見文末「閱讀原文」。
引言
什麼是藝術?
機器的作品能否叫藝術?
機器能否取代藝術家?
這些問題,相信不同的人,會有不同的答案。很多人認為機器生成的作品只是簡單的模仿人類,沒有創造性可言,但是人類藝術家,不也是從模仿和學習開始的嗎?本文是為 PaperWeekly 寫的一篇機器詩歌生成的綜述文章,希望能增進大家對這個領域的了解。
詩歌是人類文學皇冠上的明珠。我國自《詩經》以後,兩千年來的詩篇燦若繁星。讓機器自動生成詩歌,一直是人工智慧領域一個有挑戰性的工作。
基於傳統方法的詩歌生成
機器詩歌生成的工作,始於 20 世紀 70 年代。傳統的詩歌生成方法,主要有以下幾種:
Word Salada(詞語沙拉):是最早期的詩歌生成模型,被稱作只是簡單將詞語進行隨機組合和堆砌而不考慮語義語法要求。
基於模板和模式的方法:基於模板的方法類似於完形填空,將一首現有詩歌挖去一些詞,作為模板,再用一些其他詞進行替換,產生新的詩歌。這種方法生成的詩歌在語法上有所提升,但是靈活性太差。因此後來出現了基於模式的方法,通過對每個位置詞的詞性,韻律平仄進行限制,來進行詩歌生成。
基於遺傳演算法的方法:周昌樂等[1]提出並應用到宋詞生成上。這裡將詩歌生成看成狀態空間搜索問題。先從隨機詩句開始,然後藉助人工定義的詩句評估函數,不斷進行評估,進化的迭代,最終得到詩歌。這種方法在單句上有較好的結果,但是句子之間缺乏語義連貫性。
基於摘要生成的方法:嚴睿等[2]將詩歌生成看成給定寫作意圖的摘要生成問題,同時加入了詩歌相關的一些優化約束。
基於統計機器翻譯的方法:MSRA 的何晶和周明[3]將詩歌生成看成一個機器翻譯問題,將上一句看成源語言,下一句看成目標語言,用統計機器翻譯模型進行翻譯,並加上平仄押韻等約束,得到下一句。通過不斷重複這個過程,得到一首完整的詩歌。
基於深度學習技術的詩歌生成
傳統方法非常依賴於詩詞領域的專業知識,需要專家設計大量的人工規則,對生成詩詞的格律和質量進行約束。同時遷移能力也比較差,難以直接應用到其他文體(唐詩,宋詞等)和語言(英文,日文等)。隨著深度學習技術的發展,詩歌生成的研究進入了一個新的階段。
RNNLM
基於 RNN 語言模型 [4] 的方法,將詩歌的整體內容,作為訓練語料送給 RNN 語言模型進行訓練。訓練完成後,先給定一些初始內容,然後就可以按照語言模型輸出的概率分布進行採樣得到下一個詞,不斷重複這個過程就產生完整的詩歌。Karpathy 有一篇文章,非常詳細的介紹這個:The Unreasonable Effectiveness of Recurrent Neural Networks
Chinese Poetry Generation with Recurrent Neural Networks
RNNPG 模型[5],首先由用戶給定的關鍵詞生成第一句,然後由第一句話生成第二句話,由一,二句話生成第三句話,重複這個過程,直到詩歌生成完成。模型的模型由三部分組成:
Convolutional Sentence Model(CSM):CNN 模型,用於獲取一句話的向量表示。
Recurrent Context Model (RCM):句子級別的 RNN,根據歷史生成句子的向量,輸出下一個要生成句子的 Context 向量。
Recurrent Generation Model (RGM):字元級別 RNN,根據 RCM 輸出的 Context 向量和該句之前已經生成的字元,輸出下一個字元的概率分布。解碼的時候根據 RGM 模型輸出的概率和語言模型概率加權以後,生成下一句詩歌,由人工規則保證押韻。
模型結構如下圖:
模型生成例子如下圖:
Chinese Song Iambics Generation with Neural Attention-based Model
模型[6]是基於 attention 的 encoder-decoder 框架,將歷史已經生成的內容作為源語言,將下一句話作為目標語言進行翻譯。需要用戶提供第一句話,然後由第一句生成第二句,第一,二句生成第三句,並不斷重複這個過程,直到生成完整詩歌。
基於 Attention 機制配合 LSTM,可以學習更長的詩歌,同時在一定程度上,可以保證前後語義的連貫性。
模型結構如下圖:
模型生成例子如下圖:
Chinese Poetry Generation with Planning based Neural Network
模型[8]不需要專家知識,是一個端到端的模型。它試圖模仿人類開始寫作前,先規劃一個寫作大綱的過程。整個詩歌生成框架由兩部分組成:規劃模型和生成模型。
規劃模型:將代表用戶寫作意圖的 Query 作為輸入,生成一個寫作大綱。寫作大綱是一個由主題片語成的序列,第 i 個主題詞代表第 i 句的主題。
生成模型:基於 encoder-decoder 框架。有兩個 encoder, 其中一個 encoder 將主題詞作為輸入,另外一個 encoder 將歷史生成的句子拼在一起作為輸入,由 decoder 生成下一句話。decoder 生成的時候,利用 Attention 機制,對主題詞和歷史生成內容的向量一起做打分,由模型來決定生成的過程中各部分的重要性。
前面介紹的幾個模型,用戶的寫作意圖,基本只能反映在第一句,隨著生成過程往後進行,後面句子和用戶寫作意圖的關係越來越弱,就有可能發生主題漂移問題。而規劃模型可以使用戶的寫作意圖直接影響整首詩的生成,因此在一定程度上,避免了主題漂移問題,使整首詩的邏輯語義更為連貫。
總體框架圖如下:
生成模型框架圖如下:
詩歌圖靈測試:給定一個題目,讓機器和人分別做一首詩 ,由人來區分哪首詩是人寫的。實驗結果也很有意思,對普通人來說,已經無法區分詩是由機器生成的還是人生成的,下面是一組測試的例子:
現代概念詩歌生成例子:
i, Poet: Automatic Poetry Composition through Recurrent Neural Networks with Iterative Polishing Schema
模型[7]基於 encoder-decoder 框架。encoder 階段,用戶提供一個 Query 作為自己的寫作意圖, 由 CNN 模型獲取 Query 的向量表示。decoder 階段,使用了 hierarchical 的 RNN 生成框架,由句子級別和詞級別兩個 RNN 組成。
句子級別 RNN:輸入句子向量表示,輸出下一個句子的 Context 向量。
字元級別 RNN:輸入 Context 向量和歷史生成字元,輸出下一個字元的概率分布。當一句生成結束的時候,字元級別 RNN 的最後一個向量,作為表示這個句子的向量,送給句子級別 RNN。
這篇文章一個比較有意思的地方,是想模擬人類寫詩反覆修改的過程,加入了打磨機制。反覆迭代來提高詩歌生成質量。
總體框架圖如下:
Generating Topical Poetry
模型[9]基於 encoder-decoder 框架,分為兩步。先根據用戶輸入的關鍵詞得到每句話的最後一個詞,這些詞都押韻且與用戶輸入相關。再將這些押韻詞作為一個序列,送給 encoder, 由 decoder 生成整個詩歌。這種機制一方面保證了押韻,另外一方面,和之前提到的規劃模型類似,在一定程度上避免了主題漂移問題。
模型框架圖如下:
生成例子如下:
SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient
模型[10]將圖像中的對抗生成網路,用到文本生成上。生成網路是一個 RNN,直接生成整首詩歌。而判別網路是一個 CNN。用於判斷這首詩歌是人寫的,還是機器生成的,並通過強化學習的方式,將梯度回傳給生成網路。
模型框架圖如下:
總結
從傳統方法到深度學習,詩歌生成技術有了很大發展,甚至在一定程度上,已經可以產生普通人真假難辨的詩歌。但是目前詩歌生成技術,學習到的仍然只是知識的概率分布,即詩句內,詩句間的搭配規律。而沒有學到詩歌蘊含思想感情。因此儘管生成的詩歌看起來有模有樣,但是仍然感覺只是徒有其表,缺乏一絲人的靈性。
另外一方面,詩歌不像機器翻譯有 BLEU 作為評價指標,目前仍然依賴人工的主觀評價,缺乏可靠的自動評估方法,因此模型優化的目標函數和主觀的詩歌評價指標之間,存在較大的 gap,也影響了詩歌生成質量的提高。在圍棋博弈上,以 AlphaGo 為代表的機器已經超過了人類頂尖選手,但是在詩歌生成上,離人類頂尖詩人水平,尚有很長的路要走。
參考文獻
[1]一種宋詞自動生成的遺傳演算法及其機器實現
[2]i,Poet: Automatic Chinese Poetry Composition through a Generative Summarization Framework under Constrained Optimization
[3]Generating Chinese Classical Poems with Statistical Machine Translation Models
[4]Recurrent neural network based language model
[5]Chinese Poetry Generation with Recurrent Neural Networks
[6]Chinese Song Iambics Generation with Neural Attention-based Model
[7]i, Poet: Automatic Poetry Composition through Recurrent Neural Networks with Iterative Polishing Schema
[8]Chinese Poetry Generation with Planning based Neural Network
[9]Generating Topical Poetry
[10]SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient
※最經典的SVM演算法在Spark上實現,這裡有一份詳盡的開發教程
※玩深度學習選哪塊英偉達 GPU?有性價比排名還不夠!
※如何用深度學習推薦電影?教你做自己的推薦系統!
※10行代碼,用大腦重量預測體重!矽谷AI網紅親身示範
※為什麼國內智能音箱難敵 Amazon Echo和Google Home?
TAG:唯物 |
※基於注意力機制,機器之心帶你理解與訓練神經機器翻譯系統
※華為「打臉」自己,不做遊戲手機卻發布了這款機器!
※刺激戰場發現機器人別開槍!了解機器人行為後,裝備輕鬆湊齊!
※為什麼要研發機器人?因為不想變成「機器人」
※腦機介面技術新進展,機器可將人類思想轉成文字!
※造夢機又進一步!MIT研究出了能影響夢境主題的機器……牛掰了
※驚!恐怖機器人問世?未來軍用載具的機動模式論證
※我們試用了iRobot 兩款機器人 發現不做掃擦一體機是有原因的
※商店裡的機器人如何發揮大作用?
※想變就變!「未來機器戰士」——液態金屬機器人真的來了!
※採用沉浸式3D虛擬現實技術模擬機器人焊接,就像看電影一樣!
※機器學習不能做什麼?
※目前的商用機器人能夠完成些什麼工作?
※機器是如何做閱讀理解的?
※當,程序員突然想畫畫,AI+機器人就該登場了
※匠人情懷能否用機器產出?
※機器人的模擬程度已經很逼真,能創造出戀愛機器人嗎?
※你敢讓機器人幫你做手術嗎?
※掃地機器人實用嗎?
※真正的機器人手機見過沒?走路唱歌跳舞和你聊天無所不能!