自然语言处理 - 文本数值化 - Word Embedding - 层次Softmax 与 负采样

自然语言处理 - 文本数值化 - Word Embedding - 层次Softmax 与 负采样

  • 基础知识
    • 哈夫曼树

      哈夫曼树是一颗二叉树,该树的带权路径长度最小,是最优二叉树。

      哈夫曼树的构建比较简单,如下:


      输入:权值为 ( w 1 , w 2 , . . . w n ) (w_1,w_2,...w_n) (w1,w2,...wn) 的 n 个节点
      输出:对应的霍夫曼树

      1. ( w 1 , w 2 , . . . w n ) (w_1,w_2,...w_n) (w1,w2,...wn) 看做 n 棵单结点树;

      2. 在森林中选择 根节点 权值最小的两棵树合并成新树,这两颗树分别作为新树的左右子树。新树的根节点权重为左右子树的根节点权重之和。

      3. 将之前的根节点权值最小的两棵树从森林删除,并把新树加入森林。

      4. 重复步骤2)和3)直到森林里只有一棵树为止。
        在这里插入图片描述


      1. 如果将二叉树的左路径标为 0, 右路径标为 1,那么一个元素的从根节点开始,寻找该元素的路径就可以用0,1 表示,就构成了哈夫曼编码,如图:
        在这里插入图片描述
        那么元素 1 的编码为:000
        元素 8 的编码为:1
    • 轮盘采样

      轮盘中大小不同面积的扇形区域对应不同结果:

      所中奖金额的概率与其所占扇形面积大小对应。
      在这里插入图片描述

  • 简化方法

    在语料库中,词量非常庞大,倘若有 10000 维,那么最终输出层要计算 10000 维的Softmax。为了简化计算,常用的方法有层次 Softmax 以及 负采样。

    • 层次 Softmax (Hierarchical Softmax )

      层次 Softmax 应用了哈夫曼树的思想,元素对应词,元素的权值对应词出现的频率,那么出现越频繁的词越接近哈夫曼树的根节点,其搜索的频率也越频繁。所以根据词频构建哈夫曼树。

      那么哈夫曼树中的 0,1 路径又是如何得到的呢?答案就是 Sigmoid 函数。

      σ ( x ; θ ) = 1 1 + e − z , z = x T θ + b \sigma(x;θ)=\frac{1}{1+e^{-z}}, z=x^Tθ+b σ(x;θ)=1+ez1z=xTθ+b

      Sigmoid 函数的取值范围为 (0, 1),刚好可以用来进行 0,1 输出,哈夫曼树是二叉树,那么每次进行路径选择可视为一个二分类,那么就变成了多次二分类,称为层次 Softmax.

      对于当前词的上下文词,经过计算到投影层后,进入层次 Softmax。将上下文词向量的结果求和取平均,将结果推给 Sigmoid 函数。

      在最终输出层,便用到了词在哈夫曼树根节点走向目标叶子结点的搜索路径。对于每一次决策左右,都是由 Sigmoid 计算得到的,而 Sigmoid 计算的结果都可以视为概率,那么我们可以将路径的概率相乘,计算最大似然,得到损失函数:

      L ( x i ; θ ) = ∏ j = 2 l i [ σ ( x i ; θ ) ] 1 − y j [ 1 − σ ( x i ; θ ) ] y j L(x_i;θ) = \prod_{j=2}^{l_i} [\sigma(x_i;θ)] ^{1-y_j}[1-\sigma(x_i;θ)]^{y_j} L(xi;θ)=j=2li[σ(xi;θ)]1yj[1σ(xi;θ)]yj

      其中 l i l_i li 为该词的搜索路径。

      之后就可以像求解 Logistic 回归一样进行反向传播了。

    • 负采样 (Negative Sampling)

      在层次 Softmax 中,如果要查询一个比较生僻的词,那么路径会非常长,搜索的深度也非常深。

      搜索深度非常深的原因是,语料库中的词多,如果有 10000 个不重复词,那么哈夫曼树的深度则为 10000,而我们想要搜索的只有一个或滑动窗口大小个词,所以我们要对不相关的词进行精简。

      精简的方法为负采样。

      负采样的思想用一句话来描述:将真实词看作 正类,将非真实词看作 负类,在负类中进行采样,获取一部分样本。那么由此,原本的 10000 分类或者 10000 规模的层次Softmax 变成了二分类。

      负采样的实现方法用到了赌博轮盘算法的思想,只不过将轮盘的原型展开,变为一条线。

      将非真实词的负样本空间看作一条长度为 1 的线段,各个词在线段中占有一段长度,其长度对应词的词频。而后随机产生一个 (0,1) 的数,这个数在哪个词线段的区间内,这个词就被加入到采样的样本中。
      在这里插入图片描述‘’
      假设随机产生一个数:0.66,066 ∈ (0.55, 0.95),所以词 “中国” 被选出,以此类推,进行多次实验,最终得到一定数量的负样本,而后利用 Sigmoid 函数进行二分类。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值