王哲作者

机器写诗

引言

什么是艺术?
机器的作品能否叫艺术?
机器能否取代艺术家?
这些问题,相信不同的人,会有不同的答案。很多人认为机器生成的作品只是简单的模仿人类,没有创造性可言,但是人类艺术家,不也是从模仿和学习开始的吗?本文是一篇机器诗歌生成的综述文章,希望能增进大家对这个领域的了解。

基于传统方法的诗歌生成

诗歌是人类文学皇冠上的明珠。我国自《诗经》以后,两千年来的诗篇灿若繁星。让机器自动生成诗歌,一直是人工智能领域一个有挑战性的工作。机器诗歌生成的工作,始于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模型输出的概率和语言模型概率加权以后,生成下一句诗歌,由人工规则保证押韵。
模型结构如下图:

模型生成例子如下图:

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

作者

王哲,中国科学技术大学在读硕士,研究方向为文本生成和深度学习

邮箱  xiaose@mail.ustc.edu.cn

知乎专栏  炼丹实验室 zhuanlan.zhihu.com/easyml

博客  freecoder.me

入门生成模型统计机器翻译深度学习语言模型
相关数据
神经网络技术
Neural Network

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

阿尔法围棋技术
AlphaGo

阿尔法围棋是于2014年开始由英国伦敦Google DeepMind公司开发的人工智能围棋程序。AlphaGo是第一个打败人类职业棋手的计算机程序,也是第一个打败围棋世界冠军的计算机程序,可以说是历史上最强的棋手。 技术上来说,AlphaGo的算法结合了机器学习(machine learning)和树搜索(tree search)技术,并使用了大量的人类、电脑的对弈来进行训练。AlphaGo使用蒙特卡洛树搜索(MCTS:Monte-Carlo Tree Search),以价值网络(value network)和策略网络(policy network)为指导,其中价值网络用于预测游戏的胜利者,策略网络用于选择下一步行动。价值网络和策略网络都是使用深度神经网络技术实现的,神经网络的输入是经过预处理的围棋面板的描述(description of Go board)。

生成模型技术
Generative Model

在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。 它给观测值和标注数据序列指定一个联合概率分布。 在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布。

逻辑技术
Logic

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

语言模型技术
Language models

语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。由于字词与句子都是任意组合的长度,因此在训练过的语言模型中会出现未曾出现的字串(资料稀疏的问题),也使得在语料库中估算字串的机率变得很困难,这也是要使用近似的平滑n元语法(N-gram)模型之原因。

机器翻译技术
Machine translation

机器翻译(MT)是利用机器的力量「自动将一种自然语言(源语言)的文本翻译成另一种语言(目标语言)」。机器翻译方法通常可分成三大类:基于规则的机器翻译(RBMT)、统计机器翻译(SMT)和神经机器翻译(NMT)。

目标函数技术
Objective function

目标函数f(x)就是用设计变量来表示的所追求的目标形式,所以目标函数就是设计变量的函数,是一个标量。从工程意义讲,目标函数是系统的性能标准,比如,一个结构的最轻重量、最低造价、最合理形式;一件产品的最短生产时间、最小能量消耗;一个实验的最佳配方等等,建立目标函数的过程就是寻找设计变量与目标的关系的过程,目标函数和设计变量的关系可用曲线、曲面或超曲面表示。

规划技术
Planning

人工智能领域的「规划」通常是指智能体执行的任务/动作的自动规划和调度,其目的是进行资源的优化。常见的规划方法包括经典规划(Classical Planning)、分层任务网络(HTN)和 logistics 规划。

查询技术
Query

一般来说,查询是询问的一种形式。它在不同的学科里涵义有所不同。在信息检索领域,查询指的是数据库和信息系统对信息检索的精确要求

强化学习技术
Reinforcement learning

强化学习是一种试错方法,其目标是让软件智能体在特定环境中能够采取回报最大化的行为。强化学习在马尔可夫决策过程环境中主要使用的技术是动态规划(Dynamic Programming)。流行的强化学习方法包括自适应动态规划(ADP)、时间差分(TD)学习、状态-动作-回报-状态-动作(SARSA)算法、Q 学习、深度强化学习(DQN);其应用包括下棋类游戏、机器人控制和工作调度等。

时间递归神经网络技术
Recurrent neural network

循环神经网络(RNN)是一类擅长处理序列数据的神经网络,其单元连接形成一个有向环。一般人工神经网络(ANN)由多层神经元组成,典型的连接方式是在前馈神经网络中,仅存在层与层之间的互相连接,而同层神经元之间没有连接。RNN在此基础上结合了隐藏层的循环连接,从而能从序列或时序数据中学习特征和长期依赖关系。RNN隐藏层的每一单独计算单元对应了数据中某个时间节点的状态,它可以是简单神经元、神经元层或各式的门控系统。 每一单元通过参数共享的层间顺序连接,并随着数据序列传播。这一特性使得RNN中每一单元的状态都取决于它的过去状态,从而具有类似“记忆”的功能,可以储存并处理长时期的数据信号。 大多数RNN能处理可变长度的序列,理论上也可以建模任何动态系统。

图灵测试技术
Turing Test

图灵测试(英语:Turing test,又译图灵试验)是图灵于1950年提出的一个关于判断机器是否能够思考的著名试验,测试某机器是否能表现出与人等价或无法区分的智能。测试的谈话仅限于使用唯一的文本管道,例如计算机键盘和屏幕,这样的结果是不依赖于计算机把单词转换为音频的能力。

统计机器翻译技术
Statistical machine translation

随着统计学的发展,研究者开始将统计模型应用于机器翻译,这种方法是基于对双语文本语料库的分析来生成翻译结果。这种方法被称为统计机器翻译(SMT)

深度学习技术
Deep learning

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

PaperWeekly
PaperWeekly

PaperWeekly 是一个推荐、解读、讨论和报道人工智能前沿论文成果的学术平台,

PaperWeekly
PaperWeekly

推荐、解读、讨论和报道人工智能前沿论文成果的学术平台。

推荐文章
返回顶部