2024年3月11日发(作者:两种不同的爱)
龙源期刊网
基于Transformer模型的写诗机器人
作者:张正旺
来源:《科技视界》2018年第33期
【摘 要】古诗是中华民族的文化瑰宝。基于Transformer模型,利用开源的深度学习库
Tensor2Tensor,仅需编写几十行代码即可创建出一个写诗机器人。结果表明,该写诗机器人能
够写出格式规范,颇具意境的七言古诗。
【关键词】Transformer模型;深度学习;Tensor2Tensor;写诗机器人
中图分类号:TP183 文献标识码: A 文章编号: 2095-2457(2018)33-0004-003
DOI:10.19694/2095-2457.2018.33.002
【Abstract】Ancient poetry is a cultural treasure of the Chine nation. Bad on the
Transformer model and using the open source deep learning library Tensor2Tensor, a poetry writing
robot can be created with only dozens of lines of code. The result shows that the poem writing robot
can write ven-character ancient poetry with standard format and artistic conception.
【Key words】Transformer model; Deep learning; Tensor2Tensor; Writing robot
0 引言
古诗是中华民族的文化瑰宝,其结构精练,韵律优美,意境高雅,具有穿越历史时空的创
造力、影响力和吸引力,众多古诗流传至今并仍让我们深深为之着迷。人工智能(Artificial
Intelligence),简称AI,其研究始于1956年的达特茅斯会议,与历史悠久的古诗相比,人工
智能是一项非常年轻的技术。随着大数据的积累和计算机软硬件性能的提升,人工智能在各领
域展现出极为广阔的发展和应用空间。深度学习是机器学习的一个分支,是现阶段实现人工智
能的一种主要技术手段。深度学习的应用场景主要有:图像识别与处理、目标检测、语音识
别、自动驾驶、自然语言处理等。基于深度学习,利用自然语言处理相关技术,可以将计算机
训练成一个写诗机器机器人,让计算机自动生成格式规范的古诗。
1 研究现状
近年来,随着深度学习的快速发展,利用基于深度学习的自然语言处理技术自动生成古诗
的研究得到了学术界的广泛关注。桂林电子科技大学的黄文明等[1]采用一种基于注意力机制
的序列到序列模型得到作诗大纲,然后利用具有双编码器和注意力机制的序列到序列模型顺序
地生成诗的每一行。北京邮电大学的李争[2]基于递归神经网络的古诗自动生成模型能够在给
定关键词的情况下自动生成与其语义相关的古诗内容。中国科学技术大学的蒋亮[3]设计了一
龙源期刊网
种基于记忆的深度神经网络模型自动基于图片生成中国古诗,该模型可以很有效地挖掘图片中
的视觉信息及语义信息。清华大学的Yi Xiaoyuan等[4]将古诗句的生成看作一个序列到序列的
学习问题,基于递归神经网络(Recurrent Neural Network,RNN)的Encoder-Decoder模型,
构建了一个以关键词为输入四行诗自动生成系统,该系统能学习诗中单行的语义、行与行之间
的语义相关性及结构、平仄模式的使用。爱丁堡大学的Zhang Xingxing等[5]提出了一种基于
递归神经网络(RNN)的诗歌生成模型,该模型非常善于捕捉和学习诗歌的内容和形式。
这些研究多数基于传统的RNN模型,均可自动生成格式规范的古诗,但他们都需要研究
者自己编写大量代码来完成系统的开发。GOOGLE大脑的研究人员[6]于2017年提出了一个摒
弃了RNN结构,完全基于注意力机制的Transformer模型,随后他们开源了一个基于
Tensorflow框架的深度学习库Tensor2Tensor,该库提供了用于自然语言处理的Transformer模
型。利用这个深度学习库,基于Transformer模型,仅需编写少量代码,即可简单快捷地训练
出一个会写诗的人工智能机器人。
2 Transformer模型简介
古诗自动生成是一个序列到序列问题,目前处理这类问题较为有效的框架为Encoder-
Decoder模型,该模型的结构如图1所示。模型中的Encoder部分采用GRU(Gated Recurrent
Unit)、LSTM(Long Short-Term Memory)等递归神经网络,卷积神经网络(Convolutional
Neural Network, CNN),以及RNN或CNN与注意力机制(Attention)相结合等机制学习源
序列,得到一个固定长度的向量表达式;模型中的Decoder部分以该向量表达式为输入,采用
类似与Encoder的机制学习,得到目标序列。如图1中的“羌笛何需怨杨柳”经过Encoder后转
变为类似于(0.5,0.2,0.1,-0.6,-0.4,1.0,1.2,0.8)的向量,Decoder以这个向量作为输
入,最终可习得下一句诗“春风不渡玉门关”。
Transformer是一种处理序列到序列问题的新模型,其仍然沿用了经典的Encoder-Decoder
结构,但不再使用RNN或CNN进行序列建模,而是完全使用自我注意力(lf-attention)
制。GOOGLE研究的结果表明,与RNN或CNN等结构相比,Transformer模型可以在减少计
算量和提高并行效率的同时获得更好的学习效果,其结构如图2所示[6]。
Transformer模型的Encoder部分由Nx个(Nx=6)相同的层堆叠而成,每一层有两个子
层,第一个子层是多头自我注意力层(Multi-head Attention),第二个子层是密集型全连接前
馈网络层(Feed Forward Network),每个子层中均使用一次残差连接。Decoder部分的结构与
Encoder相似,也是由6个完全相同的层堆叠组成,每一层除了包括Multi-Head Attention子层
和Feed Forward Network子层外,还有一个遮挡式多头自我注意力层(Masked Multi-Head
Attention),每个子层中也使用一次残差连接。
3 利用Transformer模型创建写诗机器人
龙源期刊网
Tensor2Tensor深度学习库封装了大量常见数据集和一些典型深度学习问题,并提供了相
应模型用于解决各类问题,目前可直接解决的问题有:图像分类,语言模型、情感分析、语音
识别、文本摘要,机器翻译等,利用库中所提供的模型还可以处理自行创建的各类新问题。写
诗机器人需要用到Tensor2Tensor提供的Transformer模型。
3.1 数据准备
七言古诗简称七古,是古诗中形式最活泼、体裁最多样、句法和韵脚处理最自由,抒情叙
事最富有表现力的一种形式,诗体全篇每句七字或以七字句为主[7]。真正意义的七古成熟于
唐朝,盛行于唐宋代。为方便训练,训练采用的数据集为唐宋两代的七言绝句。数据来源于
Github上由Werner[8]收集的中国古诗词数据库,该数据库共收录了从先秦到现代的共计85万
余首古诗词。利用Python语句从与唐宋诗词有关的五个CSV文件中提取出共79292首七言绝
句作为训练数据集。
3.2 定义问题与数据处理
在Tensor2Tensor中利用Transformer模型处理古诗自动生成问题,需要先编写一个定义新
问题的名为chine_的Python文件,代码如下:
# coding=utf-8
from import registry
from _generators import problem,text_problems
import re
@er_problem
class ChinePoetry(text_2TextProblem):
@property
def approx_vocab_size(lf):
return 2**15
@property
def is_generate_per_split(lf):
return Fal
龙源期刊网
@property
def datat_splits(lf):
return[{"split": , "shards": 9,},
{"split": , "shards": 1, }]
def generate_samples(lf, data_dir, tmp_dir, datat_split):
with open('./ml/data/') as opf:
for line in opf:
line = ('。', ',', line, count=1)
line = ('?', ',', line, count=1)
newline = (',')
for i in range(3):
prev_line = newline[i]
curr_line = newline[i+1]
yield{"inputs": prev_line, "targets": curr_line}
将chine_保存在chine_poetry目录下,并在该目录下再创建一个名为
__init__.py的Python文件,该文件只包含一句代码:from . import chine_poetry。
古诗自动生成问题类似于机器翻译,是一个监督学习问题,计算机在学习大量的诗句对
后,能够根据一句诗自动生成下一句。每首七言绝句可生成三个数据样本:(1)以诗的第一
行作为输入序列,第二行作为目标序列;(2)以诗的第二行作为输入序列,第三行作为目标
序列;(3)以诗的第三行作为输入序列,第四行作为目标序列。安装好Tensor2Tensor深度学
习库后,利用下列Tensor2Tensor命令根据原始数据(79292首七言绝句)生成237876对
TFRecord格式的数据样本:
t2t-datagen --t2t_usr_dir=chine_poetry \
--problem=chine_poetry \
龙源期刊网
--data_dir=chine_poetry/data
3.3 训练
训练所使用机器配置如下:32G内存,8G显存的GTX 1070显卡。训练所使用的命令如
下:
t2t-trainer --t2t_usr_dir=chine_poetry --problem=chine_poetry \
--data_dir=chine_poetry/data --output_dir=chine_
poetry/train \
--model=transformer --hparams_t=transformer_ba_
single_gpu \
--schedule=train --train_steps=500000
上述指令表示训练数据所采用的模型为Transformer模型,所采用的超参数集为
transformer_ba_single_gpu,训练步数50万步。在训练了两天又七个多小时后,一共训练了
361800步,结果已基本收敛,因此停止继续训练。
3.4 测试
训练好的模型就是一台写诗机器人,只需要给训练好的模型提供一行诗句,模型即可自动
生成下一句。Tensor2Tensor提供了t2t-decoder这个命令来完成此类动作。完整指令如下:
t2t-decoder --t2t_usr_dir=chine_poetry --problem=chine_poetry \
--data_dir=Chine_poetry/data --output_dir=Chin-
e_poetry/train \
--model=transformer --hparams_t=transformer_
ba_single_gpu \
--decode_hparams="beam_size=4,alpha=0.6" \
--decode_from_file=Chine_poetry/
龙源期刊网
以杜甫《闻官军收河南河北》(这首诗不在训练集中)这首七律的首句“剑外忽传收蓟北”
作为诗的第一句,让训练出来的写诗机器人相继生成后续诗句,结果如图3所示。
输入“剑外忽传收蓟北”后,计算机生成的下一句为“又烦前送相公归”;输入变为“又烦前
送相公归”,计算机生成“人间父子无穷胜”;以“人间父子无穷胜”为输入序列,输出结果为“笔
下明明开辟初”。从生成结果来看,生成的古诗非常规范,亦颇有意境,描述了一幅战后亲人
即将团聚的景象。
4 讨论与结语
通过与训练数据对比可以发现,上面生成的最后一行诗“笔下明明开辟初”完完全全来自于
训练数据,其原因可能是因为数据量不够,训练时出现过拟合现象。为了防止训练数据里诗句
被写诗机器人原样照抄,减少过拟合,除了增大训练数据量外,还可调整模型中的一些正则化
超参的值,如Dropout值等,后期也应该增加一些防剽窃处理措施。此外,此写诗机器人仅仅
依据诗的上一句来生成下一句,训练后容易导致写出来的诗主题不明确,内容不清晰。因此,
对于七言绝句而言,可以通过如下两种方式增加训练样本:(1)以诗的第一行加第二行作为
输入序列,第三行作为目标序列;(2)以诗的一二三行作为输入序列,第四行作为目标序
列。
在技术进步的引导下,在国内外众多大公司的鼎力支持下,深度学习系统的开发逐渐趋于
平民化,即不需要具备很强的人工智能专业背景,也可利用现成的框架开发出具有实用价值的
深度学习系统,深度学习模型的使用门槛越来越低,深度学习技术的使用变得越来越简单。如
前所示,寥寥几十行代码,即可借助Tensor2Tensor深度学习库开发出一个人工智能写诗机器
人,但要想获得比较好的学习结果,让系统能真正写出比较完美的古诗,还有大量的工作可
做。
【参考文献】
[1]黄文明, 卫万成与邓珍荣, 基于序列到序列神经网络模型的古诗自动生成方法. 计算
机应用研究: 第1-7页.
[2]李争, 基于神经网络的古诗词自动生成研究, 2018, 北京邮电大学. 第 1-66页.
[3]蒋亮, 深度神经网络在基于图片生成中国古诗问题中的研究与应用, 2018, 中国科学
技术大学. 第1-67页.
[4]Yi Xiaoyuan, Li Ruoyu, Sun Maosong. Generating Chine classical poems with RNN
encoder-decoder. (2016-04-06). https:///abs/1604.01537.
龙源期刊网
[5]Zhang Xingxing, Mirella L. Chine poetry generation with recurrent neural networks. Proc
of Conference on Empirical Methods in Natural Language Processing. October 25-29, 2014,
Doha, Qatar.
[6]Ashish Vaswani, Noam Shazeer, Niki Parmar, . Attention Is All You Need. 31st
Conference on Neural Information Processing Systems (NIPS 2017), Long Beach, CA, USA.
[7]百度百科. https:///item/七言古诗.
[8]https:///werner-wiki/Poetry.
本文发布于:2024-03-11 04:13:03,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/1710101583156816.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:基于Transformer模型的写诗机器人.doc
本文 PDF 下载地址:基于Transformer模型的写诗机器人.pdf
留言与评论(共有 0 条评论) |