1.7-自然语言的分布式表示-skip-gram模型代码实现

  1. 书上提供了skip-gram模型的代码实现,但是没有去讲解;这里我们自己来看看他提供的代码;
  2. 看代码的时候,尤其注意他和前面所说的CBOW模型在实现上的区别;
  3. 这里也提供了一份完整的副本:https://1drv.ms/u/s!AvF6gzVaw0cNjqFRa39YunPQdYGINQ?e=o8BLSu;

1 skip-gram模型的实现

1.1模型结构的实现

  1. 下图为skip-gram模型与CBOW模型在模型结构实现上的代码对比:

    在这里插入图片描述

    1. 都是使用 w i n w_{in} win w o u t w_{out} wout作为输入侧和输出侧的权重矩阵;

    2. skip-gram模型输入是中间的目标词,因此只需要一个输入层来处理一个单词即可

    3. 从前面讲述的skip-gram模型的网络结构来看(即下图),因为要预测的是上下文,所以输出侧多次使用了 w o u t w_{out} wout;但是在代码实现上,也只是构建了一个out_layer;可以不可以构建两个out_layer(这两个out_layer共享权重 w o u t w_{out} wout)呢?

      在这里插入图片描述

      1. 答案是可以的,这两种方式在前向计算时应该是没有区别的,效果一样;区别主要在于反向传播的时候
      2. 使用一个out_layer,由于后面计算损失还是要计算两次然后损失相加,因此反向传播时当计算完两个损失的分支之后,需要先累加两路分支的梯度,然后再经过out_layer层的反向传播计算 w o u t w_{out} wout的梯度;即先累加损失分支的梯度,再求 w o u t w_{out} wout的梯度;
      3. 使用两个out_layer,则每个损失反向传播结束后,分别进入各自的out_layer层进行反向传播,得到各路分支对各自层的 w o u t w_{out} wout​的梯度;此时就需要模仿CBOW模型在训练时的处理,即需要将共享权重的梯度进行整合,也即将这些梯度累加。
    4. Skip-gram模型的损失计算层有两个(前提是上下文窗口大小为1),而CBOW模型的损失计算层只有一个,因为目标词就是它的预测目标;

    5. 其余内容一样:梯度和参数的整理等

1.2前向传播的实现

  1. 两个模型的前向计算过程对比如下图所示:

    在这里插入图片描述

    1. 注意此时Skip-gram模型的输入是target,即目标词;这与CBOW模型不同
    2. CBOW由于有两个输入层,因此两个输入层计算好之后需要相加再平均才能得到中间层的结果;而Skip-gram模型则是一步到位;
    3. 中间层到输入层一样,因为在代码实现上两者都是一个out_layer
    4. CBOW模型只需要计算一个损失即可;Skip-gram模型则使用了两次输出,分别与上下文单词计算了损失,并求和作为最终损失;

1.3反向传播的实现

  1. 两个模型的反向传播计算过程对比如下图所示:

    在这里插入图片描述

    1. CBOW模型只有一个损失层,所以反向传播只计算一次;而Skip-gram模型有两个损失计算层,所以计算了两个;且根据前向传播计算图,模型输出形成两路分支来计算两个损失,因此反向传播到这个分支处时,梯度需要累加;所以out_layer的输出侧的梯度是ds = dl1 + dl2
    2. 之后的反向传播过程两个模型一样;

2 skip-gram模型的计算与学习

  1. 实现skip-gram模型的前向计算的代码与CBOW相差无几,两者的对比如下:

    在这里插入图片描述

  2. skip-gram模型的训练和学习的实现:

    1. 这里没有专门去写这部分的代码,但是基本上都和CBOW模型的训练过程类似;

    2. 要说区别的话,其实就是少了一个梯度整合的过程,因为这里我们只用了一个输入层权重和输出层权重,不存在权重共享的情况;

      在这里插入图片描述

3总结

  1. 目前学习到的CBOW模型和skip-gram模型都是基于推理的方法,说白了就是神经网络的方法;和书上一样,我们再来总结一下这两类方法;
  2. 基于计数的方法通过 对整个语料库的统计数据进行一次学习(其实就是统计了)来获得单词的分布式表示,而基于推理的方法是通过神经网络进行学习,这个学习除了学习到单词的分布式表示,其实还可以学习到一些模式;
    1. 因此,当语料库发生变化时,基于计数的方法的成本问题就出现了
    2. 而基于推理的方法, 可以通过mini-batch的学习,实现增量学习,进一步更新模型的参数,成本较低;

-----------以下是书上原话-------------

  1. 但是,不是说基于推理的方法就是优于基于计数的方法,实际上,有研究表明,就单词相似性的定量评价而言,基于推理的方法和基于计数的方法难分上下
  2. 基于推理的方法和基于计数的方法存在关联性
    1. 具体地说,使用了 skip-gram 和下一章介绍的 Negative Sampling 的模型被证明与对整个语料库的共现矩阵(实际上会对矩阵进行一定的修改)进行特殊矩阵分解的方法具有相同的作用;即这两种方法在某些条件下是相通的,详见论文
  3. GloVe方法融合了基于推理的方法和基于计数的方法。该方法的思想是,将整个语料库的统计数据的信息纳入损失函数,进行 mini-batch 学习。据此,这两个方法论成功地被融合在了一起。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值