目录

一、目标

二、思路

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学习技术支持#相关推荐

  1. #博学谷it学习技术支持#黑马头条知识点1

    #博学谷it学习技术支持#黑马头条知识点1 目录: 一.文章列表加载 二.Freemarker 三.对象存储服务MinIO 四.文章详情功能 黑马头条day2 一. 文章列表加载 1)需求分析 2)表 ...

  2. #博学谷it学习技术支持#kafka及异步通知文章上下架

    #博学谷it学习技术支持#kafka及异步通知文章上下架 目录: 一.自媒体文章上下架 二.Kafka概述 三.kafka安装配置 四.kafka入门 五.kafka高可用设计 六.kafka生产者详 ...

  3. #博学谷it学习技术支持#黑马头条遇到问题及解决1

    #博学谷it学习技术支持#黑马头条遇到问题及解决1 目录: 1.在网关中如何在request中获取header? 2.若前端不报错,后端也不报错,但返回给前端的页面内容不对,或者没返回任何内容,此时应 ...

  4. #博学谷it学习技术支持#探花交友项目:用户登录

    #博学谷it学习技术支持#探花交友项目:用户登录 目录: 一.基本执行流程 二.Service模块内容的编写: 三.Dabbo模块下: 四.model(实体类)模块下: 五.思维导图 正文: 用户登录 ...

  5. Vue.js项目实战开发(4)- 必掌握知识点 - #博学谷IT学习技术支持#

    文章目录 生命周期.axios 1. vue生命周期 1.0_人的-生命周期 1.1_钩子函数 1.2_初始化阶段 1.3_挂载阶段 1.4_更新阶段 1.5_销毁阶段 2. axios 2.0_ax ...

  6. Vue.js项目实战开发(1)- 必掌握知识点 - #博学谷IT学习技术支持#

    文章目录 (补充) 前后端的身份认证 第一章 webpack+vue基础 Vue前置知识 1-1 ES6模块化 1. 回顾:node.js 中如何实现模块化 2. 前端模块化规范的分类 3. 什么是 ...

  7. CSS - 移动Web网页开发(2)- 必掌握知识点 - #博学谷IT学习技术支持#

    文章目录 移动端布局(续) 四.rem 移动端适配 1. 移动适配 2. rem 3. rem-移动适配-媒体查询(设置差异化的CSS样式)[基本原理] 4. flexible 五.Less 1. L ...

  8. 机器学习,深度学习,环境搭建 #博学谷IT学习技术支持#

    目录 一 Anaconda 1 Anaconda环境搭建 2 Anaconda的使用 3  启动jupyter服务. 4  DateSpell 5  之后都是通过Linux系统启动jupyter服务. ...

  9. 隐马尔可夫模型 #博学谷IT学习技术支持#

    一.隐马尔可夫模型HMM 1 隐马尔可夫模型 Hidden Markov Model(HMM) 的假设,对于两个时序序列联合分部 p(x,y),x序列,外界可见,称为观测序列,y序列外,外界不可见,称 ...

最新文章

  1. Android native 开发总结
  2. 如何避免表单重复提交
  3. “双向链表的一些基本操作”
  4. hdu 1068(二分图最大独立集)
  5. asp.net页生命周期图解---msdn
  6. ApacheCN × FlyAI 人工智能比赛活动
  7. VMware vSphere 6.7配置最大更改
  8. 蓝桥杯训练 2n皇后
  9. mac 10.8 montion lion 山狮系统上 安装 rails 和 oci8 连 oracle 数据库
  10. ArcGIS Runtime SDK for Android 读取tpk、vtpk
  11. BLN/BNA--surfer文件格式说明
  12. 金三银四,给大家肝一下面试题~
  13. 谈下离开北京到杭州的感受
  14. 组件、Prop属性的基本用法
  15. 如何选择最适合的房屋贷款方式
  16. 【Hack The Box】windows练习-- love
  17. javaweb-jsp编程例题
  18. Python结合MySQL数据库编写简单信息管理系统
  19. cmd 命令行安装包时 报4048错误
  20. CTFSHOW-文件包含

热门文章

  1. 【初学者必看】vlc实现的rtsp服务器及转储H264文件
  2. IBM MQ简单开发和应用
  3. 本地消息表(异步确保)
  4. java实现生产者消费者模式
  5. 44道Redis面试题,含参考答案!
  6. JavaScript 中 10 个需要掌握基础的问题
  7. 模仿淘宝web扫码登录
  8. deny后加to do还是doing_区别的to do和doing用法的小技巧
  9. windows服务器安装Bonobo Git Server
  10. Sourc Insight 添加 磁盘目录