文章目录

  • 引入
  • 1 原始数据处理
  • 2 时序数据的采样
    • 2.1 随机采样
    • 2.2 相邻采样

引入

  该数据集收集了杰伦第一张专辑《Jay》到第十张专辑《跨时代》中的歌词。
  下载地址:https://codechina.csdn.net/mirrors/shusentang/dive-into-dl-pytorch/-/blob/master/data/jaychou_lyrics.txt.zip


参考文献:
【1】李沐、Aston Zhang等老师,动手学深度学习


1 原始数据处理

  函数参数包括原始数据集的选取范围及数据集的路径。返回值包括:
  1)idx2char_list:不重复字符列表;
  2)char2idx_dict:字符索引字典;
  3)dict_size:字典大小;
  4)char2idx_list:字符索引列表。
  函数返回值包括以上三个步骤的处理结果:

def load_jaychou_lyrics(tr_range=None, path="../Data/jaychou_lyrics.txt.zip"):""":param tr_range: 数据集选取范围:param path: 数据集存储路径"""with zipfile.ZipFile(path) as zin:with zin.open('jaychou_lyrics.txt') as f:ori_data = f.read().decode("utf-8")ori_data = ori_data.replace("\n", " ").replace("\r", " ")"""设置原始数据集的选取范围并选取"""if tr_range is None:tr_range = (0, len(ori_data))ori_data = ori_data[tr_range[0]: tr_range[1]]# 不重复字符列表idx2char_list = list(set(ori_data))# 字符索引字典char2idx_dict = dict([(char, i) for i, char in enumerate(idx2char_list)])# 字典大小,即不重复字符的数量dict_size = len(char2idx_dict)# 字符索引列表char2idx_list = [char2idx_dict[char] for char in ori_data]return idx2char_list, char2idx_dict, dict_size, char2idx_list

2 时序数据的采样

  时序数据的一个样本通常包含连续的字符。例如时间步数为555时,样本序列相应为555个字符。假设样本序列为“想”、“要”、“有”、“直”、“升”,则该样本的标签序列为这些字符分别在训练集中的下一个字符,例如“要”、“有”、“直”、“升”、“机”。
  接下来使用两种方式对时序数据采样。

2.1 随机采样

  在随机采样中,每个样本是原始序列上任意截取的一段序列。相邻的两个随机小批量在原始序列上的位置不一定相邻。因此无法用一个小批量最终时间步的隐藏状态来初始化下一个小批量的隐藏状态。
  在模型训练时,每次随机采样都需要重新初始化隐藏状态:

def load_jaychou_lyrics_iter_random(data_idx, batch_size=2, num_step=5,device=torch.device("cuda" if torch.cuda.is_available() else "cpu")):""":param data_idx: 数据选取索引:param batch_size: 批次大小:param num_step: 每个样本的时间步数:param device: 设备"""# 减1是因为输出的索引x是相应输入的索引y+1num_data = (len(data_idx) - 1) // num_stepnum_epoch = num_data // batch_sizeidx = np.random.permutation(num_data)def _data(pos):return data_idx[pos: pos + num_step]for i in range(num_epoch):j = i * batch_sizebatch_idx = idx[j: j + batch_size]X = [_data(k * num_step) for k in batch_idx]Y = [_data(k * num_step + 1) for k in batch_idx]yield (torch.tensor(X, dtype=torch.float32, device=device),torch.tensor(Y, dtype=torch.float32, device=device))if __name__ == '__main__':for (a, b) in load_jaychou_lyrics_iter_random(list(range(30))):print(a, "\n", b)

  输出如下:

tensor([[10., 11., 12., 13., 14.],[15., 16., 17., 18., 19.]]) tensor([[11., 12., 13., 14., 15.],[16., 17., 18., 19., 20.]])
tensor([[20., 21., 22., 23., 24.],[ 0.,  1.,  2.,  3.,  4.]]) tensor([[21., 22., 23., 24., 25.],[ 1.,  2.,  3.,  4.,  5.]])

2.2 相邻采样

  这里的相邻采样是指:两个随机小批量在原始序列上的位置相毗邻。这时,就可以用一个小批量最终时间步的隐藏状态来初始化下一个小批量的隐藏状态,从而使下一个小批量的输出也取决于当前小批量的输入:

def load_jaychou_lyrics_iter_consecutive(data_idx, batch_size=2, num_step=5,device=torch.device("cuda" if torch.cuda.is_available() else "cpu")):""":param data_idx: 数据选取索引:param batch_size: 批次大小:param num_step: 每个样本的时间步数:param device: 设备"""data_idx = torch.tensor(data_idx, dtype=torch.float32, device=device)num_data = len(data_idx)num_batch = num_data // batch_sizeidx = data_idx[0: batch_size * num_batch].view(batch_size, num_batch)num_epoch = (num_batch - 1) // num_stepfor i in range(num_epoch):j = i * num_stepX = idx[:, j: j + num_step]Y = idx[:, j + 1: j + num_step + 1]yield X, Yif __name__ == '__main__':for (a, b) in load_jaychou_lyrics_iter_consecutive(list(range(30))):print(a, "\n", b)

  输出如下:

tensor([[ 0.,  1.,  2.,  3.,  4.],[15., 16., 17., 18., 19.]]) tensor([[ 1.,  2.,  3.,  4.,  5.],[16., 17., 18., 19., 20.]])
tensor([[ 5.,  6.,  7.,  8.,  9.],[20., 21., 22., 23., 24.]]) tensor([[ 6.,  7.,  8.,  9., 10.],[21., 22., 23., 24., 25.]])

