0
引言
什么是藝術(shù)?
機(jī)器的作品能否叫藝術(shù)?
機(jī)器能否取代藝術(shù)家?
這些問(wèn)題,相信不同的人,會(huì)有不同的答案。很多人認(rèn)為機(jī)器生成的作品只是簡(jiǎn)單的模仿人類(lèi),沒(méi)有創(chuàng)造性可言,但是人類(lèi)藝術(shù)家,不也是從模仿和學(xué)習(xí)開(kāi)始的嗎?本文是為 PaperWeekly 寫(xiě)的一篇機(jī)器詩(shī)歌生成的綜述文章,希望能增進(jìn)大家對(duì)這個(gè)領(lǐng)域的了解。
詩(shī)歌是人類(lèi)文學(xué)皇冠上的明珠。我國(guó)自《詩(shī)經(jīng)》以后,兩千年來(lái)的詩(shī)篇燦若繁星。讓機(jī)器自動(dòng)生成詩(shī)歌,一直是人工智能領(lǐng)域一個(gè)有挑戰(zhàn)性的工作。
基于傳統(tǒng)方法的詩(shī)歌生成
機(jī)器詩(shī)歌生成的工作,始于 20 世紀(jì) 70 年代。傳統(tǒng)的詩(shī)歌生成方法,主要有以下幾種:
Word Salada(詞語(yǔ)沙拉):是最早期的詩(shī)歌生成模型,被稱(chēng)作只是簡(jiǎn)單將詞語(yǔ)進(jìn)行隨機(jī)組合和堆砌而不考慮語(yǔ)義語(yǔ)法要求。
基于模板和模式的方法:基于模板的方法類(lèi)似于完形填空,將一首現(xiàn)有詩(shī)歌挖去一些詞,作為模板,再用一些其他詞進(jìn)行替換,產(chǎn)生新的詩(shī)歌。這種方法生成的詩(shī)歌在語(yǔ)法上有所提升,但是靈活性太差。因此后來(lái)出現(xiàn)了基于模式的方法,通過(guò)對(duì)每個(gè)位置詞的詞性,韻律平仄進(jìn)行限制,來(lái)進(jìn)行詩(shī)歌生成。
基于遺傳算法的方法:周昌樂(lè)等 [1] 提出并應(yīng)用到宋詞生成上。這里將詩(shī)歌生成看成狀態(tài)空間搜索問(wèn)題。先從隨機(jī)詩(shī)句開(kāi)始,然后借助人工定義的詩(shī)句評(píng)估函數(shù),不斷進(jìn)行評(píng)估,進(jìn)化的迭代,最終得到詩(shī)歌。這種方法在單句上有較好的結(jié)果,但是句子之間缺乏語(yǔ)義連貫性。
基于摘要生成的方法:嚴(yán)睿等 [2] 將詩(shī)歌生成看成給定寫(xiě)作意圖的摘要生成問(wèn)題,同時(shí)加入了詩(shī)歌相關(guān)的一些優(yōu)化約束。
基于統(tǒng)計(jì)機(jī)器翻譯的方法:MSRA 的何晶和周明 [3] 將詩(shī)歌生成看成一個(gè)機(jī)器翻譯問(wèn)題,將上一句看成源語(yǔ)言,下一句看成目標(biāo)語(yǔ)言,用統(tǒng)計(jì)機(jī)器翻譯模型進(jìn)行翻譯,并加上平仄押韻等約束,得到下一句。通過(guò)不斷重復(fù)這個(gè)過(guò)程,得到一首完整的詩(shī)歌。
基于深度學(xué)習(xí)技術(shù)的詩(shī)歌生成
傳統(tǒng)方法非常依賴于詩(shī)詞領(lǐng)域的專(zhuān)業(yè)知識(shí),需要專(zhuān)家設(shè)計(jì)大量的人工規(guī)則,對(duì)生成詩(shī)詞的格律和質(zhì)量進(jìn)行約束。同時(shí)遷移能力也比較差,難以直接應(yīng)用到其他文體(唐詩(shī),宋詞等)和語(yǔ)言(英文,日文等)。隨著深度學(xué)習(xí)技術(shù)的發(fā)展,詩(shī)歌生成的研究進(jìn)入了一個(gè)新的階段。
RNNLM
基于 RNN 語(yǔ)言模型 [4] 的方法,將詩(shī)歌的整體內(nèi)容,作為訓(xùn)練語(yǔ)料送給 RNN 語(yǔ)言模型進(jìn)行訓(xùn)練。訓(xùn)練完成后,先給定一些初始內(nèi)容,然后就可以按照語(yǔ)言模型輸出的概率分布進(jìn)行采樣得到下一個(gè)詞,不斷重復(fù)這個(gè)過(guò)程就產(chǎn)生完整的詩(shī)歌。Karpathy 有一篇文章,非常詳細(xì)的介紹這個(gè):The Unreasonable Effectiveness of Recurrent Neural Networks
Chinese Poetry Generation with Recurrent Neural Networks
RNNPG 模型 [5],首先由用戶給定的關(guān)鍵詞生成第一句,然后由第一句話生成第二句話,由一,二句話生成第三句話,重復(fù)這個(gè)過(guò)程,直到詩(shī)歌生成完成。模型的模型由三部分組成:
Convolutional Sentence Model(CSM):CNN 模型,用于獲取一句話的向量表示。
Recurrent Context Model (RCM):句子級(jí)別的 RNN,根據(jù)歷史生成句子的向量,輸出下一個(gè)要生成句子的 Context 向量。
Recurrent Generation Model (RGM):字符級(jí)別 RNN,根據(jù) RCM 輸出的 Context 向量和該句之前已經(jīng)生成的字符,輸出下一個(gè)字符的概率分布。解碼的時(shí)候根據(jù) RGM 模型輸出的概率和語(yǔ)言模型概率加權(quán)以后,生成下一句詩(shī)歌,由人工規(guī)則保證押韻。
模型結(jié)構(gòu)如下圖:

