赞
踩
skip-gram是word2vec中的主要模型之一(另一个模型是CBOW)。简单来说,CBOW是给定上下文,来预测input-word;而skip-gram是给定input-word,来预测上下文。
下面我们来理解skip-gram模型。首先,给定句子如下
The man who passes the sentence should swing the sword.-
选择passes为中心词,window-size设置为3,则训练过程如下图
通过该图可以大致理解skip-gram的过程。
通过上图可知,skip-gram中需要使用softmax来计算语料中各个词出现的概率。并且字典的大小决定了神经网络的权重也会很大,更新权重非常耗时。
这是一个非常耗时的计算。一般语料中都有几千万个单词,计算量非常的大,所以才要引入负采样来降低计算量。
负采样(Negative Sampling)是构造了一个新的有监督学习问题:给定两个单词,比如orange和juice,去预测这是否是一对上下文词-目标词对(context-target),即是否这两个词会在一句话中相连出现,这也是一个二分类问题。
负采样其实是改变了1中的整个数据构建-训练过程的,他的具体过程如下:
正样本对
,在下表中标记为1负样本对
可以从字典中随机选择负样本对
,在下表中标记为0context | word | target |
---|---|---|
orange | juice | 1 |
orange | king | 0 |
orange | book | 0 |
orange | the | 0 |
orange | off | 0 |
要解决这个任务,我们有很多种训练方式,比如
(1). 用上一步构建的所有语料来训练一个复杂神经网络,输入context,输出其与字典中各个词是否为context-target的概率。但这样的做法,训练模型的代价很高。
(2)训练很多个二分类器,每个二分类器只需要计算给定context与k+1个词是否属于context-target。这样做的优点在于,每个二分类器都很容易计算,所以这比计算一个很大的softmax代价要低。
所以我们选择(2)进行训练,每个二分类器(logistic),只需要输入k+1个词。比如对句子中的每一个词(选中某一个词作为context),进行训练时,给定的数据集为上面2中所示。
就是对orange训练一个二分类器,其输入为(juice,king,book,the,off),输出为target(1,0,0,0,0)。此时只更新网络中对应部分的权重,其他部分的权重不更新。
所谓负采样,就是你有一个正样本,比如orange和juice,然后你再随机采用得到k个负样本,比如orange和king。最终对每个context(比如这里是orange)按照“训练一个小型二分类器”的思路来更新网络中对应部分的权重。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。