当前位置: 首页 > news >正文

[深度学习]循环神经网络

1 自然语言处理概述

  • 语料:一个样本,句子/文章
  • 语料库:由语料组成
  • 词表:分词之后的词语去重保存成为词表

2 词嵌入层

import jieba
import torch.nn as nn
import torch
# 文本数据
text='北京东奥的进度条已经过半,不少外国运动员在完成自己的比赛后踏上归途。'
# 分词
words=jieba.lcut(text)
print(words)
# 构建词表
uwords=list(set(words))
print(uwords)
words_num=len(uwords)
print(words_num)
# 构建词向量矩阵
embed=nn.Embedding(num_embeddings=words_num,embedding_dim=5)
print(embed(torch.tensor(1)))
# 输出结果
for i,word in enumerate(uwords):print(word,end=' ')print(embed(torch.tensor(i)))
['北京', '东奥', '的', '进度条', '已经', '过半', ',', '不少', '外国', '运动员', '在', '完成', '自己', '的', '比赛', '后', '踏上', '归途', '。']
['自己', '运动员', '外国', '在', '后', '比赛', ',', '已经', '。', '过半', '不少', '进度条', '归途', '东奥', '踏上', '北京', '完成', '的']
18
tensor([-0.0293, -0.5446, -0.4495, -0.4013, -0.8653],grad_fn=<EmbeddingBackward0>)
自己 tensor([-0.0907, -0.6044,  1.9097,  1.1630, -0.4595],grad_fn=<EmbeddingBackward0>)
运动员 tensor([-0.0293, -0.5446, -0.4495, -0.4013, -0.8653],grad_fn=<EmbeddingBackward0>)
外国 tensor([ 1.9382, -1.3591, -0.2884, -1.4880, -0.2400],grad_fn=<EmbeddingBackward0>)
在 tensor([ 1.0954,  0.2975, -0.5151, -0.4355,  0.3870],grad_fn=<EmbeddingBackward0>)
后 tensor([-0.1857, -0.4351,  0.3869, -0.6311, -1.5527],grad_fn=<EmbeddingBackward0>)
比赛 tensor([-1.7570, -1.1983, -0.7864,  0.7223, -0.5285],grad_fn=<EmbeddingBackward0>)
, tensor([-0.2706,  1.7983,  0.9599, -0.5464,  0.7365],grad_fn=<EmbeddingBackward0>)
已经 tensor([ 1.4934, -0.7174,  1.1466, -0.3617,  0.6748],grad_fn=<EmbeddingBackward0>)
。 tensor([ 0.7996, -0.5406, -0.6476,  0.3923,  0.5128],grad_fn=<EmbeddingBackward0>)
过半 tensor([ 1.2070,  0.9933,  0.2634,  0.3173, -0.2273],grad_fn=<EmbeddingBackward0>)
不少 tensor([ 0.6716,  1.6509,  0.7375,  0.7585, -0.6289],grad_fn=<EmbeddingBackward0>)
进度条 tensor([ 0.4440,  1.9701,  0.6437, -0.2500, -0.8144],grad_fn=<EmbeddingBackward0>)
归途 tensor([-0.5646,  0.8995, -0.5827, -1.0231,  1.3692],grad_fn=<EmbeddingBackward0>)
东奥 tensor([-0.8312,  0.2083,  1.3728,  0.2860,  0.2762],grad_fn=<EmbeddingBackward0>)
踏上 tensor([ 0.0955,  0.5528, -0.5286,  0.6969, -0.7469],grad_fn=<EmbeddingBackward0>)
北京 tensor([ 0.4739,  0.6474,  0.3765, -1.9607, -1.1079],grad_fn=<EmbeddingBackward0>)
完成 tensor([ 1.2215, -0.3468, -0.1432,  0.5908,  1.2294],grad_fn=<EmbeddingBackward0>)
的 tensor([ 0.3083,  0.0163,  1.4923, -0.2768,  0.0904],grad_fn=<EmbeddingBackward0>)

3 循环网络RNN

  • 激活函数为tanh
  • 隐藏状态:当前词前面的信息 
  • [batch,seqlen(句子长度),词向量维度]
  • pytorch框架的[seq_len,batch,input_size]

