自然语言处理中的近似训练

跳字模型的核心在于使用softmax运算得到给定中心词wcw_cwc​来生成背景词wow_owo​的条件概率

P(wo∣wc)=exp(uo⊤vc)∑i∈Vexp(ui⊤vc).P(w_o \mid w_c) = \frac{\text{exp}(\boldsymbol{u}_o^\top \boldsymbol{v}_c)}{ \sum_{i \in \mathcal{V}} \text{exp}(\boldsymbol{u}_i^\top \boldsymbol{v}_c)}.P(wo​∣wc​)=∑i∈V​exp(ui⊤​vc​)exp(uo⊤​vc​)​.

该条件概率相应的对数损失

−log⁡P(wo∣wc)=−uo⊤vc+log⁡(∑i∈Vexp(ui⊤vc)).-\log P(w_o \mid w_c) = -\boldsymbol{u}_o^\top \boldsymbol{v}_c + \log\left(\sum_{i \in \mathcal{V}} \text{exp}(\boldsymbol{u}_i^\top \boldsymbol{v}_c)\right).−logP(wo​∣wc​)=−uo⊤​vc​+log(i∈V∑​exp(ui⊤​vc​)).

由于softmax运算考虑了背景词可能是词典V\mathcal{V}V中的任一词,以上损失包含了词典大小数目的项的累加。不论是跳字模型还是连续词袋模型,由于条件概率使用了softmax运算,每一步的梯度计算都包含词典大小数目的项的累加

对于含几十万或上百万词的较大词典,每次的梯度计算开销可能过大。为了降低该计算复杂度,我们可以使用两种近似训练方法,即负采样(negative sampling)或层序softmax(hierarchical softmax)。由于跳字模型和连续词袋模型类似,本节仅以跳字模型为例介绍这两种方法。

负采样(negative sampling)

负采样修改了原来的目标函数。给定中心词wcw_cwc​的一个背景窗口,我们把背景词wow_owo​出现在该背景窗口看作一个事件,并将该事件的概率计算为

P(D=1∣wc,wo)=σ(uo⊤vc)P(D=1\mid w_c, w_o) = \sigma(\boldsymbol{u}_o^\top \boldsymbol{v}_c)P(D=1∣wc​,wo​)=σ(uo⊤​vc​)

其中的σ\sigmaσ函数与sigmoid激活函数的定义相同:

σ(x)=11+exp⁡(−x).\sigma(x) = \frac{1}{1+\exp(-x)}.σ(x)=1+exp(−x)1​.

我们先考虑最大化文本序列中所有该事件的联合概率来训练词向量。具体来说,给定一个长度为TTT的文本序列,设时间步ttt的词为w(t)w^{(t)}w(t)且背景窗口大小为mmm,考虑最大化联合概率

∏t=1T∏−m≤j≤m,j≠0P(D=1∣w(t),w(t+j)).\prod_{t=1}^{T} \prod_{-m \leq j \leq m,\ j \neq 0} P(D=1\mid w^{(t)}, w^{(t+j)}).t=1∏T​−m≤j≤m, j​=0∏​P(D=1∣w(t),w(t+j)).

然而,以上模型中包含的事件仅考虑了正类样本。这导致当所有词向量相等且值为无穷大时,以上的联合概率才被最大化为1。很明显,这样的词向量毫无意义。

负采样通过采样并添加负类样本使目标函数更有意义。设背景词wow_owo​出现在中心词wcw_cwc​的一个背景窗口为事件PPP,我们根据分布P(w)P(w)P(w)采样KKK个未出现在该背景窗口中的词,即噪声词。设噪声词wkw_kwk​(k=1,…,Kk=1, \ldots, Kk=1,…,K)不出现在中心词wcw_cwc​的该背景窗口为事件NkN_kNk​。假设同时含有正类样本和负类样本的事件P,N1,…,NKP, N_1, \ldots, N_KP,N1​,…,NK​相互独立,负采样将以上需要最大化的仅考虑正类样本的联合概率改写为

