从零开始 NLP:使用字符级 RNN 分类名字
pytorch官方例子学习心得
1、具体任务:
对来自18种语言的几千个姓氏进行训练,并根据拼写预测名字来自哪种语言
2、官方项目连接
3、项目流程:
-
数据预处理
-
原始数据准备:读取下载好的数据
文件名:Arabic是内容的语言种类即标签值; 数据量:一共有18种语言
-
unicode转换为ascii码
1.ascii码表构建用到string库:string.ascii_letters 2.ascii码表长度:54个字母 + 3个标点符号 3.转换用到的unicodedata库: unicodedata.normalize
-
数值化转换
采用数值化技术:one-hot编码 一个字符one-hot编码: 1.初始化码表长度的全为0的张量,形状torch.Size([1, 57]) 2.字符对应码表的位置值改为1 一个单词one-hot编码: 1.遍历单词每一个字母 2.例如,abcsf 形状torch.Size([5, 1, 57])
-
-
构建模型
-
训练网络参数
-
每次迭代-----一个词(举例)
随机生成样本: -- category(语言) :'Scottish' -- category_tensor:torch.Size([1]) -- line(词):'Reid' -- line_tensor:torch.Size([4, 1, 57]),单次训练输入torch.Size([1, 57]) 向前传播: 1.初始化0 隐藏层hidden:torch.Size([1, 128]) 2.置零参数的梯度 3.遍历每个词的 字母 进入网络: 3.1 进入构建网络的forward函数,向前传递 3.2 liner--线性转换 3.3 softmax--分类,输出output:torch.Size([1, 18]),每一个类别的值 3.4 输出hidden:torch.Size([1, 128]),作为本次训练一部分记忆与下一次输入拼接; 4.计算损失值: 4.1 输入:一个词的输出值 output: torch.Size([1, 18]) 标签值(语言种类):category_tensor.shape=torch.Size([1]) 4.2 值:标签值为索引,取output对应索引下的正值 向后传播--计算参数的梯度 更新参数--梯度下降法
-
循环迭代
规定次数打印预测结果: 设置次数记录画图的损失值:每画一次,重置损失值为0
-
预测结果
* 在训练中预测,也可以训练完模型后评估与预测 * 单次预测: 输入:torch.Size([1, 18]) -找最大值和对应的索引-> 输出:类别的索引和类别名称
-
-
可视化结果