近年来AI技术发展的非常快 , 本文展示了如何利用AI自动生成周杰伦歌曲风格的歌词 , 代码是基于TensorFlow2.1和Python开发的 , 主要使用了RNN中的LSTM长短时记忆网络 。
文章插图
自动生产的歌词展示
文章插图
自动生成的歌词1
文章插图
自动生成的歌词2
原理简单讲解当我们输入 I am a teache这13个字符的时候 , 我们可以知道下一个字符很大几率会是r , 因为这样可以组成teacher并且很符合前面的语境 。但是 , 传统的神经网络是不具有记忆功能的 , 换而言之 , 传统的神经网络不会在预测r这个字符的时候还会考虑上下文 。
而RNN(循环神经网络)在每次训练的时候都会把结果保存下来传递给下一次训练 , 预测的时候也是同样如此 。原理是这样 , 具体实现的时候要复杂的多 。一个简单的2层RNN神经网络可能具有上万个的参数 , 本模型使用的LSTM层具有256个神经元 , 可以提取语义的多种特征 , 使连续性的语言识别成为可能 。LSTM是简单RNN网络的升级版 , 主要是解决了梯度消失和增加了记忆长度的功能 。
文章插图
LSTM部分网络示意图
代码--录入数据录入数据我们把周杰伦的歌词TXT导入进程序 , 总共60000多个字 , 包括空格和标点符号
文章插图
歌词数据集
第一步是编写一个DataLoader类以复用 , 加载数据里面主要把字符转换成序号 , 并且删除重复元素制作了歌词码表 , 供后续使用 。
文章插图
代码--RNN模型LSTM类主要是继承了Keras.Model类来写自己的模型 。通过一个简单的256个神经元的LSTM单元后接1个全连接层 。并在最后的时候可以选择调用Softmax归一化最后的输出结果 , 这里输出的是每批的预测字符属于所有2500多个字符集的概率 , 概率和为1.
文章插图
LSTM模型类
代码--训练【使用AI生成周杰伦风格的歌词】定义一些超参数 , 并且开始训练5000轮 。
文章插图
训练部分
可以看到当训练结束时 , 损失函数从7.2下降到0.7左右 。损失函数即为预测字符与真实字符的概率分布差异 。
文章插图
开始时的LOSS
文章插图
结束时的LOSS
代码--预测生成歌词从歌词中随机取5个字长的歌词 , 并且循环生成下去 , 共生成500个字的新歌词如下:
文章插图
预测代码
可以看到预测出来的歌词语义上还不是很连贯 , 但是整体风格稍微有了一点周董的歌曲的歌词风格 。
文章插图
AI生成的歌词
- 如何微调GPT-2生成高质量的歌词
- 特斯拉车主,这次还有什么话可说?一位被俘虏的乌克兰军官在审判过程中承认使用星链
- 葡萄酒打开多久就不能使用了 白葡萄酒喝不完怎么储存
- 二战日军的豆战车为什么作为主力使用?
- 使它隆可以用在哪些作物上 农药使它隆的使用作物有哪些?
- 【游戏世界】《王者荣耀》寒霜袭侵适合哪些英雄使用?
- 支付宝可以使用数字人民币了,目前部分地区已经开始实行了,那什么是数字人民币呢?对
- 超齐全使用的快捷键是你的必知 各类快捷键
- 【游戏迷】最适合打工人使用的三款手机,性能强悍价格不贵,最低仅一千元起
- 诗仙李白到底用的是什么剑 李白使用的剑是什么