APP下载

基于深度学习的歌词和古诗自动生成系统设计

2021-06-28彭涛

现代信息科技 2021年1期
关键词:深度学习

摘  要:文本生成技术在近年开始深受研究者的青睐,其中就包括了古诗和歌词的自动生成。文章设计了一个基于深度学习的歌词与古诗自动生成系统。生成过程主要包括了数据预处理、歌词和古诗生成模型搭建、歌词和古诗生成模型训练、使用训练好的模型生成歌词和古诗。通过测试,该歌词和古诗生成系统比传统的机器写作系统效果更好,语义更准确。

关键词:自动生成;深度学习;训练模型

中图分类号:TP391.41      文献标识码:A 文章编号:2096-4706(2021)01-0025-03

Design of Automatic Generation System of Lyrics and Ancient Poems

Based on Deep Learning

PENG Tao

(Jiangxi Youth Vocational College,Nanchang  330045,China)

Abstract:Text generation technology has been deeply loved by researchers in recent years,including the automatic generation of ancient poems and lyrics. This paper designs an automatic generation system of lyrics and ancient poems based on deep learning. The generation process mainly includes data preprocessing,lyrics and ancient poems generation model building,lyrics and ancient poems generation model training,using the trained model to generate lyrics and ancient poems. Through the test,the lyrics and ancient poems generation system has better effect and more accurate semantics than the traditional machine writing system.

Keywords:automatic generation;deep learning;training model

0  引  言

古诗作为中国古代文学艺术的结晶,是中华民族文化艺术宝库中非常重要的部分。那些历久弥新的古诗展示了古代文人墨客的多彩生活,更包含了中国国民精神的全部符码。歌词作为音乐的核心,美妙的音乐必然少不了高品质的歌词,所以歌詞和古诗自动生成技术的研究是非常有意义的。笔者在教授计算机课程过程中,发现班上一些学生对歌词和古诗也很感兴趣,在业余时间,就带领这些学生利用所学的深度学习知识设计开发了歌词和古诗自动生成系统,该系统已经进入测试阶段,目前能够较好地完成歌词和古诗自动生成。该系统的开发,不但将所学知识应用于实践,让学生体会到所学知识的用武之地,还陶冶学生了情操,积极响应国家提出的课程思政教育,积极推进素质教育。

1  系统功能概述

基于深度学习的歌词和古诗自动生成系统是通过神经网络对数据集进行学习和语义分析后训练出模型,再利用模型和GUI图形界面为用户提供古诗和歌词生成服务的系统。对于歌词生成来说,用户需要先输入10个字作为歌词的前奏,系统会根据前10个字预测下一个字,以此类推,当然系统会自动分析一句歌词什么时候结束,用户可以根据自己的喜好生成大量的歌词文本,再加以修饰,效果就会非常好。对于古诗生成来说,可以利用关键字生成古诗或者藏头诗,用户可以自己输入关键字,非常的方便,生成的古诗格式是保证正确的。系统流程图如图1所示。

本系统的核心功能:

(1)生成歌词:通过用户输入的歌词前奏,利用系统的模型生成歌词文本。

(2)生成古诗:通过用户输入关键字,利用模型生成意境相似的古诗。

(3)生成藏头诗:通过用户输入4个关键字,利用模型生成藏头诗。

基于深度学习的歌词和古诗自动生成系统由多个模块构成,总体可以分为服务于LSTM神经网络的数据预处理模块、LSTM神经网络模块和GUI服务模块。数据预处理模块主要是对3.4万首中文歌词和10.6万首传统古诗进行预处理,转换成One-Hot编码,神经网络才能进行矩阵计算、学习。LSTM神经网络模块是最核心的模块,该模块是歌词和古诗生成最关键的部分,训练参数的选择十分重要,需要通过不断进行对比、调参,记录损失值和准确率来最终确定模型参数,通过用户交互界面,方便用户使用该系统。

