word2vec原理推导 word2vec原理(一) CBOW与Skip-Gram模型基础

word2vec作为神经概率语言模型的输入,其本身其实是神经概率模型的副产品,是为了通过神经网络学习某个语言模型而产生的中间结果。具体来说,“某个语言模型”指的是“CBOW”和“Skip-gram”。具体学习过程会用到两个降低复杂度的近似方法——Hierarchical Softmax或Negative Sampling。两个模型乘以两种方法,一共有四种实现。

一、CBOW

1.一个单词上下文

2.参数更新

3.多个单词上下文

二、Skip-gram

1.网络结构

2.参数更新

三、优化

原始的CBOW模型和Skip-Gram 模型的计算量太大,非常难以计算。

  1. 模型在计算网络输出的时候,需要计算误差 。对于CBOW 模型,需要计算V个误差(词汇表的大小),对于 Skip-Gram 模型,需要计算CV个误差。 另外,每个误差的计算需要用到 softmax 函数,该 softmax 函数涉及到O(V)复杂度的运算:$\sum _{j=1} ^ V exp(u_j)$ 。
  2. 每次梯度更新都需要计算网络输出。 如果词汇表有 100万 单词,模型迭代 100 次,则计算量超过 1 亿次。

虽然输入向量的维度也很高,但是由于输入向量只有一位为 1,其它位均为 0,因此输入的总体计算复杂度较小。

word2vec 优化的主要思想是:限制输出单元的数量。

事实上在上百万的输出单元中,仅有少量的输出单元对于参数更新比较重要,大部分的输出单元对于参数更新没有贡献。

有两种优化策略:

  • 通过分层softmax来高效计算softmax函数。
  • 通过负采样来缩减输出单元的数量。

1.分层softmax

  分层 softmax 是一种高效计算 softmax 函数的算法。 经过分层 softmax 之后,计算 softmax 函数的算法复杂度从O(V)降低到O(logV) ,但是仍然要计算V-1个内部节点的向量表达 。

(1)CBOW

(2)Skip-gram

2.负采样

在网络的输出层,真实的输出单词对应的输出单元作为正向单元,其它所有单词对应的输出单元为负向单元。

  1. 正向单元的数量为1,毋庸置疑,正向单元必须输出。
  2. 负向单元的数量为V-1,其中V为词表的大小,通常为上万甚至百万级别。如果计算所有负向单元的输出概率,则计算量非常庞大。可以从所有负向单元中随机采样一批负向单元,仅仅利用这批负向单元来更新。这称作负采样。

负采样的核心思想是:利用负采样后的输出分布来模拟真实的输出分布。

参考链接:

【1】word2vec原理(一) CBOW与Skip-Gram模型基础

【2】word2vec原理推导与代码分析-码农场

【3】Hierarchical Softmax(层次Softmax) - 知乎

猜你喜欢

转载自www.cnblogs.com/nxf-rabbit75/p/11875847.html
今日推荐