写这个不易,如果有帮助,请点个赞,让更多人看到。
转载请注明出处!!!
这篇文章,来自于以下链接, 该文章在实现过程中,由浅入深,但是代码并未给太多注释。当时作为一个新手的我,也是看的磕磕绊绊,边阅读边注释,而且注释的很随意。现在闲有余空,把之前的注释都放出来(作为一个初学者,可能有不少注释错误,仅当做参考哈)。
该原文章来自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安装)。
一、简要叙述一下利用神经网络来训练的几个步骤:
-
准备数据。
在利用神经网络训练过程中,往往需要大量的数据。在有监督训练的情况下,数据往往包含两部分,输入数据集(即X,也就是预测Y的输入数据X),输出数据集(即Y,也就是利用输入域的X得到的结果Y)。比如一组为:某个单词(即输入数据X); 类别,即该单词属于哪个国家语言(输出数据Y)。注意:输入X和输出Y一 一对应, 数据集是包含多组这种数据的集合。(从数学角度来打个简单相似的比方, 未训练的模型是 Y = aX + b, 输入为X,输入为Y, 我们根据很多X、Y数据映射,就能求出a和b。) -
处理数据。
对于模型而言,输入、输出数据,无论是中文还是英文,都需要将其转换为用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