详细推导论文:https://share.weiyun.com/5ea01Gy

word2vec 中的数学原理详解: https://share.weiyun.com/5zaZ20z

Word2Vec原理解析: https://blog.csdn.net/u010159842/article/details/80532507

word2vec 中的数学原理详解(一)目录和前言: https://blog.csdn.net/itplus/article/details/37969519

Negative Sampling选取负例词原理: https://blog.csdn.net/fendouaini/article/details/80012357

Word2vec及NCE: https://blog.csdn.net/diamonjoy_zone/article/details/67638243

 

Negative Sampling 和 Hierarchical Softmax 目的是加速训练的。

常用的方法是: skip-gram + Negative Sampling

 

Hierarchical Softmax:

根据词频构造hoffman树,把softmax转换成多个sigmod判断。

复杂度从V 到 log2(V)

**参考资料 https://www.cnblogs.com/pinard/p/7243513.html  [2. 基于Hierarchical Softmax的模型梯度计算]

1、霍夫曼树的所有叶子节点便是词,如果有N个词则有N-1个非叶节点,对于softmax每个节点代表一个词全部计算完取最大的。

2、Hierarchical Softmax 则有N-1个输出节点。每一个节点对应于霍夫曼树的一个非叶节点。假设对于单词w的路径经过3个非叶节点,则只需要进行3次向量+sigmod运算即可。损失则是 3个sigmod的连乘。

3、在预测时,根据上一个sigmod的结果选择路径,然后进行下一个节点的预测,直到走到叶子节点

word2vec输入便是one-hot + 无激活函数的隐藏层 + 输出层。

 

 

 

 

Negative Sampling原理:

频率更高的词应该要有更高的概率被采样。

将所有词根据词的词频放在长度为1的线段中随机选取符合我们的设定的采样。

word2vec-保持愤怒

我们对这个长度为1的线段改成长度为M,这个长度M的线段刻度之间是等间隔的,即1/M。

word2vec-保持愤怒

这样只要每次生成随机数0~M之间的整数,这样就能选到对应I_i的词了,每次采neg个词,如果选到的负例词刚好是中心词w本身,则跳过继续重新生成随机数0~M去找新的负例词。

 

个人理解:这样相当于每次迭代只对部分次是负样本,而不是每次都要对全量词进行计算。

类似于: tf.nn.sampled_softmax_loss()

 

噪声对比估计(NCE)

当使用 word2vec 模型时,并不需要对概率模型中的所有特征进行学习。而 CBOW 模型和 Skip-Gram 模型为了避免这种情况发生,使用一个二分类器(逻辑回归)在同一个上下文环境里从k 虚构的 (噪声) 单词 区分出真正的目标单词 。

显然目标函数要到达最大值,真实的目标单词需要被分配到较高的概率,同时噪声单词的概率很低。从技术层面来说,这种方法叫做 负抽样(Negative Sampling),使用挑选出来的 k 个 噪声单词,而没有使用整个语料库 V,加速了训练。这方法是基于 noise-contrastive estimation (NCE)