利用RNN进行分类。pytorch nlp:从零开始的NLP:使用字符级RNN对名称进行分类

写这个不易,如果有帮助,请点个赞,让更多人看到。
转载请注明出处!!

这篇文章,来自于以下链接, 该文章在实现过程中,由浅入深,但是代码并未给太多注释。当时作为一个新手的我,也是看的磕磕绊绊,边阅读边注释,而且注释的很随意。现在闲有余空,把之前的注释都放出来(作为一个初学者,可能有不少注释错误,仅当做参考哈)。
该原文章来自pytorch, 链接(点击此处):
https://pytorch.org/tutorials/intermediate/char_rnn_classification_tutorial.html
pytorch nlp全部教程例子链接(点击此处):
https://pytorch.org/tutorials/beginner/deep_learning_nlp_tutorial.html
注意:需要安装pytorch和Python,一起其他一些包(直接可用pip安装)。
一、简要叙述一下利用神经网络来训练的几个步骤

  1. 准备数据。
    在利用神经网络训练过程中,往往需要大量的数据。在有监督训练的情况下,数据往往包含两部分,输入数据集(即X,也就是预测Y的输入数据X),输出数据集(即Y,也就是利用输入域的X得到的结果Y)。比如一组为:某个单词(即输入数据X); 类别,即该单词属于哪个国家语言(输出数据Y)。注意:输入X和输出Y一 一对应, 数据集是包含多组这种数据的集合。(从数学角度来打个简单相似的比方, 未训练的模型是 Y = aX + b, 输入为X,输入为Y, 我们根据很多X、Y数据映射,就能求出a和b。)

  2. 处理数据。
    对于模型而言,输入、输出数据,无论是中文还是英文,都需要将其转换为用0、1表示的值,这样就能进行训练。
    到目前为止,将数据转换为0、1代表的值, 我遇到两种情况(取一组输入、输出数据为例):
    (1)非分类问题:比如利用one-hot方式(随便搜索了一篇onehot博客,直接看后面那部分应用,简单明了,链接)。此情况往往原始数据输入和输出都处理为一维。怎么转换成由0、1表示呢? 例如: dog, 转换成模型的输入为 [0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0] 。在这个例子中,我们将dog拆分为d , o , g三个字母,然后我们总词为26个字母,构成一个list, 所以dog拆分后的字母在总字母的位置,改为1,其他字母未出现,依然为0。
    (2)分类问题: 此情况将每组原始数据处理为多维的(此文后面分类问题就是处理为多维)。比如人名jack, 处理为多维就是 :
    [[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
    [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
    [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
    [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] ]
    此时,每个字母都是相对于总字母库生成一个表示,4行1列。
    综上: 无论哪种情况, 将原始数据处理为0,1表示,都需要构建一个总的词库(上面是26个字母构成)。然后将输入和输出,利用在总的词库中的位置, 产生这种表示。(注意:实际上应该是构建两个总的词库, 即一个对应于输入来构建, 一个对应于输出来构建, 这样输入和输出, 都可以用0,1表示) 比如我们在处理中文文本,往往将文本进行分词(比如jieba分词), 然后将所有组输入数据(或者输出数据)的分词结果,去除重复的, 然后构建输入总词库(或者输出总词库)。然后每组数据在传入模型之前,进行分词,然后和总词库进行对比,转换成0、1表示。(注意:输入数据、输出数据都是分开单独处理的。)
    注意:pytorch中,转换的是为张量tensor,其中为0、1表示。其实只是看起来形式不一样。
    例如:

    tensor([[[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0.]],
    
    [[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0.]],
    
    [[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
      0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值