模型生成例子如下圖:

Chinese Song Iambics Generation with Neural Attention-based Model
模型 [6] 是基于 attention 的 encoder-decoder 框架,將歷史已經(jīng)生成的內(nèi)容作為源語(yǔ)言,將下一句話作為目標(biāo)語(yǔ)言進(jìn)行翻譯。需要用戶提供第一句話,然后由第一句生成第二句,第一,二句生成第三句,并不斷重復(fù)這個(gè)過(guò)程,直到生成完整詩(shī)歌。
基于 Attention 機(jī)制配合 LSTM,可以學(xué)習(xí)更長(zhǎng)的詩(shī)歌,同時(shí)在一定程度上,可以保證前后語(yǔ)義的連貫性。
模型結(jié)構(gòu)如下圖:

模型生成例子如下圖:

Chinese Poetry Generation with Planning based Neural Network
模型 [8] 不需要專(zhuān)家知識(shí),是一個(gè)端到端的模型。它試圖模仿人類(lèi)開(kāi)始寫(xiě)作前,先規(guī)劃一個(gè)寫(xiě)作大綱的過(guò)程。整個(gè)詩(shī)歌生成框架由兩部分組成:規(guī)劃模型和生成模型。
規(guī)劃模型:將代表用戶寫(xiě)作意圖的 Query 作為輸入,生成一個(gè)寫(xiě)作大綱。寫(xiě)作大綱是一個(gè)由主題詞組成的序列,第 i 個(gè)主題詞代表第 i 句的主題。
生成模型:基于 encoder-decoder 框架。有兩個(gè) encoder, 其中一個(gè) encoder 將主題詞作為輸入,另外一個(gè) encoder 將歷史生成的句子拼在一起作為輸入,由 decoder 生成下一句話。decoder 生成的時(shí)候,利用 Attention 機(jī)制,對(duì)主題詞和歷史生成內(nèi)容的向量一起做打分,由模型來(lái)決定生成的過(guò)程中各部分的重要性。
前面介紹的幾個(gè)模型,用戶的寫(xiě)作意圖,基本只能反映在第一句,隨著生成過(guò)程往后進(jìn)行,后面句子和用戶寫(xiě)作意圖的關(guān)系越來(lái)越弱,就有可能發(fā)生主題漂移問(wèn)題。而規(guī)劃模型可以使用戶的寫(xiě)作意圖直接影響整首詩(shī)的生成,因此在一定程度上,避免了主題漂移問(wèn)題,使整首詩(shī)的邏輯語(yǔ)義更為連貫。
總體框架圖如下:

生成模型框架圖如下:

詩(shī)歌圖靈測(cè)試:給定一個(gè)題目,讓機(jī)器和人分別做一首詩(shī) ,由人來(lái)區(qū)分哪首詩(shī)是人寫(xiě)的。實(shí)驗(yàn)結(jié)果也很有意思,對(duì)普通人來(lái)說(shuō),已經(jīng)無(wú)法區(qū)分詩(shī)是由機(jī)器生成的還是人生成的,下面是一組測(cè)試的例子:

現(xiàn)代概念詩(shī)歌生成例子:

