基于ModelArts续写最伟大的作品【玩转华为云】

举报
运气男孩 发表于 2022/07/27 22:41:58 2022/07/27
【摘要】 前言前段时间,杰伦终于发布了新专辑,直接把好听打在公屏上!杰伦时隔6年的新专辑《最伟大的作品》日前大范围刷屏,我觉得简直YYDS(“永远的神”)。于是乎,我有了一个大胆的想法,我把他新专辑的几首歌生成了一个词云(特地用的🎸形状),然后想用AI根据杰伦的风格和歌词的热词生成一种类似于他风格的歌曲,话不多说,开造。《最伟大的作品》词云1.准备数据这里我导入了杰伦新专辑中的三首歌《最伟大的作品》...

前言

前段时间,杰伦终于发布了新专辑,直接把好听打在公屏上!杰伦时隔6年的新专辑《最伟大的作品》日前大范围刷屏,我觉得简直YYDS(“永远的神”)。于是乎,我有了一个大胆的想法,我把他新专辑的几首歌生成了一个词云(特地用的🎸形状),然后想用AI根据杰伦的风格和歌词的热词生成一种类似于他风格的歌曲,话不多说,开造。

《最伟大的作品》词云

1.准备数据

这里我导入了杰伦新专辑中的三首歌《最伟大的作品》、《粉色海洋》、《还在流浪》,歌词数据集如下:

2.读取数据

找到控制台里的modelarts:入口

新建一个notebook,选择最低的配置2核4G就行,大概费用是0.8/小时,注意使用完结束运行,不然就会和我一样白白扣了很多钱!!!!

创建成功后是这样的,然后启动打开即可

新建一个Pytorch-1.0.0,开始跑代码

输出结果为:

3.数据预处理

将处理完的数据写入内存并将杰伦的歌词文本转换完整数

4.构建神经网络

导入依赖包并检测是否用GPU进行训练

构建输入层

构建堆叠的RNN单元

Word Embedding

模型中加入Embedding层来降低输入词的维度

如果将word看作文本的最小单元,可以将Word Embedding理解为一种映射,其过程是:将文本空间中的某个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教你写歌

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。