∏t=1T∏−m≤j≤m,j≠0P(w(t+j)∣w(t)),\prod_{t=1}^{T} \prod_{-m \leq j \leq m,\ j \neq 0} P(w^{(t+j)} \mid w^{(t)}),t=1∏T​−m≤j≤m, j​=0∏​P(w(t+j)∣w(t)),

其中条件概率被近似表示为 P(w(t+j)∣w(t))=P(D=1∣w(t),w(t+j))∏k=1,wk∼P(w)KP(D=0∣w(t),wk).P(w^{(t+j)} \mid w^{(t)}) =P(D=1\mid w^{(t)}, w^{(t+j)})\prod_{k=1,\ w_k \sim P(w)}^K P(D=0\mid w^{(t)}, w_k).P(w(t+j)∣w(t))=P(D=1∣w(t),w(t+j))k=1, wk​∼P(w)∏K​P(D=0∣w(t),wk​).

设文本序列中时间步ttt的词w(t)w^{(t)}w(t)在词典中的索引为iti_tit​,噪声词wkw_kwk​在词典中的索引为hkh_khk​。有关以上条件概率的对数损失为

−log⁡P(w(t+j)∣w(t))=−log⁡P(D=1∣w(t),w(t+j))−∑k=1,wk∼P(w)Klog⁡P(D=0∣w(t),wk)=−log⁡σ(uit+j⊤vit)−∑k=1,wk∼P(w)Klog⁡(1−σ(uhk⊤vit))=−log⁡σ(uit+j⊤vit)−∑k=1,wk∼P(w)Klog⁡σ(−uhk⊤vit).\begin{aligned} -\log P(w^{(t+j)} \mid w^{(t)}) =& -\log P(D=1\mid w^{(t)}, w^{(t+j)}) - \sum_{k=1,\ w_k \sim P(w)}^K \log P(D=0\mid w^{(t)}, w_k)\ \\ =&- \log \sigma\left(\boldsymbol{u}_{i_{t+j}}^\top \boldsymbol{v}_{i_t}\right) - \sum{k=1,\ w_k \sim P(w)}^K \log\left(1-\sigma\left(\boldsymbol{u}_{h_k}^\top \boldsymbol{v}_{i_t}\right)\right)\\\ =&- \log \sigma\left(\boldsymbol{u}_{i_{t+j}}^\top \boldsymbol{v}_{i_t}\right) - \sum{k=1,\ w_k \sim P(w)}^K \log\sigma\left(-\boldsymbol{u}_{h_k}^\top \boldsymbol{v}_{i_t}\right). \end{aligned} −logP(w(t+j)∣w(t))== =​−logP(D=1∣w(t),w(t+j))−k=1, wk​∼P(w)∑K​logP(D=0∣w(t),wk​) −logσ(uit+j​⊤​vit​​)−∑k=1, wk​∼P(w)Klog(1−σ(uhk​⊤​vit​​))−logσ(uit+j​⊤​vit​​)−∑k=1, wk​∼P(w)Klogσ(−uhk​⊤​vit​​).​

现在,训练中每一步的梯度计算开销不再与词典大小相关,而与KKK线性相关。当KKK取较小的常数时,负采样在每一步的梯度计算开销较小。

