基于ModelArts续写最伟大的作品【玩转华为云】
前言
前段时间,杰伦终于发布了新专辑,直接把好听打在公屏上!杰伦时隔6年的新专辑《最伟大的作品》日前大范围刷屏,我觉得简直YYDS(“永远的神”)。于是乎,我有了一个大胆的想法,我把他新专辑的几首歌生成了一个词云(特地用的🎸形状),然后想用AI根据杰伦的风格和歌词的热词生成一种类似于他风格的歌曲,话不多说,开造。
《最伟大的作品》词云
1.准备数据
这里我导入了杰伦新专辑中的三首歌《最伟大的作品》、《粉色海洋》、《还在流浪》,歌词数据集如下:
2.读取数据
找到控制台里的modelarts:入口
新建一个notebook,选择最低的配置2核4G就行,大概费用是0.8/小时,注意使用完结束运行,不然就会和我一样白白扣了很多钱!!!!
创建成功后是这样的,然后启动打开即可
新建一个Pytorch-1.0.0,开始跑代码
输出结果为:
3.数据预处理
将处理完的数据写入内存并将杰伦的歌词文本转换完整数
4.构建神经网络
导入依赖包并检测是否用GPU进行训练
构建输入层
构建堆叠的RNN单元
Word Embedding
模型中加入Embedding层来降低输入词的维度
通俗来说:就是给出一个文档,文档就是一个单词序列比如 “A B A C B F G”, 希望对文档中每个不同的单词都得到一个对应的向量(往往是低维向量)表示。比如,对于这样的“A B A C B F G”的一个序列,也许我们最后能得到:A对应的向量为[0.1 0.6 -0.5],B对应的向量为[-0.2 0.9 0.7] (此处的数值只用于示意)
之所以希望把每个单词变成一个向量,目的还是为了方便计算,比如“求单词A的同义词”,就可以通过“求与单词A在cos距离下最相似的向量”来做到。
构建神经网络,将RNN层与全连接层相连
参数:
---
cell: RNN单元
rnn_size: RNN隐层结点数量
input_data: input tensor
vocab_size
embed_dim: 嵌入层大小
5.构造batch
在这里,我们将采用以下方式进行batch的构造,如果我们有一个1-20的序列,传入参数batch_size=3, seq_length=2的话,希望返回以下一个四维的向量。分为了三个batch,每个batch中包含了输入和对应的目标输出。例如: get_batches([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], 3, 2)
6.模型训练
定义好模型的输入参数
开始训练
打印结果保存模型
训练结果输出,共82个epoch
获取模型训练结果
歌词数据生成
输出结果
emmmm,生成了如下的歌词,客观评价,感觉一般,还有待优化哈哈哈哈哈哈!最后,如果你喜欢听杰伦的歌,我们就是朋友!
总结
本篇文章是基于词粒度对RNN进行训练,文本采用中文歌词的分词文本。模型中加入Embedding层来降低输入词的维度。同时了解到了Embedding的强大功能,通过查询资料了解其原理:首先计算机不认识这几个字,我们要用数字表示这几个字,常用方式可以通过枚举取出对应的KEY作为映射的数字。假设我们按照字划分最终得到的结果:【“我”,“爱”,“你”,“中”,“国”】映射成数字是【2,3,4,5,6】,结果是个一维的向量。现在想做词嵌入,每一个字用3维的向量表示结果如下:
【【0.9212,0.1181,0.4291】,代表“我”
【0.4388,0.6217,0.4416】,代表“爱”
…………】
每一个字都用一个向量来表示,向量里面的每一个数字表示一个描述该字的特征。在维度上面从原来的一维 1*5 变成了二维,形成了5*3的一个矩阵,5代表5个词,3代表每个词用3个数字特征表示。生成杰伦的歌词的原理就是这个,不过此次模型有待优化,歌词不够押韵,后面继续学习。
参考文献
pr0d1gy :哎哟不错哦ModelArts教你写歌
- 点赞
- 收藏
- 关注作者
评论(0)