引言

在许多自然语言处理任务中,许多单词表达是由他们的tf-idf分数决定的。即使这些分数告诉我们一个单词在一个文本中的相对重要性,但是他们并没有告诉我们单词的语义。Word2vec是一类神经网络模型——在给定无标签的语料库的情况下,为语料库中的单词产生一个能表达语义的向量。这些向量通常是有用的:

  • 通过词向量来计算两个单词的语义相似性
  • 对某些监督型NLP任务如文本分类,语义分析构造特征

接下来我将描述Word2vec其中一个模型,叫做skip-gram模型

skip-gram模型

在我详细介绍skip-gram模型前,我们先来了解下训练数据的格式。skip-gram模型的输入是一个单词 w I w_I wI​,它的输出是 w I w_I wI​的上下文 w O , 1 , . . . , w O , C {w_{O,1},...,w_{O,C}} wO,1​,...,wO,C​,上下文的窗口大小为 C C C。举个例子,这里有个句子“I drive my car to the store"。我们如果把"car"作为训练输入数据,单词组{“I”, “drive”, “my”, “to”, “the”, “store”}就是输出。所有这些单词,我们会进行one-hot编码。skip-gram模型图如下所示:

前向传播

接下来我们来看下skip-gram神经网络模型,skip-gram的神经网络模型是从前馈神经网络模型改进而来,说白了就是在前馈神经网络模型的基础上,通过一些技巧使得模型更有效。我们先上图,看一波skip-gram的神经网络模型:

