史上最简单、实际、通俗易懂的PyTorch实战系列教程!(新手友好、小白请进、建议收藏)

自然语言处理(NLP)

一、递归神经网络(RNN)

递归神经网络只是在传统的神经网络上进行一个改进,就是可以处理时间序列了。下图右边的架构,隐藏层有一个回路,这个回路可以保存得到隐藏层得到的特征参与下一次的运算。
qiuzitao深度学习之PyTorch实战(十一)
比如下图,x0,x1,x2,…,xt 表示多个时间序列,不同的时刻。假如 x0 表示今天上午的股票价格,x1 是今天中午的股票价格,x2 是今天晚上的股票价格等等等。那么 h0,h1,h2,…,ht代表的就是他们每个时刻输出的结果(中间结果)。

比如 I am Chinese 这个句子,我们需要一个顺序,I 在前面,am 在中间,Chinese 在后面,就是词向量嘛,然后通过中间隐层的转换转换成一个几维的特征这样子再进行训练。也就是word2vec(Word to Vector,由词到向量的方法)
qiuzitao深度学习之PyTorch实战(十一)

二、长短期记忆网络(LSTM)

RNN就是上面介绍的,它有个缺点,就是记得太多了,把前面生成的中间产物,每一个时间序列生成的特征都保存了,记下来了,这样就容易记得不精,可能产生一些误差和错误。那么LSTM就是解决了这个缺点,让它忘记一些之前的特征,改记住的记住,不改记住的舍去。
qiuzitao深度学习之PyTorch实战(十一)
qiuzitao深度学习之PyTorch实战(十一)

qiuzitao深度学习之PyTorch实战(十一)
qiuzitao深度学习之PyTorch实战(十一)
qiuzitao深度学习之PyTorch实战(十一)
qiuzitao深度学习之PyTorch实战(十一)
qiuzitao深度学习之PyTorch实战(十一)
qiuzitao深度学习之PyTorch实战(十一)
qiuzitao深度学习之PyTorch实战(十一)
LSTM就是在RNN的基础上进行改进的,加上了一个C控制参数,可以记住那些值得记住的,舍去不重要的,取其精华去其糟粕。

三、词向量模型 – Word2Vec

Word2Vec – Word to Vector,由词到向量的方法

先考虑第一个问题:如何将文本向量化呢?听起来比较抽象,但我们可以先从人的角度来观察思考。

如何来描述一个人呢?只用身高或者体重,还是综合其各项指标呢?
qiuzitao深度学习之PyTorch实战(十一)

只要有了向量我们就可以用不同的方法来计算相似度。

qiuzitao深度学习之PyTorch实战(十一)
通常,数据的维度越高,能提供的信息也就越多,从而计算结果的可靠性就更值得信赖。
qiuzitao深度学习之PyTorch实战(十一)
如何来描述语言的特征呢?通常来说都在词的层面上来构建特征。Word2Vec就是要把词转换成向量。
qiuzitao深度学习之PyTorch实战(十一)
上图假设你现在已经拿到一份训练好的词向量,其中每一个词都表示为50维的向量:
qiuzitao深度学习之PyTorch实战(十一)
如果在热度图中显示,结果如下:
qiuzitao深度学习之PyTorch实战(十一)
在下图结果中可以发现,相似的词在特征表达中比较相似,也就是说明词的特征是有实际意义的。
qiuzitao深度学习之PyTorch实战(十一)
在词向量模型中输入和输出分别是什么?
qiuzitao深度学习之PyTorch实战(十一)
qiuzitao深度学习之PyTorch实战(十一)
qiuzitao深度学习之PyTorch实战(十一)
以上图为例,输入两个词–‘Thou’和‘shalt’,输入后在词库的大表中查找输入词对应的词向量,这个词库的大表就是随机的初始化参数,每一次训练都会更新。

数据从哪来?
qiuzitao深度学习之PyTorch实战(十一)
比如你要做一个新闻的,但是新闻的文本不够,因为我们的文字是相通的,所以你可以在其他地方比如小说找来训练的数据,因为一些合乎我们说话的逻辑的文本都是可以用的。

构建训练数据:

“滑窗法”
qiuzitao深度学习之PyTorch实战(十一)
qiuzitao深度学习之PyTorch实战(十一)
qiuzitao深度学习之PyTorch实战(十一)
不同模型对比:

CBOW:
输入是上下文,输出是中间的词。
qiuzitao深度学习之PyTorch实战(十一)

qiuzitao深度学习之PyTorch实战(十一)
Skipgram:
知道中间的词,去预测上下文。
qiuzitao深度学习之PyTorch实战(十一)

qiuzitao深度学习之PyTorch实战(十一)
Skip-gram模型所需训练数据集:
qiuzitao深度学习之PyTorch实战(十一)
qiuzitao深度学习之PyTorch实战(十一)
如何进行训练?

qiuzitao深度学习之PyTorch实战(十一)
如果一个语料库稍微大一些,可能的结果简直太多了,最后一层相当于softmax,计算起来十分耗时,有什么办法来解决嘛?

初始方案:输入两个单词,看他们是不是前后对应的输入和输出,也就是相当于一个二分类任务。
qiuzitao深度学习之PyTorch实战(十一)
出发点非常好,但是此时训练集构建出来的标签全为1,无法进行较好的训练
qiuzitao深度学习之PyTorch实战(十一)
改进方案:加入一些负样本(负采样模型):0
qiuzitao深度学习之PyTorch实战(十一)
qiuzitao深度学习之PyTorch实战(十一)
词向量训练过程:

1、初始化词向量矩阵:
qiuzitao深度学习之PyTorch实战(十一)
qiuzitao深度学习之PyTorch实战(十一)
2、通过神经网络反向传播来计算更新,此时不光更新权重参数矩阵W,也会更新输入数据
qiuzitao深度学习之PyTorch实战(十一)

相关文章:

  • 2021-10-31
  • 2021-09-22
  • 2021-09-26
  • 2021-11-22
  • 2021-12-11
  • 2023-03-08
  • 2021-07-03
  • 2022-12-23
猜你喜欢
  • 2021-10-11
  • 2021-04-18
  • 2022-12-23
  • 2023-03-27
  • 2021-11-03
  • 2021-08-13
相关资源
相似解决方案