1.了解词嵌入层的作用
2.了解循环网络层的作用
1.词嵌入层
将文本进行数值化,词嵌入层首先会根据输入的词的数量构建一个词向量矩阵,例如:我们有 100 个词,每个词希望转换成 128 维度的向量,那么构建的矩阵形状即为:100*128,输入的每个词都对应了一个该矩阵中的一个向量。
分词 去重
构建索引列表
构建词嵌入层 embedding(单词数量,维度) embed(tensor) 输入为tensor
import jieba
import torch
import torch.nn as nn
from torch.onnx.symbolic_opset9 import tensortext = '啥什尼基hi你哈是汉纳省的,啊飒飒的'#分词
words = jieba.lcut(text)
print(words)
#['啥', '什尼基', 'hi', '你', '哈', '是', '汉', '纳省', '的', ',', '啊', '飒飒', '的']# 构建索引表index_toword={}
word_toindex={}#去重 set 它是无序且唯一元素的集合。当你将一个列表 words 作为参数传递给 set() 函数时,Python 会自动去除列表中的重复元素。
unique_word=list(set(words))for index,word in enumerate(words):index_toword[index]=wordword_toindex[word]=index# 构建词嵌入层
embed = nn.Embedding(num_embeddings=len(index_toword),embedding_dim=4)
# embed输入为tensor
print(index_toword[0])
print(embed(torch.tensor(0)))
'''
啥
tensor([-1.4100, -0.4027, 0.5297, -1.4162], grad_fn=<EmbeddingBackward0>)
'''
2rnn
词嵌入层将文本信息转化为数字信息,然而文本信息具有序列特征(文本信息是由顺序的),为了表示序列关系,这就需要用到rnn对数据建模,rnn具有记忆功能的网络,处理带有序列特征的样本数据.
输入层的数量跟隐藏层相同 只有输入的最后一个变化 隐藏层维度不变
def test01():# 初始化rnn网络# 输入的每个单词的维度 隐藏层的大小 隐藏层神经元个数(最终输出的为维度)rnn = nn.RNN(input_size=128, hidden_size=256)# 输入的数据 当前的 隐藏层的# 输入的大小 样本数量 输入的维度#inputs = torch.randn(seq_len=1,batch_size= 4,input_size=128)inputs = torch.randn(8,16,128)# #####输入层的数量跟隐藏层相同# 初始化隐藏层 层数 维度#hn=torch.zeros(num_layers=1,batch_size=4,hidden_size=256)hn=torch.zeros(1,16,256)# 输入模型outputs,hn=rnn(inputs,hn)print(outputs.shape)print(hn.shape)'''torch.Size([8, 16, 256])torch.Size([1, 16, 256])
'''