使用AI生成周杰伦风格的歌词

近年来AI技术发展的非常快 , 本文展示了如何利用AI自动生成周杰伦歌曲风格的歌词 , 代码是基于TensorFlow2.1和Python开发的 , 主要使用了RNN中的LSTM长短时记忆网络 。

使用AI生成周杰伦风格的歌词

文章插图
自动生产的歌词展示

使用AI生成周杰伦风格的歌词

文章插图
自动生成的歌词1


使用AI生成周杰伦风格的歌词

文章插图
自动生成的歌词2
原理简单讲解当我们输入 I am a teache这13个字符的时候 , 我们可以知道下一个字符很大几率会是r , 因为这样可以组成teacher并且很符合前面的语境 。但是 , 传统的神经网络是不具有记忆功能的 , 换而言之 , 传统的神经网络不会在预测r这个字符的时候还会考虑上下文 。
而RNN(循环神经网络)在每次训练的时候都会把结果保存下来传递给下一次训练 , 预测的时候也是同样如此 。原理是这样 , 具体实现的时候要复杂的多 。一个简单的2层RNN神经网络可能具有上万个的参数 , 本模型使用的LSTM层具有256个神经元 , 可以提取语义的多种特征 , 使连续性的语言识别成为可能 。LSTM是简单RNN网络的升级版 , 主要是解决了梯度消失和增加了记忆长度的功能 。


使用AI生成周杰伦风格的歌词

文章插图
LSTM部分网络示意图
代码--录入数据录入数据我们把周杰伦的歌词TXT导入进程序 , 总共60000多个字 , 包括空格和标点符号
使用AI生成周杰伦风格的歌词

文章插图
歌词数据集
第一步是编写一个DataLoader类以复用 , 加载数据里面主要把字符转换成序号 , 并且删除重复元素制作了歌词码表 , 供后续使用 。
使用AI生成周杰伦风格的歌词

文章插图
代码--RNN模型LSTM类主要是继承了Keras.Model类来写自己的模型 。通过一个简单的256个神经元的LSTM单元后接1个全连接层 。并在最后的时候可以选择调用Softmax归一化最后的输出结果 , 这里输出的是每批的预测字符属于所有2500多个字符集的概率 , 概率和为1.
使用AI生成周杰伦风格的歌词

文章插图
LSTM模型类
代码--训练【使用AI生成周杰伦风格的歌词】定义一些超参数 , 并且开始训练5000轮 。
使用AI生成周杰伦风格的歌词

文章插图
训练部分
可以看到当训练结束时 , 损失函数从7.2下降到0.7左右 。损失函数即为预测字符与真实字符的概率分布差异 。
使用AI生成周杰伦风格的歌词

文章插图
开始时的LOSS


使用AI生成周杰伦风格的歌词

文章插图
结束时的LOSS
代码--预测生成歌词从歌词中随机取5个字长的歌词 , 并且循环生成下去 , 共生成500个字的新歌词如下:
使用AI生成周杰伦风格的歌词

文章插图
预测代码
可以看到预测出来的歌词语义上还不是很连贯 , 但是整体风格稍微有了一点周董的歌曲的歌词风格 。
使用AI生成周杰伦风格的歌词

文章插图
AI生成的歌词