Machine learning word2vec:阴性抽样(外行术语)?
我正在阅读下面的文章,在理解负采样的概念时遇到了一些困难Machine learning word2vec:阴性抽样(外行术语)?,machine-learning,nlp,word2vec,Machine Learning,Nlp,Word2vec,我正在阅读下面的文章,在理解负采样的概念时遇到了一些困难 有人能帮忙吗?word2vec的思想是最大化文本中出现在一起的单词的向量之间的相似性(点积),并最小化不相似的单词的相似性。在你链接到的论文的等式(3)中,暂时忽略指数运算。你有 v_c * v_w ------------------- sum(v_c1 * v_w) 分子基本上是单词c(上下文)和w(目标)单词之间的相似性。分母计算所有其他上下文c1和目标词w的相似性。最大化这个比率可以确保文本中出现的单词比没
有人能帮忙吗?word2vec的思想是最大化文本中出现在一起的单词的向量之间的相似性(点积),并最小化不相似的单词的相似性。在你链接到的论文的等式(3)中,暂时忽略指数运算。你有
v_c * v_w
-------------------
sum(v_c1 * v_w)
分子基本上是单词c
(上下文)和w
(目标)单词之间的相似性。分母计算所有其他上下文c1
和目标词w
的相似性。最大化这个比率可以确保文本中出现的单词比没有出现的单词有更多相似的向量。但是,由于存在许多上下文c1
,因此计算速度可能非常慢。负采样是解决此问题的方法之一-只需随机选择两个上下文c1
。最终的结果是,如果cat
出现在food
的上下文中,那么food
的向量与cat
的向量(通过它们的点积衡量)比其他几个随机选择的单词的向量更为相似(例如,民主
,贪婪
,弗雷迪
),而不是语言中的所有其他单词。这使得word2vec
的训练速度大大加快。计算Softmax(用于确定哪些单词与当前目标单词相似的功能)因为需要对V(分母)中的所有单词求和,所以成本很高,这通常非常大
可以做些什么
已经提出了不同的策略来近似softmax。这些方法可以分为基于softmax的和基于采样的方法。基于softmax的方法是保持softmax层完整,但修改其架构以提高其效率的方法(例如分层softmax)。基于采样的方法另一方面,完全取消softmax层,而是优化近似softmax的其他损失函数(他们通过近似softmax分母中的标准化来实现这一点,还有一些其他的损失,计算起来很便宜,比如负采样)
Word2vec中的损失函数类似于:
哪个对数可以分解为:
通过一些数学和梯度公式(请参阅中的更多详细信息),它转换为:
正如您所看到的,它转换为二元分类任务(y=1正类,y=0负类)。由于我们需要标签来执行二元分类任务,我们将所有上下文单词c指定为真标签(y=1,正样本),并将从语料库中随机选择的k指定为假标签(y=0,负样本)
看下面一段,假设我们的目标词是“Word2vec”用3的窗口,我们的上下文单词是:<代码> <代码> >代码>广泛< <代码> > <代码>流行,<代码>算法<代码> >代码> <代码> >开发> <代码>。这些上下文词被认为是正标签。我们还需要一些否定标签。(<代码>产品<代码>,<代码>软件<代码>,<代码> Collobert ,<代码>基于边缘的,<代码>概率< /代码>,并将其视为负样本。我们从语料库中抽取一些随机示例的技术称为负采样。 参考:
- (1) C.Dyer,“关于噪声对比估计和负采样的注释”,2014年
- (二)
T
是所有语音的数目。它相当于V
。换句话说,T
=V
对于语料库中的所有V
词汇,计算SG中的概率分布p(w|t+j | w|t)
,其中:
训练Skip Gram模型时,V
很容易超过数万次。概率需要计算V
次,这使得计算成本很高。此外,分母中的归一化因子需要额外的V
计算
另一方面,SGN中的概率分布通过以下公式计算:
c_pos
是阳性词的词向量,W_neg
是输出权重矩阵中所有K
阴性样本的词向量。对于SGN,概率只需计算K+1
次,其中K
通常在5~20之间。此外,不需要额外的迭代来计算ute分母中的标准化因子
使用SGNS,每个训练样本只更新一小部分权重,而SG更新每个训练样本的所有数百万权重
SGNS如何实现这一点?->通过将多分类任务转换为二进制分类任务
使用SGN,不再通过预测中心单词的上下文单词来学习单词向量。它学习从噪声分布中区分实际上下文单词(正)和随机抽取的单词(负)
在现实生活中,你通常不会用像“江南风格”或“青春痘”这样的随机词来观察“回归”。其想法是,如果模型能够区分可能的(积极的)对和不可能的(消极的)对