# RNN层API
import torch.nn as nn
import torch
# 词向量维度128,隐藏向量维度256
rnn=nn.RNN(input_size=128,hidden_size=256,num_layers=2)
# 第一个数字:seq_len,句子长度,也就是词语个数
# 第二个数字:batch,批量个数,也就是句子的个数
# 第三个数字:input_size,词向量的维度
# [seq_len,batch,input_size]
x=torch.randn([32,10,128])
# 第一个数字:num_layers,隐藏层的个数
# 第二个数字:batch,批量个数,也就是句子的个数
# 第三个数字:hidden_size,隐藏向量的维度
# [num_layers,batch,hidden_size]
h0=torch.zeros([2,10,256])
output,hn=rnn(x,h0)
# [seq_len,batch,hidden_size]
print(output.shape)
# [num_layers,batch,hidden_size]
print(hn.shape)

4 文本生成案例

import jieba# 构建词表
all_words = []
unique_words = []
for text in open('jaychou_lyrics.txt', 'r', encoding='utf8'):words = jieba.lcut(text)all_words.append(words)for word in words:if word not in unique_words:unique_words.append(word)word2idx = {word: idx for idx, word in enumerate(unique_words)}
# print(all_words)
# print(unique_words)
# print(word2idx)
print(len(unique_words))
corpus_ids = []
for words in all_words:temp = []for word in words:temp.append(word2idx[word])temp.append(word2idx[' '])corpus_ids.extend(temp)
print(corpus_ids)

from torch.utils.data import Datasetclass textDataset(Dataset):def __init__(self, corpus_ids, seq_len):self.corpus_ids = corpus_idsself.seq_len = seq_lenself.word_count = len(self.corpus_ids)self.number = self.word_count // self.seq_lendef __len__(self):return self.numberdef __getitem__(self, idx):# idx指词的索引,并将其修正索引到文档的范围里面start = min(max(idx, 0), self.word_count - self.seq_len - 2)x = self.corpus_ids[start:start + self.seq_len]y = self.corpus_ids[start + 1:start + 1 + self.seq_len]return torch.tensor(x), torch.tensor(y)dataset = textDataset(corpus_ids, 5)
print(dataset.__getitem__(1))

http://www.lryc.cn/news/448208.html

相关文章:

  • 景联文科技精准数据标注:优化智能标注平台,打造智能未来
  • 商场促销——策略模式
  • 万字长文,AIGC算法工程师的面试秘籍,推荐收藏!
  • 一些超好用的 GitHub 插件和技巧
  • 记Flink SQL 将数据写入 MySQL时的一个优化策略
  • QT-自定义信号和槽对象树图形化开发计算器
  • C# 字符串(String)的应用说明一
  • Redis缓存淘汰算法详解
  • Sklearn 与 TensorFlow 机器学习实用指南
  • RabbitMQ 界面管理说明
  • 设备管理与点巡检系统
  • 计算机网络的整体认识---网络协议,网络传输过程
  • Battery management system (BMS)
  • 和GPT讨论ZNS的问题(无修改)
  • 6.8方框滤波
  • 携手SelectDB,观测云实现性能与成本的双重飞跃
  • Redis 五大基本数据类型及其应用场景进阶(缓存预热、雪崩 、穿透 、击穿)
  • 如何在ChatGPT的帮助下,使用“逻辑回归”技巧完成论文写作?
  • MySQL 临时表
  • 个人文章汇总(算法原理算法题)
  • 基于Hive和Hadoop的图书分析系统
  • 阿里rtc云端录制TypeScript版NODE运行
  • Web后端开发原理!!!什么是自动配置???什么是起动依赖???
  • 2-105 基于matlab的GA-WNN预测算法
  • GPT-o1模型实测:论文选题没思路,ChatGPT-o1带你飞!
  • OpenCV视频I/O(2)视频采集类VideoCapture之检索视频流的各种属性函数get()的使用
  • 基于SpringBoot的学生宿舍管理系统【附源码】
  • 【开源免费】基于SpringBoot+Vue.JS新闻推荐系统(JAVA毕业设计)
  • 【每天学个新注解】Day 8 Lombok注解简解(七)—@Getter(lazy=true)
  • 打造备份一体机,群晖科技平台化战略再进阶