Word2Vec中为什么使用负采样?
(negtive sample)
解析:
解析一
如七月在线推荐就业班的专家讲师李老师所言
负采样这个点引入word2vec非常巧妙,两个作用:
1.加速了模型计算
2.保证了模型训练的效果,其一模型每次只需要更新采样的词的权重,不用更新所有的权重,那样会很慢,其二中心词其实只跟它周围的词有关系,位置离着很远的词没有关系,也没必要同时训练更新,作者这点非常聪明。
解析二
下述解析来源于:https://zhuanlan.zhihu.com/p/29488930
1. 随机梯度下降法有什么问题?
通过对代价函数求权重的梯度,我们可以一次性对所有的参数进行优化,但是如果每次等全部计算完成再优化升级,我们将等待很长时间(对于很大的语料库来说)。
所以我们采用随机梯度下降( Stochastic Gradient Descent),也就是说每次完成一次计算就进行升级。
但是,还有两个问题导致目前的模型效率低下!
第一个问题:我们每次只对窗口中出现的几个单词进行升级,但是在计算梯度的过程中,我们是对整个参数矩阵进行运算,这样参数矩阵中的大部分值都是0
计算效率低下!
第二个问题:我们使用的目标函数是softmax函数
我们观察分母,分母需要把窗口中所有单词的“得分”都算出来再求和,效率低下!
2. 使用负采样
负采样的核心思想是:计算目标单词和窗口中的单词的真实单词对“得分”,再加一些“噪声”,即词表中的随机单词和目标单词的“得分”。
真实单词对“得分”和“噪声”作为代价函数。
每次优化参数,只关注代价函数中涉及的词向量。
下面给出公式:
采用上述公式解决了之前说的两个问题:
我们仅对K个参数进行采样
我们放弃softmax函数,采用sigmoid函数,这样就不存在先求一遍窗口中所有单词的‘“得分”的情况了。
3. 计算梯度
既然代价函数已经更新了,那么我们需要对梯度进行更新。
首先考虑一下,我们想要求导的目标,也就是对谁求导?
答案是,对我们想要优化的参数求导,前面说了,负采样的目的是不需要对整个向量矩阵 U或 V 进行优化,而是仅对求代价过程中涉及的词向量进行优化,因此,求导对象是目标向量,窗口中的其他词向量和负采样时随机选取的词向量 。
此篇文章关注的问题不是求导的过程,因此下面直接给出梯度:
更多面试题
关注后点击免费资料菜单
点击BAT面试题即可
想从进入大热的NLP方向?
担心找不到工作?
再也不用怕了!
就业班来了,保证就业!
依据个人情况定制化教学
定制学习路线
芝加哥大学博士辅导
名企面试官亲自辅导面试
助你成为业内急缺的NLP人才
分享课程拿现金红包!
领的人越多,你拿的越多!
快来扫它
福利时间
后台回复:“100” 免费领【机器学习面试100题】
后台回复:“干货” 免费领【全体系人工智能学习资料】
后台回复:“领资料” 免费领【NLP工程师必备干货资料】