在LSTM神经网络模块中分为训练模块和生成模块,首先必须有足够的数据用于训练模块,该模块是最重要的模块,训练之后要保存模型,用于重构模型以生成歌词和古诗。可以说训练模块的独立的,最终只有生成模块会有数据交互,同时与GUI界面关联起来。本系统的神经网络结构使用的是RNN循环神经网络以及LSTM长短期记忆模型用于训练。深度学习框架使用TensorFlow和Keras,激活函数使用softmax,损失函数使用交叉熵损失函数和sequence_loss函数,优化器使用Adam。

本文使用中华诗词库和3.4万首中文歌两个数据集进行训练和效果测试,建立两个文本生成模型并进行训练,学习得到较优的文本生成模型。能够实现端到端随机生成一首古诗或给出关键字的藏头诗以及具有语义的歌词。

数据预处理模块是准备工作,在深度学习领域当中,准备数据是非常烦琐的工作,本系统研究的中文歌词没有开源的数据集可供使用,需要爬虫获取,古诗数据集是开源的中华诗词库,JSON格式。数据操作流程为:

(1)去除指定无用的符号。

(2)文本只保留汉字。

(3)将文本转为向量并输入算法中。

最后则是GUI服务模块,使用Tkinter实现,是Python自带的标准图形库,设计人机交互界面,便于用户进行相关操作。

系统整体结构图如图2所示。

2  系统核心功能

2.1  数据预处理

数据预处理主要包括了爬取歌词、收集古诗、文本筛选、文本向量化和功能性处理。爬虫主要运用于歌词的获取,本系统采用Python的爬虫框架Pyspider爬取了非常多歌词,但是不能直接用于训练,要先手动删除不需要的标点符号,留下中文歌词,对于有些用网络词语改编的歌词也不作为训练集。古诗使用开源的中华诗词库。数据中可能存在部分符号的问题,例如中英文符号混用、每行存在多个冒号、数据中存在其他符号等问题,因此需要对数据进行清洗。通过文本筛选得到了比较干净的歌词和古诗文本,但是这样的文本对于神经网络来说是不能直接训练的。需要对歌词和诗句进行分词,为了最后生成的歌词和古诗的长度的整齐性及便利性,需要先按单个字符进行拆分,对所有文本分词处理之后应对单个字符进行向量化,每个不同的字符对应唯一的向量,便于之后计算出值后转换为对应的词。最后,需要统计词频,删除掉出现次数较低的词。本文歌词数据集采用的是中文歌词,所有歌词存放在一个txt文档中,每一行存储一首歌词;古诗数据集数据采用的是全唐诗,一共包含105 336首唐诗,数据格式为诗歌内容,存放在JSON文档中。

2.2  歌词和古诗生成模型

建立歌词和古诗生成模型,需要三个步骤:搭建、训练和保存。

2.2.1  搭建模型

核心结构是两层LSTM神经网络,需要注意的是每次都定义一个新的BasicCell,而不是定义一个BasicCell之后多次调用。LSTM神经网络在处理序列数据方面非常有效,虽然RNN与CNN都能进行序列建模,但本质上有不同。在搭建模型过程中还使用了Embedding层,称为嵌入层,相当于一个网络层,在模型第一层中使用,其目的是将有索引的标签映射到高密度低维向量,达到降维的作用,可以防止One-Hot向量维度过大导致的运算速度过慢的问题,该层通常用于文本数据建模。使用LSTM神经网络模型还有一个必不可少的全连接层(Dense层),它能够根据特征的组合进行分类,大大减少特征位置对分类带来的影响。

2.2.2  训练模型

创建session会话进行训练,由于训练集比较大,所以歌词生成模型训练30个周期,古诗生成模型训练100个周期。输入每一轮的损失值,通过每轮训练后损失值的变化判断LSTM神经网络模型性能是否发生欠拟合,再比较LSTM神经网络模型在训练集和测试集的正确率判断LSTM神经网络模型是否发生过拟合。若发生欠拟合则应该增加LSTM神经网络模型的深度或者增加训练的时间,若发生过拟合则应该采取正则化的方法或者Dropout抑制过拟合。