在上图中,输入向量 x x x代表某个单词的one-hot编码,对应的输出向量{ y 1 y_1 y1​,…, y C y_C yC​}。输入层与隐藏层之间的权重矩阵 W W W的第 i i i行代表词汇表中第 i i i个单词的权重。接下来重点来了:这个权重矩阵 W W W就是我们需要学习的目标(同 W ′ W^{'} W′),因为这个权重矩阵包含了词汇表中所有单词的权重信息。上述模型中,每个输出单词向量也有个 N × V N\times V N×V维的输出向量 W ′ W^{'} W′。最后模型还有 N N N个结点的隐藏层,我们可以发现隐藏层节点 h i h_i hi​的输入就是输入层输入的加权求和。因此由于输入向量 x x x是one-hot编码,那么只有向量中的非零元素才能对隐藏层产生输入。因此对于输入向量 x x x其中 x k = 1 x_k=1 xk​=1并且$x_{k^{‘}}=0, k\ne k^{’} 。 所 以 隐 藏 层 的 输 出 只 与 权 重 矩 阵 第 。所以隐藏层的输出只与权重矩阵第 。所以隐藏层的输出只与权重矩阵第k$行相关,从数学上证明如下:
h = x T W = W k , . : = v w I ( 1 ) h = x^TW=W_{k,.}:=v_{wI}\tag{$1$} h=xTW=Wk,.​:=vwI​(1)
注意因为输入时one-hot编码,所以这里是不需要使用激活函数的。同理,模型输出结点 C × V C\times V C×V的输入也是由对应输入结点的加权求和计算得到:
u c , j = v w j ′ T h ( 2 ) u_{c,j}=v^{'T}_{wj}h\tag{$2$} uc,j​=vwj′T​h(2)
其实从上图我们也看到了输出层中的每个单词都是共享权重的,因此我们有 u c , j = u j u_{c,j}=u_j uc,j​=uj​。最终我们通过softmax函数产生第 C C C个单词的多项式分布。
p ( w c , j = w O , c ∣ w I ) = y c , j = e x p ( u c , j ) ∑ j ′ = 1 V e x p ( u j ′ ) ( 3 ) p(w_{c,j}=w_{O,c}|w_{I}) = y_{c,j} = \frac{exp(u_{c,j})}{\sum^V_{j^{'}=1}exp(u_{}j^{'})}\tag{$3$} p(wc,j​=wO,c​∣wI​)=yc,j​=∑j′=1V​exp(u​j′)exp(uc,j​)​(3)
说白了,这个值就是第C个输出单词的第j个结点的概率大小。

通过BP(反向传播)算法及随机梯度下降来学习权重

前面我讲解了skip-gram模型的输入向量及输出的概率表达,以及我们学习的目标。接下来我们详细讲解下学习权重的过程。第一步就是定义损失函数,这个损失函数就是输出单词组的条件概率,一般都是取对数,如下所示:
E = − l o g p ( w O , 1 , w O , 2 , . . . , w O , C ∣ w I ) ( 4 ) E = -logp(w_{O,1},w_{O,2},...,w_{O,C}|w_I)\tag{$4$} E=−logp(wO,1​,wO,2​,...,wO,C​∣wI​)(4)
= − l o g ∏ c = 1 C e x p ( u c , j ) ∑ j ′ = 1 e x p ( u j ′ ) V ( 5 ) = -log\prod_{c=1}^{C}\frac{exp(u_{c,j})}{\sum^V_{j^{'}=1exp(u_j^{'})}}\tag{$5$} =−logc=1∏C​∑j′=1exp(uj′​)V​exp(uc,j​)​(5)
接下来就是对上面的概率求导,具体推导过程可以去看BP算法,我们得到输出权重矩阵 W ′ W^{'} W′的更新规则:
w ′ ( n e w ) = w i j ′ ( o l d ) − η ⋅ ∑ c = 1 C ( y c , j − t c , j ) ⋅ h i ( 6 ) w^{'(new)} = w_{ij}^{'(old)}-\eta\cdot\sum^{C}_{c=1}(y_{c,j}-t_{c,j})\cdot h_i\tag{$6$} w′(new)=wij′(old)​−η⋅c=1∑C​(yc,j​−tc,j​)⋅hi​(6)
同理权重 W W W的更新规则如下:
w ( n e w ) = w i j ( o l d ) − η ⋅ ∑ j = 1 V ∑ c = 1 C ( y c , j − t c , j ) ⋅ w i j ′ ⋅ x j ( 7 ) w^{(new)} = w_{ij}^{(old)}-\eta\cdot \sum_{j=1}^{V}\sum^{C}_{c=1}(y_{c,j}-t_{c,j})\cdot w_{ij}^{'}\cdot x_j\tag{$7$} w(new)=wij(old)​−η⋅j=1∑V​c=1∑C​(yc,j​−tc,j​)⋅wij′​⋅xj​(7)

从上面的更新规则,我们可以发现,每次更新都需要对整个词汇表求和,因此对于很大的语料库来说,这个计算复杂度是很高的。于是在实际应用中,Google的Mikolov等人提出了分层softmax及负采样可以使得计算复杂度降低很多。

参考文献

[1] Mikolov T, Chen K, Corrado G, et al. Efficient Estimation of Word Representations in Vector Space[J]. Computer Science, 2013.(这篇文章就讲了两个模型:CBOW 和 Skip-gram)
[2] Mikolov T, Sutskever I, Chen K, et al. Distributed Representations of Words and Phrases and their Compositionality[J]. 2013, 26:3111-3119.(这篇文章针对Skip-gram模型计算复杂度高的问题提出了一些该进)
[3] Presentation on Word2Vec(这是NIPS 2013workshop上Mikolov的PPT报告)

轻松理解skip-gram模型相关推荐

  1. 《自然语言处理学习之路》02 词向量模型Word2Vec,CBOW,Skip Gram

    本文主要是学习参考莫烦老师的教学,对老师课程的学习,记忆笔记. 原文链接 文章目录 书山有路勤为径,学海无涯苦作舟. 零.吃水不忘挖井人 一.计算机如何实现对于词语的理解 1.1 万物数字化 1.2 ...

  2. 基于CNN的阅读理解式问答模型:DGCNN

    作者丨苏剑林 单位丨广州火焰信息科技有限公司 研究方向丨NLP,神经网络 个人主页丨kexue.fm 早在年初的一文读懂「Attention is All You Need」| 附代码实现中就已经承诺 ...

  3. 一步步教你轻松学逻辑回归模型算法

    一步步教你轻松学逻辑回归模型算法 ( 白宁超2018年9月6日15: 01:20) 导读:逻辑回归(Logistic regression)即逻辑模型,属于常见的一种分类算法.本文将从理论介绍开始,搞 ...

  4. 随机森林算法参数解释及调优 转胡卫雄 RF模型可以理解成决策树模型嵌入到bagging框架,因此,我们首先对外层的bagging框架进行参数择优,然后再对内层的决策树模型进行参数择优

    RF参数择优思想:RF模型可以理解成决策树模型嵌入到bagging框架,因此,我们首先对外层的bagging框架进行参数择优,然后再对内层的决策树模型进行参数择优.在优化某一参数时,需要把其他参数设置 ...

  5. LIVE 预告 | 达摩院王玮:超大规模中文理解生成联合模型PLUG

    大规模预训练语言模型是目前NLP领域研究的热点. 近期,阿里巴巴达摩院语言技术实验室联合阿里云EFLOPS团队发布了超大规模中文理解&生成联合模型PLUG (Pre-training for ...

  6. 深入理解 Java 内存模型(转载)

    摘要: 原创出处 http://www.54tianzhisheng.cn/2018/02/28/Java-Memory-Model/ 「zhisheng」欢迎转载,保留摘要,谢谢! 0. 前提 &l ...

  7. 深入理解 Java内存模型

    深入理解 Java内存模型 原文地址:http://www.54tianzhisheng.cn/2018/02/28/Java-Memory-Model/ 本文主要内容有 Java 内存模型的基础.重 ...

  8. 深入理解并发内存模型||JMM与内存屏障||多核并发缓存架构 ||JMM内存模型||volatile 关键字的作用 ||JMM 数据原子操作||JMM缓存不一致的问题

    深入理解并发内存模型||JMM与内存屏障 多核并发缓存架构 JMM内存模型 volatile 关键字的作用 JMM 数据原子操作 JMM缓存不一致的问题

  9. mysql 锁机制 mvcc_轻松理解MYSQL MVCC 实现机制

    轻松理解MYSQL MVCC 实现机制 轻松理解MYSQL MVCC 实现机制 #### 1. MVCC简介 ##### 1.1 什么是MVCC MVCC是一种多版本并发控制机制. ##### 1.2 ...

  10. 深入理解 Java 内存模型 JMM

    前提 <深入理解 Java 内存模型>程晓明著,该书在以前看过一遍,现在学的东西越多,感觉那块越重要,于是又再细看一遍,于是便有了下面的读书笔记总结.全书页数虽不多,内容讲得挺深的.细看的 ...

最新文章

  1. [ARM异常]-ARMV8-aarch32的异常向量表介绍
  2. 【JavaSE04】Java中循环语句for,while,do···while-练习2
  3. mysql 使用正则表达式查询
  4. python win32ui_Python创建普通菜单示例【基于win32ui模块】
  5. QOS边界信任COS-交换机
  6. eleTree树形插件引入
  7. Linux系统原理(工作模式)
  8. 局域网arp欺骗病毒查找预防方法(1)
  9. java迷题_Java——类谜题
  10. linux内核C -- 第10课:内联函数探究
  11. 阿里云 蚂蚁支付宝 钉钉 c++ 面经
  12. 微信小程序怎么开店铺
  13. 计算机考数学一英语二的学校,【专硕】初试考数学一的学校统计
  14. 2022 开源之夏 | Serverless Devs 陪你“变得更强”
  15. windows 搭建eureka注册中心
  16. 一台计算机英语美式发音,美式英语发音课程(视频+文本) 第69期:Want和Won't的发音对比...
  17. 深度学习图像算法在内容安全领域的应用
  18. 想成为精英,你的时间颗粒度够细吗?
  19. 【编程初学者】创建自己的开源项目1-创建远程代码仓库
  20. Til the Cows Come Home(dijkstra)

热门文章

  1. java 获取token
  2. Chrome浏览器默认打开无痕模式
  3. 正则表达式语法及常用实例
  4. C#Mysql学生信息管理系统
  5. Simulink电力电子仿真01
  6. TCP 的 3 次握手 4 次挥手,小学生都能看懂
  7. 955.WLB 不加班公司名单!再新增 5 家公司!
  8. 牛顿迭代法计算平方根
  9. r与python的区别和联系-Python和R语言的区别?
  10. 记忆化搜索例题 记忆化搜索