i, Poet: Automatic Poetry Composition through Recurrent Neural Networks with Iterative Polishing Schema
模型 [7] 基于 encoder-decoder 框架。encoder 階段,用戶提供一個(gè) Query 作為自己的寫(xiě)作意圖, 由 CNN 模型獲取 Query 的向量表示。decoder 階段,使用了 hierarchical 的 RNN 生成框架,由句子級(jí)別和詞級(jí)別兩個(gè) RNN 組成。
句子級(jí)別 RNN:輸入句子向量表示,輸出下一個(gè)句子的 Context 向量。
字符級(jí)別 RNN:輸入 Context 向量和歷史生成字符,輸出下一個(gè)字符的概率分布。當(dāng)一句生成結(jié)束的時(shí)候,字符級(jí)別 RNN 的最后一個(gè)向量,作為表示這個(gè)句子的向量,送給句子級(jí)別 RNN。
這篇文章一個(gè)比較有意思的地方,是想模擬人類(lèi)寫(xiě)詩(shī)反復(fù)修改的過(guò)程,加入了打磨機(jī)制。反復(fù)迭代來(lái)提高詩(shī)歌生成質(zhì)量。
總體框架圖如下:

Generating Topical Poetry
模型 [9] 基于 encoder-decoder 框架,分為兩步。先根據(jù)用戶輸入的關(guān)鍵詞得到每句話的最后一個(gè)詞,這些詞都押韻且與用戶輸入相關(guān)。再將這些押韻詞作為一個(gè)序列,送給 encoder, 由 decoder 生成整個(gè)詩(shī)歌。這種機(jī)制一方面保證了押韻,另外一方面,和之前提到的規(guī)劃模型類(lèi)似,在一定程度上避免了主題漂移問(wèn)題。
模型框架圖如下:

生成例子如下:

SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient
模型 [10] 將圖像中的對(duì)抗生成網(wǎng)絡(luò),用到文本生成上。生成網(wǎng)絡(luò)是一個(gè) RNN,直接生成整首詩(shī)歌。而判別網(wǎng)絡(luò)是一個(gè) CNN。用于判斷這首詩(shī)歌是人寫(xiě)的,還是機(jī)器生成的,并通過(guò)強(qiáng)化學(xué)習(xí)的方式,將梯度回傳給生成網(wǎng)絡(luò)。
模型框架圖如下:

總結(jié)
從傳統(tǒng)方法到深度學(xué)習(xí),詩(shī)歌生成技術(shù)有了很大發(fā)展,甚至在一定程度上,已經(jīng)可以產(chǎn)生普通人真假難辨的詩(shī)歌。但是目前詩(shī)歌生成技術(shù),學(xué)習(xí)到的仍然只是知識(shí)的概率分布,即詩(shī)句內(nèi),詩(shī)句間的搭配規(guī)律。而沒(méi)有學(xué)到詩(shī)歌蘊(yùn)含思想感情。因此盡管生成的詩(shī)歌看起來(lái)有模有樣,但是仍然感覺(jué)只是徒有其表,缺乏一絲人的靈性。
另外一方面,詩(shī)歌不像機(jī)器翻譯有 BLEU 作為評(píng)價(jià)指標(biāo),目前仍然依賴人工的主觀評(píng)價(jià),缺乏可靠的自動(dòng)評(píng)估方法,因此模型優(yōu)化的目標(biāo)函數(shù)和主觀的詩(shī)歌評(píng)價(jià)指標(biāo)之間,存在較大的 gap,也影響了詩(shī)歌生成質(zhì)量的提高。在圍棋博弈上,以 AlphaGo 為代表的機(jī)器已經(jīng)超過(guò)了人類(lèi)頂尖選手,但是在詩(shī)歌生成上,離人類(lèi)頂尖詩(shī)人水平,尚有很長(zhǎng)的路要走。
參考文獻(xiàn)
[1] 一種宋詞自動(dòng)生成的遺傳算法及其機(jī)器實(shí)現(xiàn)
[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
雷鋒網(wǎng)按:本文原作者蕭瑟,原載于作者的知乎專(zhuān)欄。
深度學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)特訓(xùn)班
20年清華大學(xué)神經(jīng)網(wǎng)絡(luò)授課導(dǎo)師鄧志東教授,帶你系統(tǒng)學(xué)習(xí)人工智能之神經(jīng)網(wǎng)絡(luò)理論及應(yīng)用!
課程鏈接:http://www.mooc.ai/course/65
加入AI慕課學(xué)院人工智能學(xué)習(xí)交流QQ群:624413030,與AI同行一起交流成長(zhǎng)
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。