2.2.3  保存模型

歌词生成模型保存为H5文件,古诗生成模型保存为DATA-00000-OF-00001文件。Keras框架使用model.save()方法保存模型,TensorFlow框架使用tf.train.Saver类来保存模型。

2.3  生成歌词和古诗

2.3.1  歌词生成

生成歌词需要用户先输入10个字,定义“抽样函数”,作用是从模型中得出当前文本的下一个字符的概率分布,将分布重新调整,根据重新加权的分布随机抽样下一个字符,在当前文本的末尾添加新字符。定义生成歌词函数,通过调用“抽样函数”和model.predict()方法,用前10个字预测下一个字,直到for循环结束。

生成歌词的核心代码为:

def create_music(gen):

for i in range(300):

x_p = np.zeros((1, maxL))

for t, char in enum(sent):

x_p[0, t] = chartoid[char]

forecast= model.predict(x_p, verbose=0)[0]

nextIndex = sample(forecast, diversity)

nextChar = idtochar[nextIndex]

gen += nextChar

return gen[1:]

2.3.2  古诗生成

生成古诗分为用户输入关键字生成古诗和输入4个字藏头诗,每次预测其实是根据一个序列预测一个新的词,需要词的多样化,因此可以按预测结果的概率分布进行抽样。藏头诗就是固定每句诗的第一个字,按照藏头来预测该行的词。

生成古诗的核心代码为:

def create_poetry():

st= sess.run(ini_s)

while :

x = np.zeros((b_size, 1))

x[:, 0] = char2id[c]

p, st = sess.run([probs, last_s], feed_dict={X: x, init_s: st})

p = np.squeeze(p)

pos = int(np.sorted(np.sum(p), np.random.rand() * np.sum(p)))

c = id2char[pos]

return gen[1:36]

系统主界面如图3所示。

古诗生成界面如图4所示。

歌词生成界面如图5所示。

3  结  论

本文在阐述完开发基于深度学习的歌词和古诗自动生成系统的背景和意义,完成系统设计后,使用Python语言对系统进行实现,主要使用了RNN以及LSTM神經网络模型进行歌词和古诗的自动生成。生成过程设置两个阶段,每个阶段包括一个RNN检测模型,使用中华诗词库数据集训练得到生成古诗的模型,使用中文歌词数据集训练得到生成歌词的模型,通过训练好的RNN进行古诗和歌词的生成,得到具有语义的古诗和歌词。

参考文献:

[1] 池云仙,赵书良,罗燕,等.基于词频统计规律的文本数据预处理方法 [J].计算机科学,2017,44(10):276-282+288.

[2] 肖烨晗.基于自然语言生成技术的人工智能应用 [J].科技传播,2019,11(7):155-156.

[3] 马然.基于深度学习的自然场景文本识别系统的设计与实现 [D].长春:吉林大学,2015.

[4] 段军红,李晓宇,慕德俊.一种非完全标注的文本分类训练方法 [J].微处理机,2019,40(1):20-24.

[5] 张克君,史泰猛,李伟男,等.基于统计语言模型改进的Word2Vec优化策略研究 [J].中文信息学报,2019,33(7):11-19.

作者简介:彭涛(1974—),女,汉族,江西龙南人,讲师,硕士,主要研究方向:计算机应用。

猜你喜欢

深度学习
从合坐走向合学:浅议新学习模式的构建
面向大数据远程开放实验平台构建研究
基于自动智能分类器的图书馆乱架图书检测
搭建深度学习的三级阶梯
有体验的学习才是有意义的学习
电子商务中基于深度学习的虚假交易识别研究
利用网络技术促进学生深度学习的几大策略
MOOC与翻转课堂融合的深度学习场域建构
大数据技术在反恐怖主义中的应用展望
深度学习算法应用于岩石图像处理的可行性研究