在word2vec原理(一) CBOW与Skip-Gram模型基础中,说到了使用神经网络的方法来得到词向量语言模型的原理和一些问题,现在开始关注word2vec的语言模型如何改进传统的神经网络的方法。由于word2vec有两种改进方法,一种是基于Hierarchical Softmax的,另一种是基于Negative Sampling的。本文关注于基于Hierarchical Softmax的改进方法,在下一篇讨论基于Negative Sampling的改进方法。

1. 基于Hierarchical Softmax的模型概述

先回顾下传统的神经网络词向量语言模型,里面一般有三层,输入层(词向量),隐藏层和输出层(softmax层)。其最大的问题在于从隐藏层到输出的softmax层的计算量很大,因为要计算所有词的softmax概率,再去找概率最大的值。这个模型如下图所示。其中V是词汇表的大小。

word2vec对这个模型做了改进

(1)首先,对于从输入层到隐藏层的映射,没有采取神经网络的线性变换加激活函数的方法,而是采用简单的对所有输入词向量求和并取平均的方法。比如输入的是三个4维词向量:(1,2,3,4),(9,6,11,8),(5,10,7,12),那么我们word2vec映射后的词向量就是(5,6,7,8)。这里是从多个词向量变成了一个词向量。

(2)第二个改进,是从隐藏层到输出的softmax层的计算量。为了避免要计算所有词的softmax概率,word2vec采用了霍夫曼树来代替从隐藏层到输出softmax层的映射。如何映射呢?

由于输出softmax层的概率计算变成了一棵二叉霍夫曼树,那么我们的softmax概率计算只需要沿着树形结构进行就可以了。如下图所示,我们可以沿着霍夫曼树从根节点一直走到我们的叶子节点的词w。

和之前的神经网络语言模型相比,霍夫曼树的所有内部节点就类似之前神经网络隐藏层的神经元,其中,根节点的词向量对应我们映射后的词向量,而所有叶子节点就类似于之前神经网络softmax输出层的神经元,叶子节点的个数就是词汇表的大小。在霍夫曼树中,隐藏层到输出层的softmax映射不是一下子完成的,而是沿着霍夫曼树一步步完成的,因此这种softmax取名为"Hierarchical Softmax"

如何“沿着霍夫曼树一步步完成”呢?在word2vec中,我们采用了二元逻辑回归的方法,即:(1)规定沿着左子树走,那么就是负类(霍夫曼树编码1);(2)沿着右子树走,那么就是正类(霍夫曼树编码0)。判别正类和负类的方法是使用sigmoid函数,即:

其中是当前内部节点的词向量,而θ则是我们需要从训练样本求出的逻辑回归的模型参数。

使用霍夫曼树有什么好处呢?(1)首先,由于是二叉树,之前计算量为V,现在变成了log2V;(2)第二,由于使用霍夫曼树,高频的词靠近树根,这样高频词需要更少的时间会被找到,这符合我们的贪心优化思想。

如何分配左右子树呢?依据内部节点的逻辑回归值(即概率)来分配为左右子树。容易理解,被划分为左子树而成为负类的概率为 P(−)=1−P(+)。在某一个内部节点,要判断是沿左子树还是右子树走的标准就是看P(−)、P(+)谁的概率值大。而控制谁的概率值大的因素一个是当前节点的词向量,另一个是当前节点的模型参数θ

   对于上图中的,如果它是一个训练样本的输出,那么我们期望对于里面的隐藏节点的P(−)概率大,的P(−)P(−)概率大,的P(+)P概率大。

回到基于Hierarchical Softmax的word2vec本身,我们的目标就是找到合适的所有节点的词向量和所有内部节点θ, 使训练样本达到最大似然。那么如何达到最大似然呢?

2. 基于Hierarchical Softmax的模型梯度计算

我们使用最大似然法来寻找所有节点的词向量和所有内部节点θ。先拿上面的例子来看,我们期望最大化下面的似然函数:

