学习神经网络一段时间了,也写了些小项目,比如说chatbot,中英翻译…最近在网上看到深度学习来写歌词的,心血来潮于是便开始coding了。下面我将介绍一下整个过程吧(先贴上项目地址吧generate-lyrics-using-PyTorch,欢迎大家follow、fork哦,平时会和大家分享更多有意思的项目)
以下代码基于PyTorch实现,如果你没有了解过PyTorch请先学习PyTorch
一、循环神经网络(RNN)能创作歌词的原理
如果对RNN有了解,相信你肯定看过这幅图吧
对于序列问题的建模,RNN引入了隐状态h(hidden state),h可以对序列形的数据提取特征,接着再转换为输出。
歌词向量化后输入x1, x2, …..xn,输出y1, y2, …yn。x和记忆单元预测输出y,随着不断学习预测效果会越来越好。以下的图可以很好的显示能RNN能写歌词的原因(图片来源于网络,侵立删)
训练到一定程度后,神经网络已经学到足够东西了。这时候你可以看到,当输入“如”时它会预测输出是“果”,输入“果”时预测输出为“不”…
二、数据准备
有点懒,没有时间去搜集歌词数据,所以用了别人实例的数据(【玩转数据系列十五】机器学习PAI为你自动写歌词,妈妈再也不用担心我的freestyle了(提供数据、代码))如果有侵权,请告诉我哦!
三、代码实现
首先是数据处理,向量化,数据随机切割并封装用于训练
# -*- coding: utf-8 -*-
import string
import random
import torch
from torch.autograd import Variable
from config import *
class Lang(object):
def __init__(self, filename):
self.char2idx = {}
self.idx2char = {}
self.n_words = 0
self.process(filename)
def process(self, filename):
with open(filename, 'r') as f:
for line in f.readlines():
words = set(line)
comm =