And*_*y K 72 nlp machine-learning word2vec
我正在阅读下面的论文,我遇到了一些麻烦,理解负抽样的概念.
http://arxiv.org/pdf/1402.3722v1.pdf
有人可以帮忙吗?
mba*_*rov 138
其思想word2vec是最大化文本中出现在一起(在彼此的上下文中)的单词的向量之间的相似性(点积),并最小化不相似的单词的相似性.在链接到的论文的等式(3)中,暂时忽略取幂.你有
      v_c * v_w
 -------------------
   sum(v_c1 * v_w)
Run Code Online (Sandbox Code Playgroud)
分子基本上是单词c(上下文)和w(目标)单词之间的相似性.分母计算所有其他上下文c1和目标词的相似性w.最大化此比率可确保在文本中看起来更接近的单词具有比不单词的单词更相似的向量.但是,计算这个可能非常慢,因为有很多背景c1.负抽样是解决这个问题的方法之一 - 只需c1随意选择几个上下文.最终的结果是,如果cat出现在上下文中food,那么矢量food更接近于cat(作为其点积的度量)的向量而不是其他几个随机选择的单词的向量(例如democracy,greed,Freddy),而不是在语言的所有换句话说.这使得word2vec训练更快.
Ami*_*mir 30
计算Softmax(确定哪些单词与当前目标单词相似的函数)是昂贵的,因为需要对V(分母)中的所有单词求和,这通常非常大.
可以做些什么?
已经提出了不同的策略来近似 softmax.这些方法可以分为SOFTMAX为基础和基于采样的方法.基于Softmax的方法是保持softmax层完整的方法,但是修改其体系结构以提高其效率(例如,分级softmax).另一方面,基于采样的方法完全取消了softmax层,而是优化了一些近似softmax的其他损失函数(他们通过近似softmax的分母中的归一化来实现这一点,其中一些其他损失计算起来很便宜负抽样).
Word2vec中的丢失函数类似于:
哪个对数可以分解为:
使用一些数学和梯度公式(见3的更多细节),它转换为:
如您所见,它转换为二元分类任务(y = 1正类,y = 0负类).由于我们需要标签来执行我们的二进制分类任务,我们将所有上下文单词c指定为真标签(y = 1,正样本),并将从语料库中随机选择的k指定为假标签(y = 0,负样本).
请看以下段落.假设我们的目标词是" Word2vec ".随着3窗口,我们的语境词是:The,widely,popular,algorithm,was,developed.这些上下文单词被视为积极标签.我们还需要一些负面标签.我们随机挑选一些字词从语料库(produce,software,Collobert,margin-based,probabilistic),并把他们视为阴性样品.我们从语料库中随机选取一些示例的技术称为负抽样.  
参考:
我在这里写了一篇有关负采样的教程文章。
为什么要使用负采样?->降低计算成本
香草Skip-Gram(SG)和Skip-Gram负采样(SGNS)的成本函数如下所示:
请注意,这T是所有词汇的数量。等同于V。换句话说,T= V。
对语料库中p(w_t+j|w_t)所有V词汇的SG中的概率分布进行计算,其中:
V训练Skip-Gram模型时可以轻易地超过数万。概率需要计算V时间,使其计算量大。此外,分母中的归一化因子需要额外的V计算。
另一方面,SGNS中的概率分布可通过以下公式计算:
c_pos是正词的W_neg词向量K,是输出权重矩阵中所有负样本的词向量。使用SGNS,概率只需计算K + 1几次,K通常在5〜20之间。此外,无需额外的迭代即可计算分母中的归一化因子。
使用SGNS,每个训练样本的权重只有一小部分被更新,而SG为每个训练样本更新了数百万个权重。
SGNS如何做到这一点?->通过将多分类任务转换为二进制分类任务。
使用SGNS,不再可以通过预测中心词的上下文词来学习词向量。它学习从噪声分布中将实际上下文单词(正)与随机抽取的单词(负)区分开。
在现实生活中,通常不会regression使用Gangnam-Style,或随机词来观察pimples。想法是,如果模型可以区分可能的(正)对和不太可能的(负)对,那么将学习好的单词向量。
在上图中,当前的正词-语境对是(drilling,engineer)。K=5阴性样品随机抽取从噪声分布:minimized,primary,concerns,led,page。当模型遍历训练样本时,将优化权重,以便输出正对的概率p(D=1|w,c_pos)?1,并输出负对的概率p(D=1|w,c_neg)?0。