语言模型数据集 (周杰伦专辑歌词)相关推荐

  1. 【从零开始学习深度学习】34. Pytorch-RNN项目实战:RNN创作歌词案例--使用周杰伦专辑歌词训练模型并创作歌曲【含数据集与源码】

    目录 RNN项目实战使用周杰伦专辑歌词训练模型并创作歌曲 1.语言模型数据集预处理 1.1 读取数据集 1.2 建立字符索引 1.3 时序数据的2种采样方式 1.3.1 随机采样 1.3.2 相邻采样 ...

  2. (五)循环神经网络 -- 3 语言模型数据集

    3. 语言模型数据集 本节将介绍如何预处理一个语言模型数据集,并将其转换成字符级循环神经网络所需要的输入格式. 为此,收集了周杰伦从第一张专辑<Jay>到第十张专辑<跨时代>的 ...

  3. 夜曲(歌手:周杰伦 专辑:十一月的萧邦 )

    一直不喜欢这个烂人,没想到居然可以作出这么好的曲子来 歌曲:夜曲 歌手:周杰伦 专辑:十一月的萧邦 LRC歌词 打印预览 词:方文山曲:周杰伦 一群嗜血的蚂蚁被腐肉所吸引 我面无表情看孤独的风景 失去 ...

  4. AI作诗,模仿周杰伦创作歌词-实战项目

    点击上方"码农的后花园",选择"星标" 公众号 精选文章,第一时间送达 很久以来,我们都想让机器自己创作诗歌,当无数作家.编辑还没有抬起笔时,AI已经完成了数千 ...

  5. python爬取qq音乐周杰伦首页歌词

    #爬取qq音乐周杰伦首页歌词 #未名编程 import requests from bs4 import BeautifulSoup import json import reURL = 'https ...

  6. scrapy遇上ajax,抓取QQ音乐周杰伦专辑与歌词

    目录 序言 分析网页 分析请求 代码实现 瞎比比 序言 好久没写原创文章,早就手痒痒了,所以挤出时间写了这篇,这是下面这五篇文章的连载文章: 爬虫利器初体验(1) 听说你的爬虫又被封了?(2) 爬取数 ...

  7. scrapy遇上ajax,抓取QQ音乐周杰伦专辑与歌词(6)

    目录 序言 分析网页 分析请求 代码实现 瞎比比 序言 好久没写原创文章,早就手痒痒了,所以挤出时间写了这篇,这是下面这五篇文章的连载文章: (1) (2) 那这段时间我都去干嘛了呢?时间都用在写小程 ...

  8. Selenium+Request+Beautifulsoup(周杰伦,林俊杰歌词爬取)

    爬去JZ的歌词是为了做一个NlLP的任务,这里是在python上使用Selenuim+Requests+BeautifulSoup实现的.使用selenuim是因为会涉及到动态网页抓取,又使用Requ ...

  9. 陈慧娴《永远是你的朋友》专辑歌词

    千千阕歌 词:林振强 徐徐回望曾属于彼此的晚上,红红仍是你赠我的心中艳阳,如流傻泪,祈望可体恤兼见谅.明晨离别你,路也许孤单得漫长.一瞬间太多东西要讲,可惜即将在各一方,只好深深把这刻尽凝望. 来日纵 ...

  10. 动手学深度学习 - 11.7. d2lzh 包索引

    动手学深度学习 - 11.7. d2lzh 包索引 动手学深度学习 - Dive into Deep Learning Aston Zhang, Zachary C. Lipton, Mu Li, a ...

最新文章

  1. dbcp2和dbcp 1.4在API层面的差异
  2. Win 7/10 安装Oracle 11g
  3. 【Docker】Docker Compose 文件和 Docker 兼容性
  4. SwiftSideslipLikeQQ
  5. 使用JUnit 5测试异常
  6. Verilog HDL中容易生成锁存器的两种情况
  7. arduino openmv 显示图像_6 个芯片打造复古经典计算机:215 色显示,能编程能玩小游戏...
  8. python生成安装程序_python生成安装文件 msi
  9. 更改Mysql5.7的默认编码为utf8解决database为latin1无法修改问题
  10. 轨迹压缩文献阅读 TrajStore: An Adaptive Storage System for Very Large Trajectory Data Sets
  11. android imagebutton 设置边框,【Android技巧】ImageButton 去边框 添加按下效果
  12. 计算机视觉算法面试题面经
  13. 以“万物零售”为主题第十届中国网上零售年会
  14. orcad的交流分析
  15. 软件工程期末试题及答案
  16. DRSL: Deep Relational Similarity Learning for Cross-modal Retrieval-多模态学习总结
  17. (微信定时发送消息)一个java文件,完成可配置的微信定时发送消息任务
  18. Kubernetes系列之五:使用yaml文件创建service向外暴露服务
  19. 3000字作文 小孩调皮
  20. 大二java基础期末考试试题,保准看明白!

热门文章

  1. Jeffrey Dean联署论文 The Case for Learned Index Structures
  2. AndroidX迁移
  3. android l x64,64位 Android L有9大亮点
  4. Latex/CSDN字母输入对照表
  5. 【专项研究】支付宝会员积分体系
  6. 聊聊校招内推,意义/优缺点/如何抓住机会等
  7. 最佳国外域名注册商推荐,不需要备案【Namesilo【推荐】、Namecheap、Godaddy】
  8. 3、一层、二层、交换机原理、Cisco软件及命令
  9. AVR单片机ATMEGA16编译软件ICCAVR的使用技巧与应用示例
  10. LINUX如何设置numlock键开机状态