赞
踩
word2vec的一个缺点是softmax计算起来很慢,这一节中,你会看到一个改善过的学习问题叫做负采样。它能做到与你之前看到的skip-gram模型相似的事情,但是用了一个更加有效的学习算法。
I
w
a
n
t
a
g
l
a
s
s
o
f
o
r
a
n
g
e
j
u
i
c
e
t
o
g
o
a
l
o
n
g
w
i
t
h
m
y
c
e
r
e
a
l
.
I\space want\space a\space glass\space of\space orange\space juice\space to\space go\space along\space with\space my\space cereal.
I want a glass of orange juice to go along with my cereal.我们在这个算法中要做的是构造一个新的监督学习问题,那么问题就是,给定一对单词比如orange和juice,我们要去预测这是否是一对上下文词-目标词,在这个例子中,orange和juice就是个正样本。那么orange和king呢?这是一个负样本,我们把它标为0。我们要做的就是采样得到一个上下文词和一个目标词,在这个例子中就是orange和juice,我们用1作为标记,这样生成一个正样本。为了生成一个负样本,你将用相同的上下文词,再在字典中随机选一个词,在这里随机选了单词king,标记为0。然后我们再拿orange,再随机从词汇表中选一个词,因为我们设想如果随机选一个词,它很可能跟orange没关联,于是orange和book标记为0。我们再选点别的,比如orange和the,标记为0。然后随机挑选orange和of,标记为0。注意orange-of被标记为0,即使of确实出现在orange词的前面。
总结一下,生成这些数据的方式是我们选择一个上下文词,再选一个目标词,这就是表的第一行,它给了一个正样本,上下文和目标词,并给定标签为1。然后我们要做的是给定几次,比如k次,我们用相同的上下文词,再从字典中选取随机的词,比如king,book,the,of等从词典中任意选取的词,并标记为0,这些就会成为负样本。出现以下情况也没关系,就是如果我们从字典中随机选到的词正好出现在了词距内。
接下来我们将建立一个监督学习问题,其中,学习算法输入x,输入一对词,例如orange和juice,要去预测目标的标签,即预测输出y。因此问题就是给定一对词,像orange和juice,你觉得它们会一起出现吗?你觉得这两个词是通过对靠近的两个词采样获得的吗?或者你觉得是分别在文本和字典中随机选取得到的,这个算法就是要分辨这两种不同的采样方式,这就是如何生成训练集的方法。
那么如何选取k,Mikolov等人推荐小数据集的话,k从5到20比较好,如果你的数据集很大,k就选的小一点,对于更大的数据集k就等于2到5。数据集越小,k就越大。那么在这个例子中,我们就用k=4,。
下面我们讲讲,学习从x映射到y的监督学习模型,softmax模型的公式如下所示: p ( t c ) = e θ t T e c ∑ j = 1 10000 e θ j T e c p(tc)=\frac{e^{\theta_t^{T}}e_c}{\sum_{j=1}^{10000}e^{\theta_j^T}e_c} p(tc)=∑j=110000eθjTeceθtTec这个图片是我们上面讨论得到的训练集,其中context和word组成x,target组成y,y将是我们要预测的。为了定义模型,我们用c表示上下文,用t表示可能的目标词,用y表示target中的0和1,表示是否是一对上下文-目标词。
我们要做的就是定义一个logistic回归模型,给定输入c-t对的条件下,y=1的概率 p ( y = 1 ∣ c , t ) p(y=1|c,t) p(y=1∣c,t)。这个模型基于logistic回归模型,但不同的是我们将一个sigmoid函数用于 θ t T e c \theta_t^Te_c θtTec,即 p ( y = 1 ∣ c , t ) = σ ( θ t T e c ) p(y=1|c,t)=\sigma(\theta_t^Te_c) p(y=1∣c,t)=σ(θtTec),参数和之前一样,你可能对每一个可能的目标词有一个参数向量 θ \theta θ和另一个参数向量,即每一个可能上下文词的嵌入向量。我们将用这个公式估计y=1的概率。如果你有k个样本,你可以把这个看做1比k的正负样本比例,即每个正样本你都有k个对应的负样本来训练一个类似logistic回归的模型。我们把这个画成一个神经网络,如果蔬菜如的词是orange,即词6257,你要做的就是输入one-hot向量,再传递给E,通过两者相乘获得嵌入向量 e 6 257 e_6257 e6257,你就得到了10000个可能的logistic回归分类问题,其中一个将会是用来判断目标词是否是juice的分类器。还有其它的词,可能是下面的某个分类器,是用来预测king是否是目标词。预测词汇表中这些可能的单词,把这些看做10000个二分类logistic回归分类器,但并不是每次迭代都训练全部10000个,我们只训练其中5个,我们要训练对应真正目标词的那一个分类器,再训练四个随机选取的负样本,这就是k=4的情况。所以不使用一个巨大的10000维度的softmax,因为成本很高,而是把它转变为10000个二分类问题,每个都很容易计算。每次迭代我们要做的只是训练它们其中的五个,一般而言就是k+1个,其中k个负样本和1和正样本。这也是为什么这个算法计算成本更低,因为只需要更新k+1个逻辑回归单元,k+1个二元分类问题。相对而言,每次迭代的成本比更新10000维的softmax分类器成本低,这个技巧就叫负采样,因为你做的是你有一个正样本词orange-juice,然后你会特意生成一系列负样本,即用这四个负样本训练四个额外的二分类器,在每次迭代中你会选择四个不同的随机负样本去训练你的算法。在结束之前,这个算法有一个重要的细节是如何选取负样本。
在选取了上下文词orange之后,你如何对这些词进行采样生成负样本?一个办法是对中间的这些词进行采样,即候选的目标词,你可以根据其在语料中的经验频率进行采样,就是通过词出现的频率对其进行采样。但问题是这会导致你在like,the,of,and诸如此类的词上有很高的频率;另一个极端就是用 1 ∣ V ∣ \frac{1}{|V|} ∣V∣1均匀且随机地抽取负样本,这对于英文单词的分布是非常没有代表性的。所以论文的作者Mikolov等人根据经验,他们发现以下经验值的效果最好 P ( w i ) = f ( w i ) 3 / 4 ∑ j = 1 10000 f ( w j ) 3 / 4 P(w_i)=\frac{f(w_i)^{3/4}}{\sum_{j=1}^{10000}f(w_j)^{3/4}} P(wi)=∑j=110000f(wj)3/4f(wi)3/4它位于两个极端的采样方法之间,既不用经验频率,也就是实际观察到的英文文本的分布,也不用均匀分布。他们做的是对词频的 3 4 \frac{3}{4} 43次方除于整体的值进行采样。所以如果 f ( w i ) f(w_i) f(wi)是观测到的在语料库中的某个英文词的词频,通过 3 / 4 3/4 3/4次方的计算使其处于完全独立的分布和训练集的观测分布的两个极端之间。
并不确定这是有理论证明的,但是很多研究者现在使用这个方法似乎效果也很不错。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。