从零开始 NLP:使用字符级 RNN 分类名字

从零开始 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])  -找最大值和对应的索引->
       输出:类别的索引和类别名称
      
  • 可视化结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值