當前位置:
首頁 > 知識 > AI 寫詩的演算法實現

AI 寫詩的演算法實現

引言


什麼是藝術?


機器的作品能否叫藝術?

機器能否取代藝術家?


這些問題,相信不同的人,會有不同的答案。很多人認為機器生成的作品只是簡單的模仿人類,沒有創造性可言,但是人類藝術家,不也是從模仿和學習開始的嗎?本文是一篇機器詩歌生成的綜述文章,希望能增進大家對這個領域的了解。


基於傳統方法的詩歌生成


詩歌是人類文學皇冠上的明珠。我國自《詩經》以後,兩千年來的詩篇燦若繁星。讓機器自動生成詩歌,一直是人工智慧領域一個有挑戰性的工作。機器詩歌生成的工作,始於20世紀70年代。傳統的詩歌生成方法,主要有以下幾種:

Word Salada(詞語沙拉):最早期的詩歌生成模型,只是簡單將詞語進行隨機組合和堆砌而不考慮語義語法要求。


基於模板和模式的方法:基於模板的方法類似於完形填空,將一首現有詩歌挖去一些詞,作為模板,再用一些其他詞進行替換,產生新的詩歌。這種方法生成的詩歌在語法上有所提升,但是靈活性太差。因此後來出現了基於模式的方法,通過對每個位置詞的詞性,韻律平仄進行限制,來進行詩歌生成。


基於遺傳演算法的方法:周昌樂等[1]提出並應用到宋詞生成上。這裡將詩歌生成看成狀態空間搜索問題。先從隨機詩句開始,然後藉助人工定義的詩句評估函數,不斷進行評估,進化的迭代,最終得到詩歌。這種方法在單句上有較好的結果,但是句子之間缺乏語義連貫性。


基於摘要生成的方法:嚴睿等[2]將詩歌生成看成給定寫作意圖的摘要生成問題,同時加入了詩歌相關的一些優化約束。


基於統計機器翻譯的方法:MSRA的何晶和周明[3]將詩歌生成看成一個機器翻譯問題,將上一句看成源語言,下一句看成目標語言,用統計機器翻譯模型進行翻譯,並加上平仄押韻等約束,得到下一句。通過不斷重複這個過程,得到一首完整的詩歌。

基於深度學習技術的詩歌生成


傳統方法非常依賴於詩詞領域的專業知識,需要專家設計大量的人工規則,對生成詩詞的格律和質量進行約束。同時遷移能力也比較差,難以直接應用到其他文體(唐詩,宋詞等)和語言(英文,日文等)。隨著深度學習技術的發展,詩歌生成的研究進入了一個新的階段。


RNNLM


基於RNN語言模型[4]的方法,將詩歌的整體內容,作為訓練語料送給RNN語言模型進行訓練。訓練完成後,先給定一些初始內容,然後就可以按照語言模型輸出的概率分布進行採樣得到下一個詞,不斷重複這個過程就產生完整的詩歌。Karpathy有一篇文章,講的很詳細:http://karpathy.github.io/2015/05/21/rnn-effectiveness/


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模型輸出的概率和語言模型概率加權以後,生成下一句詩歌,由人工規則保證押韻。

模型結構如下圖:


模型生成例子如下圖:

AI 寫詩的演算法實現



Chinese Song Iambics Generation with Neural Attention-based Model


模型[6]是基於attention的encoder-decoder框架,將歷史已經生成的內容作為源語言序列,將下一句要生成的話作為目標語言序列。需要用戶提供第一句話,然後由第一句生成第二句,第一,二句生成第三句,並不斷重複這個過程,直到生成完整詩歌。 基於Attention機制配合LSTM,可以學習更長的詩歌,同時在一定程度上,可以提高前後語義的連貫性。


模型結構如下圖:

AI 寫詩的演算法實現



模型生成例子如下圖:

AI 寫詩的演算法實現



Chinese Poetry Generation with Planning based Neural Network


模型[8]是一個端到端的模型,不需要專家領域知識。它試圖模仿人類寫作前先規劃一個寫作大綱的過程。整個詩歌生成框架由兩部分組成:規劃模型和生成模型。


