周杰伦歌词预测 #博学谷IT学习技术支持#
目录
一、目标
二、思路
1 构建词料库
1.1数据清洗
1.2 构建分词到索引的映射表
2 构建数据集对象
2.1 创建一个歌词类
2.2 构建数据集
3 构建网络模型
4 构建训练函数
4.1 创建训练数据集
4.2 初始化网络模型
4.3 构建损失函数
4.4 选择优化方法
4.4 确定训练轮数
4.5 保存训练模型
5 构建预测函数
5.1 把输入的开始词,先转化为索引向量
一、目标
相当于我们在音乐播放器里面搜索。歌词里面的几个字。就可以显示出歌词后面的一些字。比如,
输入 “谁在用琵琶”,5,
输出 谁在用琵琶弹奏一曲东
输入一串文本,预测下一个文本,属于分类问题。
有一个周杰伦歌词的文档。希望通过输入歌词的前几个字和一个数字,能够预测出输入歌词的前几个字和之后的几个字。
二、思路
1 构建词料库
因为歌词是一个文本文档。我们需要把文本文档里面的文字用数字表示,便于我们后面处理计算。比如,气球,用[0,1]表示。类似这样的,就是词料库。
1.1数据清洗
首先我们需要把歌词的文本文档进行处理。去掉多余的文字,空格,换行等等。只留下 汉字,字母,数字,感叹号,问号,逗号。
1.2 构建分词到索引的映射表
把文档里面的每一行读出来。再把每一行里面的单词利用jieba库,分词,比如,把 我喜欢你,分成 ['我','喜欢','你']。
把分词出来的所有的分词,去重,放在一个列表中。就得到了从索引到分词的映射表。再根据这个映射表得到从分词到索引的字典。
根据这个字典,把文档中的每句中文,转换成用索引表示的向量。这就是词料库。
2 构建数据集对象
2.1 创建一个歌词类
有init ,有len魔法方法。
2.2 构建数据集
实例化歌词类,得到数据集,用数据加载器来加载数据集。
3 构建网络模型
有三层,
第一层是词嵌入层,用于将词料库,转化为词向量。比如我们把每一个分词,用一个128维的向量来表示。假设输入的句子长度为5,那么经过嵌入层之后的向量,维度就是 1,5,128 。这里面1是batch size,5是句子的长度,128是每个分词的向量维数。
第二层是循环网络, 用来提取句子的语义特征。
输入的维度是128维,输出的维度是128维。
循环网络层的输入希望batch_size在第一位。注意要有隐藏层。输出output是每一个时间步的输出,hidden只表示最后一个时间步的隐藏状态。将output送入全连接层,得到输出。
第三层是全连接层,用来输出对词典中每个词的预测概率,我们最后选取预测概率最大的词,作为我们的输出。输入维度是128维。预测结果维度是 5,1,5682。 这里面1是batch size,5是句子的长度,5682是分词的总数目, 5682是,预测,每一个分词的概率大小,最后我们选择预测概率大的词,输出。
4 构建训练函数
把训练数据集,放进网络里面训练。因为文本生成本质上是输入一串文本,预测下一个文本,属于分类问题,所以我们使用多分类交叉商损失函数。优化方法,我们使用SGD或者Adam。
4.1 创建训练数据集
使用刚刚的数据集类,输入资料库和32。这里的32代表32个句子长度。
4.2 初始化网络模型
使用刚刚构建的网络模型来初始化网络模型
4.3 构建损失函数
4.4 选择优化方法
导入包,选择优化方法,指定学习率
4.4 确定训练轮数
对每轮训练,初始化数据加载器,batch size等于1。初始化迭代次数,总的训练损失等于0.0。
数据集进入模型训练后的输出维度是 32,1,5682 。训练数据集的标签维度是 1,32 。
4.5 保存训练模型
5 构建预测函数
加载预测数据集,从磁盘加载已经训练好的模型,进行预测。我们输入一个指定的词,送入网络,预测出下一个词,再将预测出来的词再送入网络,再预测下一个词,以此类推,直到预测出我们指定场长度的内容。
5.1 把输入的开始词,先转化为索引向量
把输入的开始词,利用词料库,转化为索引向量。把所以向量送入模型中去预测下一个概率最大的分词的索引,放在下一个分词的索引列表中,再循环,直到完成指定数目。注意,这里得到的是分词的索引列表,所以需要用所以到分词的列表,转化为分词的分词列表。这样就得出了预测的分词。
总结
以上是生活随笔为你收集整理的周杰伦歌词预测 #博学谷IT学习技术支持#的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 搭建maven私服发布项目并从私服下载j
- 下一篇: 使用R包networkD3绘制炫酷的动态