NN/word2vec算法
NN:神经网络
word2vec算法其实是基于训练数据构建一个神经网络

input onehot V
---W=V*N
hidden N
---w'=N*V
output V个分类上的概率
构建loss:与groud truth中的one hot比较,求loss function的的极小值。
(最后预测输出向量时候,大小是1*V的向量,本质上是个多分类的问题。通过hierarchical softmax的技巧,把V分类的问题变成了log(V)次二分类。
多分类问题的损失函数是:多分类交叉熵)
CBOW:多个预测一个,skip-gram:一个预测多个

word2vec可以分为两部分:模型与通过模型获得的词向量。
word2vec的思路与自编码器(auto-encoder)的思路比较相似。都是先基于训练数据构建一个神经网络。当这个网络训练好以后,我们并不会利用这个训练好的网络处理新任务,我们真正需要的是这个模型通过训练数据所学得的参数,例如隐层的权重矩阵——后面我们将会看到这些权重在Word2Vec中实际上就是我们试图去学习的“word vectors”。基于训练数据建模的过程,我们给它一个名字叫“Fake Task”,意味着建模并不是我们最终的目的。
上面提到的这种方法实际上会在无监督特征学习(unsupervised feature learning)中见到,最常见的就是自编码器(auto-encoder):通过在隐层将输入进行编码压缩,继而在输出层将数据解码恢复初始状态,训练完成后,我们会将输出层“砍掉”,仅保留隐层。
所以说:一般我们用『输入向量』,也就是输入层到隐藏层的网络权重作为词向量。
更新20210314:
思考一个问题,为什么负采样可以成立?
负采样计算出来的梯度和极大似然计算出的梯度近似
(1)随即样本数量越多,样本平均值就会有更高的概率接近概率分布的平均值。
这个也是为什么从根本上机器学习尽可能想用比较大的batch size去估计真实的梯度函数的值。
(2)softmax的模型的似然函数最大化估计(MLE)梯度函数的表达式,都需要我们明确的计算
(3)这也就是说当噪音对真实数据的比例增加,NCE梯度趋近于MLE梯度。
这也就是使用NCE会成功的根本原因。
参考资料
1、小白都能理解的通俗易懂word2vec详解
https://blog.csdn.net/bitcarmanlee/article/details/82291968
2、[NLP] 秒懂词向量Word2vec的本质
https://zhuanlan.zhihu.com/p/26306795
3、word2vec的损失函数
https://zhuanlan.zhihu.com/p/157835184
4、[译] Noise Contrastive Estimation 负采样的理论基础
https://zhuanlan.zhihu.com/p/76568362
网友评论