規劃模型:將代表用戶寫作意圖的Query作為輸入,生成一個寫作大綱。寫作大綱是一個由主題片語成的序列,第i個主題詞代表第i句的主題。


生成模型:基於encoder-decoder框架。有兩個encoder,其中一個encoder處理主題詞,另外一個encoder處理歷史生成的句子,decoder負責生成下一句話。decoder生成的時候,利用Attention機制,對主題詞和歷史生成內容的向量一起做打分,由模型來決定生成的過程中各部分的重要性。


前面介紹的幾個模型,用戶的寫作意圖,基本只能反映在第一句,隨著生成過程往後進行,後面句子和用戶寫作意圖的關係越來越弱,就有可能發生主題漂移問題。而規劃模型可以使用戶的寫作意圖直接影響整首詩的生成,因此在一定程度上,避免了主題漂移問題,使整首詩的邏輯語義和情感更為連貫。


總體框架圖如下:

AI 寫詩的演算法實現



生成模型框架圖如下:

AI 寫詩的演算法實現



詩歌圖靈測試例子:

AI 寫詩的演算法實現



現代概念詩歌生成例子:

AI 寫詩的演算法實現



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。


總體框架圖如下:

AI 寫詩的演算法實現



Generating Topical Poetry


模型[9]基於encoder-decoder框架,分為兩步。先根據用戶輸入的關鍵詞得到每句話的最後一個詞,這些詞都押韻且與用戶輸入相關。再將這些押韻詞作為一個序列,送給encoder,由decoder生成整個詩歌。這種機制一方面保證了押韻,另外一方面,和之前提到的規劃模型類似,在一定程度上避免了主題漂移問題。


SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient


模型[10]將圖像中的對抗生成網路,用到文本生成上。生成網路是一個RNN,直接生成整首詩歌。而判別網路是一個CNN。用於判斷這首詩歌是人寫的,還是機器生成的,並通過強化學習的方式,將梯度回傳給生成網路。


模型框架圖如下:

AI 寫詩的演算法實現



總結


從傳統方法到深度學習,詩歌生成技術有了很大發展,甚至在一定程度上,已經可以產生普通人真假難辨的詩歌。但是目前詩歌生成技術,學習到的仍然只是知識的概率分布,即詩句內,詩句間的搭配規律。而沒有學到詩歌蘊含思想感情。因此儘管生成的詩歌看起來有模有樣,但是仍然感覺只是徒有其表,缺乏一絲人的靈性。


另外一方面,詩歌不像機器翻譯有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


作者


王哲,中國科學技術大學在讀碩士,研究方向為文本生成和深度學習。


博客freecoder.me

您的贊是小編持續努力的最大動力,動動手指贊一下吧!


本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科研圈 的精彩文章:

當我們在過春節時,人工智慧在做什麼?
華中科技大學吳鈺周教授課題組博士後招聘
內向的研究者如何「自我推銷」?
看見黑洞的四種方法
你今年的春節假期有多長?

TAG:科研圈 |

您可能感興趣

經典排序演算法總結與Go實現
遺傳演算法的基本概念和實現:附Java實現案例
冷撲大師背後的AI演算法和博弈論:CFR演算法是核心
漫畫演算法:最小棧的實現
遺傳演算法的基本概念和實現(附Java實現案例)
現在的AI演算法真的模擬了人腦嗎?
從理論到實踐,一文詳解 AI 推薦系統的三大演算法
遺傳演算法中幾種不同選擇運算元及 Python 實現
用演算法分析圖像,實現對神經元行為的精準「錄像」研究
演算法-快速排序演算法
GPA的5種演算法大PK 究竟哪個演算法分最高?
比 PS 大法好:谷歌發明批量自動去水印演算法
比PS大法好:谷歌發明批量自動去水印演算法
GAFT:一個使用 Python 實現的遺傳演算法框架
AI系統首次實現真正自主編程:利用遺傳演算法,完爆初級程序員
主要推薦系統演算法總結及Youtube深度學習推薦演算法實例概括
一文詳解神經網路 BP 演算法原理及 Python 實現
從梯度下降演算法的詳解及實現到共軛牛頓法等優化演算法的基本概念
「AI系統首次實現真正自主編程」利用遺傳演算法,完爆初級程序員