1、原始数据集 训练集、测试集 两个
2、获取数据路径
3、读取数据
2、要得到两个列表和两个字典
2.1、两个列表
2.2、两个字典
3.1、定义自己的Dataset
3.2、定义自己的DataLoader
得到三个矩阵 要输入模型 数量的时候要的数据
4、模型
数据计算流程:
4.1:先将模型的梯度值清零。梯度值:就是loss的数值
生成词向量
现将数值型句子进行词向量
(1)、结果
x_list进行词向量前 维度 4×82 四句话 最长的82个字
x_list进行词向量后 维度 4×82×16 四句话 最长的82个字 16维度词向量
(2)、代码
#padding_idx 默认是0 # 最终向量中的值为0的继续嵌入为0,如果设置为3的话, 那么向量中值为3的位置的向量也将嵌入为0
4.2:进入LSTM进行训练
(1)、LSTM参数的认识
1:
(2)、LSTM模型数据计算的流程
1、得到词向量的表达形式,
2、进过线性层(矩阵),训练矩阵里面的数值,(所谓的参数)
hidden_size() He num_layers
3、加上前一时刻的信息生成新矩阵
4、在进行激活函数函数
Linear()
5、加和隐藏层矩阵相乘形成旧信息(训练里面的数值(参数))
(3)、在进行激活函数前得到的矩阵维度为(句子数:序列最大长度:隐藏层维度)
在进行激活函数前得到的矩阵维度为(句子数:序列最大长度:标签数(类别))
(4)、在经过CRF得到损失值。CRF的作用
CRF的作用是给每一个可能的标注序列算一个分数,通过训练,
使得那个唯一的真实标签序列得分最高。
目标是让Prob尽可能大,损失函数是:
(5)、标注序列的分数由两部分组成,一个是发射分数,一个是转移分数。
发射分数:序列经过全连接激活函数后,得到的每个字各个标签的概率,
就是发射分数,其实就是一个(字个数:标签个数)矩阵
转移分数:是不同标签之间转移的分数值,是一个(标签个数:标签个数)矩阵
最终分数:
假设标注序列是(L1,L2,...,Ln),L是label的首字母。
首先从发射分数矩阵中找出w1字符是L1的概率,依次类推,
找出所有字符的相应概率,加在一起,就是该序列的发射分数。
从转移分数矩阵中找出L1转移到L2的概率,依次类推,
找出该序列中所有相邻标签的转移概率,加在一起,
就是该序列的转移分数。
上述二者相加,就是该标注序列的最终分数了。
(6)、 CRF计算流程
1、得到激活函数得到的矩阵
2、在和DataLoader得到的 另外两个矩阵,上面(y_list和mask_list)
得到损失值
(7)、代码
5、训练流程以及推理
5.1:训练流程
(1)、设置训练次数
(2)、梯度清零
(3)、前向运算
(4)、计算损失
(5)、反向传播、梯度更新
(6)、进行纪录损失值以及推理准确率
5.2:训练代码
6、推理以及代码
6.1:推理流程
1:关闭反向传播
2:将x_list进行前向传播得到预测的y
3:记录并计算批次中准确率
6.2:代码
6.3:真实标签中实体标记匹配——代码
1、总结。
(1):RNN输入想要的是什么样的数据
数据的处理:字变词向量 word2ver
流程:1、词库,或者字库 (确定是以词为单位还是字) 数量n
2、词向量维度 设置每个词所对应的维度 维度100
3、生成3个 打包生成矩阵(n×100的矩阵),word_2_index, indec_2_word
需要的数据 5句话,每句长31,词向量维128。一个三维向量
(2):数据在LSTM里面是怎么样计算的 这个是分类任务需要的
(3):最终得到的数据是什么样的
(4)、代码