对于所有的训练样本,我们期望最大化所有样本的似然函数乘积。(公式有个错误处:应该是

为了便于我们后面一般化的描述,我们定义输入的词为w:

:输入词从输入层词向量求和平均后的霍夫曼树根节点词向量

:从根节点到w所在的叶子节点,包含的节点总数

:w在霍夫曼树中从根节点开始,经过的第i个节点表示为

:对应的霍夫曼编码为∈{0,1},其中i=2,3,...

:该节点对应的模型参数表示为, 其中i=1,2,...−1,没有i=是因为模型参数仅仅针对于霍夫曼树的内部节点。

定义经过的霍夫曼树某一个节点j的逻辑回归概率为P(dwj|xw,θwj−1),其表达式为:

那么对于某一个目标输出词,其最大似然为:

在word2vec中,由于使用的是随机梯度上升法(因为结果输出为最大概率的词),所以并没有把所有样本的似然乘起来得到真正的训练集最大似然仅仅每次只用一个样本更新梯度,这样做的目的是减少梯度计算量。这样我们可以得到的对数似然函数L如下:

要得到模型中词向量和内部节点的模型参数θ, 我们使用梯度上升法即可。首先我们求模型参数的梯度:

同样的方法,可以求出的梯度表达式如下:

有了梯度表达式,我们就可以用梯度上升法进行迭代一步步的求解我们需要的所有的

所以,word2vec 使用Hierarchical Softmax对CBOW和Skip-Gram损失结构进行了改进,同时,又利用负采样方式,改进了模型训练。

3. 基于Hierarchical Softmax的CBOW模型

4. 基于Hierarchical Softmax的Skip-Gram模型

5. Hierarchical Softmax的模型源码和算法的对应    

    这里给出上面算法和word2vec源码中的变量对应关系。

  在源代码中,基于Hierarchical Softmax的CBOW模型算法在435-463行,基于Hierarchical Softmax的Skip-Gram的模型算法在495-519行。大家可以对着源代码再深入研究下算法。

 在源代码中,neule对应我们上面的e, syn0对应我们的, syn1对应我们的, layer1_size对应词向量的维度,window对应

  另外,vocab[word].code[d]指的是,当前单词word的第d个编码,编码不含Root结点。vocab[word].point[d]指的是,当前单词word,第d个编码下,前置的结点。

word2vec原理(二):基于Hierarchical Softmax的模型相关推荐

  1. word2vec 中的数学原理具体解释(四)基于 Hierarchical Softmax 的模型

    word2vec 是 Google 于 2013 年开源推出的一个用于获取 word vector 的工具包,它简单.高效,因此引起了非常多人的关注.因为 word2vec 的作者 Tomas Mik ...

  2. 【word2vec】篇二:基于Hierarchical Softmax的 CBOW 模型和 Skip-gram 模型

    文章目录 CBOW 模型 基本结构 目标函数 梯度计算 Skip-gram 模型 基本结构 梯度计算 优缺点分析 系列文章: [word2vec]篇一:理解词向量.CBOW与Skip-Gram等知识 ...

  3. 学习笔记(02):自然语言处理Word2Vec视频学习教程-Hierarchical Softmax

    立即学习:https://edu.csdn.net/course/play/5226/94796?utm_source=blogtoedu 分层softmax, Cbrow 根据上下文预测当前词语的出 ...

  4. Word2Vec原理篇 | CBOW与Skip-Gram模型基础

    作者:刘建平Pinard 博客地址:https://www.cnblogs.com/pinard 原文链接,点击文末阅读全文直达:https://www.cnblogs.com/pinard/p/71 ...

  5. word2vec原理_深入理解Word2Vec底层原理

    本文主要三个部分: (1)DNN如何计算字词的语义特征表示 (2)word2vec如何计算字词的语义特征表示 (3)霍夫曼对于word2vec的意义 词嵌入,就是将文本的单词嵌入数学空间中. 不同于o ...

  6. word2vec原理

    首先声明,本文源自于刘建平老师的博客,原文写的非常好,在此结合鄙人的项目经验和大家分享. word2vec原理(一) CBOW与Skip-Gram模型基础 一:词向量基础 word2vec是谷歌于20 ...

  7. 深度学习 | Word2vec原理及应用

    聊聊Word2vec 1 前言 2 什么是Word2vec? 2.1 定义 2.1.1 分词的原理介绍 2.1.2 文本向量化的方式 2.2 数学原理 2.2.1 CBOW(Continuous Ba ...

  8. word2vec原理(一): 词向量、CBOW与Skip-Gram模型基础

    word2vec原理(一): CBOW与Skip-Gram模型基础 word2vec原理(二):基于Hierarchical Softmax的模型 word2vec原理(三): 基于Negative ...

  9. 系统学习NLP(十三)--词向量(word2vec原理)

    词向量简介 自然语言是一套用来表达含义的复杂系统.在这套系统中,词是表义的基本单元.在机器学习中,如何使用向量表示词? 顾名思义,词向量是用来表示词的向量,通常也被认为是词的特征向量.近年来,词向量已 ...

最新文章

  1. document.all与WEB标准
  2. 组合数函数-快速提取所有可能的组合数
  3. 用友U8 归纳采购退货结算三种情况
  4. 想从事分布式系统,计算,hadoop等方面,需要哪些基础,推荐哪些书籍?--转自知乎...
  5. python基础05
  6. php写浏览记录,php如何浏览历史记录
  7. MySQL笔记(六)视图 view
  8. .NET 设计规范--.NET约定、惯用法与模式--5.成员设计
  9. 程序员面试金典——3.6双栈排序
  10. 38.线程交换与线程移动
  11. 虚拟机是ubuntu,windows映射盘符方式访问虚拟机
  12. Fujitsu(富士通)扫描仪——fi-6130z 无感安装设置
  13. java经纬度转平面坐标_经纬度到平面坐标的相互转换
  14. html lang=zh-CN 中文标准写法与HTML标准定义
  15. 动态规划——最大连续子序列和
  16. 一个index.html怎么添加备案号,ICP备案号怎么添加到自己网页底部?
  17. 医疗软件还能怎么做,才能更进一步。
  18. 《人生的智慧》第二章 人的自身
  19. 三位符号位如何看正负计算机,如何判断三角函数值符号的正负
  20. PR CC 2018添加素材时出现绿色/紫色横线

热门文章

  1. padding-bottom属性的作用
  2. python里的os模块_python中os模块再回顾
  3. 四核处理器_(技术文档)你知道AMD Ryzen处理器中的CCX与CCD是什么吗?
  4. 2013年计算机专业对口模拟试题二,计算机对口升学模拟试题全解.doc
  5. ecg 幅度_ECG信号中一些运动伪差的讨论
  6. 数据中心发电机、变压器和UPS匹配的逻辑探讨
  7. 2018年超大规模数据中心总数达到430个
  8. ubuntu 打开ssh登陆_Ubuntu 开启远程登录 SSH 的安装和配置
  9. ios开发ocr识别_车牌识别技术
  10. ML:根据不同机器学习模型输出的预测值+且与真实值相减得到绝对误差对比+误差可视化