Word2vec:Negative Sampling训练

    本文记录的目的是方便自己学习和复习,有误之处请谅解,欢迎指出。

    Negative Sampling(负采样)其实理解起来不是很难,个人觉得比分层Softmax相对简单一些。上一篇讲到了分层Softmax训练,它把传统神经网络语言模型的计算量从V降低到了Log_{2}V,但是存在一个缺点,再极端情况下,如果中心词属于不频繁词,那么它离根节点的距离相对较远,需要计算路径上很多节点参数,计算量也不简单。

        这样就出现了另外一种训练Word2vec的方法。它不使用哈夫曼树模型代替Softmax,而是使用负采样思路。我的理解为降低输出负神经元个数,仅选择几个具有代表性的负样本训练即可,例如原来softmax需要输出一个正样本,和n-1个负样本,但是现在对负样本进行有策略的采样,不输出所有负样本概率。

一、正负样本

        假定一个训练样本,中心词为w,窗口周围有2c个词,记context(w)

        (1)正样本:根据中心词wcontext(w)是存在相关性,所以记为正样本。P(context(w),w)

        (2)负样本:通过负采样得到N个负样本,即与context(w)不存在相关性,这样组成N个负样本,P(context(w),w_{i}),i=1,2,3,...,N

        (3)现在得到了训练样本,利用N+1个样本对每个词向量x_{w} 和词向量对应从模型参数\theta ^{w}  进行训练。

        (4)获得每个词向量

二、负采样方式

        负采样的基本思路是在词典中出现频率高的词被采样概率越大,生僻词采样的概率小,这就是一个带权采样的问题。任何采样算法都应该保证频次越高的样本越容易被采样出来。基本的思路是对于长度为1的线段,根据词语的词频将其公平地分配给每个词语:

        这样线段就被每个词平分了。然后我们将这段长度为1的线段划分成M等份,这里M>VV表示词典中词的数量,接下来生成一个0-1之间的随机数,看落在那个那个等分的词线段中,就取出该词作为负样本即可。

三、Negative Sampling梯度计算

        怎么更新模型参数\theta ^{w}  和词向量x_{w} 呢?Negative Sampling采用二元逻辑回归来求解模型参数,与逻辑回归推导差不多,利用极大似然函数来求解参数

        对于正例概率我们期望满足下式:

        对于负例样本满足:

        所以,对于所有样本满足:

        与逻辑回归类似,模型的似然函数为:

        对似然函数取对数:

        现在对词向量x_{w} 和词向量参数\theta ^{w}  求偏导(计算一个偏导即可,另外一个同理),得:

四、Negative Sampling的CBOW模型流程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容