深度学习-自然语言处理中的近似训练相关推荐

  1. 自然语言处理中的预训练技术发展史

    公众号关注 "视学算法" 设为 "星标",重磅干货,第一时间送达! 本文作者:张俊林 https://zhuanlan.zhihu.com/p/49271699 ...

  2. 【NLP】从WE、ELMo、GPT到Bert模型—自然语言处理中的预训练技术发展史

    Bert最近很火,应该是最近最火爆的AI进展,网上的评价很高,那么Bert值得这么高的评价吗?我个人判断是值得.那为什么会有这么高的评价呢?是因为它有重大的理论或者模型创新吗?其实并没有,从模型创新角 ...

  3. 从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史

    本文可以任意转载,转载时请标明作者和出处. 张俊林 2018-11-11 (如果图片浏览有问题可以转至:知乎版本) Bert最近很火,应该是最近最火爆的AI进展,网上的评价很高,那么Bert值得这么高 ...

  4. Bert模型-自然语言处理中的预训练技术发展史

    为什么Bert最近很火? 其实Bert并没有重大的理论或者模型创新,创新并不算大.主要原因是效果太好了,刷新了很多NLP任务的最好性能,有些任务还被刷爆了.另外一点是Bert具备广泛的通用性,绝大部分 ...

  5. 从Word Embedding到Bert模型:自然语言处理中的预训练技术发展史

    转:https://zhuanlan.zhihu.com/p/49271699 作者:张俊林 专栏:深度学习前沿笔记 目录: 1.图像领域的预训练 2.Word Embedding考古史 3.从Wor ...

  6. 【发展史】自然语言处理中的预训练技术发展史—Word Embedding到Bert模型

    目录 自然语言处理中的预训练技术发展史-Word Embedding到Bert模型 1 图像领域的预训练 2 Word Embedding考古史 3 从Word Embedding到ELMO 4 从W ...

  7. 【零基础深度学习教程第二课:深度学习进阶之神经网络的训练】

    深度学习进阶之神经网络的训练 神经网络训练优化 一.数据集 1.1 数据集分类 1.2 数据集的划分 1.3 同源数据集的重要性 1.4 无测试集的情况 二.偏差与方差 2.1 概念定义 2.1.1 ...

  8. 【深度学习】Tensorboard可视化模型训练过程和Colab使用

    [深度学习]Tensorboard可视化模型训练过程和Colab使用 文章目录 1 概述 2 手撸代码实现 3 Colab使用3.1 详细步骤3.2 Demo 4 总结 1 概述 在利用TensorF ...

  9. CV之YOLOv3:深度学习之计算机视觉神经网络Yolov3-5clessses训练自己的数据集全程记录(第二次)

    YOLOv3:深度学习之计算机视觉神经网络Yolov3-5clessses训练自己的数据集全程记录(第二次) 目录 训练记录 训练记录

最新文章

  1. 朴素贝叶斯与逻辑回归区别
  2. SpringBoot 第十篇: 用spring Restdocs创建API文档
  3. Microsoft Dynamics CRM 2015 新增功能 介绍 高级查找功能
  4. 【.NET Core 3.0】 46 ║ 授权认证:自定义返回格式
  5. web api 权限控制
  6. 在Blazor中构建数据库应用程序——第5部分——查看组件——UI中的CRUD列表操作
  7. ElementUI 按需引入坑爹的点记录
  8. 蓝桥杯 ALGO-72 算法训练 成绩的等级输出
  9. Docker-compose编排微服务顺序启动解决方案
  10. Uabntu安装AWVS11以及破解
  11. 系统集成项目管理工程师 笔记(第一章:信息化知识)
  12. js中outerHTML的问题
  13. 深度学习入门笔记(二十一):经典神经网络(残差网络ResNets)
  14. 如何配置服务器的内网IP以及MTU
  15. 博客园北京俱乐部置顶消息汇总(2009-03-03更新)
  16. putty 显示鼠标
  17. Ubuntu 16.04 小键盘数字键盘开机自动启动
  18. 使用shapeit进行单倍型分析
  19. 计算机应用数学 教材,计算机应用数学(第2版)
  20. 计算机学院杨洋,杨洋-湖北大学计算机与信息工程学院

热门文章

  1. python之路day4_python之路day4
  2. hive 2.3 mysql_Note23:Hive-2.3.6安装配置
  3. 使用Atom快速打造好用的Markdown编辑器
  4. 编程之美 - 哪个题目最美?
  5. macos系统自动安装mysql_macos系统安装mysql
  6. 计算机是怎么RUN起来的
  7. JAVA入门级教学之(while循环语句)
  8. mysql table keys_MySQL Explain详解
  9. pythonlistsort函数_python用List的内建函数list.sort进行排序
  10. 3三星闪存刷梅林_三星电子副会长李在镕造访西安