首页 > 编程知识 正文

随机负样本,word2vec代码中负采样分布

时间:2023-05-04 23:23:47 阅读:9567 作者:2439

来源: Coursera现代喀秋莎深度学习课程

在Word2Vec文章中,Skip-Gram模型如何构建监视学习任务,将上下文映射到目标语言,它是如何实用的词嵌入(word embedding),但其缺点(例如因此,改进的学习问题称为负采样(negative sampling)。 这可以与Skip-Gram模型相似,但让我们使用更有效的学习算法。

这个视频中的很多想法来自这篇论文,Distributed Representations of Words and Phrases and their Compositionality

如上图所示,我们正在用该算法构建新的监控学习问题。 问题是,给orange和juice这样的单词对。 预测这是否为上下文语-目标语-目标语context-target对。

在本例中,orange和juice为3358www.Sina.com/,orange和gxdwdm为3358www.Sina.com/。 我们要做的就是对上下文词和目标词进行抽样得到,把中间的列(juice,gxdwdm,book )称为词(word )。 示例正样本(标为1)如下所示: 首先提取上下文词,然后在一定的词间距内,例如正负10个词间距内选择宾语。 这是生成此表的第一行orangejuice-1的过程。 为了产生负样本,使用相同上下文的词语,从词典中随机选取词语,在此随机选取单词gxdwdm,标记为0。 由此类推,随机选择另一个词为orangebook0。 选择其他的吧。 orange正好被选为the,可能会标记为0。 还是orange。 可能正好选择of这个词,标记为0。 请注意,即使of确实出现在orange词之前,of也会标记为0。

总之,生成这些数据的方法是选择上下文字(orange ),然后选择目标字(juice )。 这(上图中的绿色水平边框)是表的第一行,它提供了正示例(上下文、目标字和标签为1 )。 而且我们要做的是几次,比如k次。 如果我们从词典中随机选择的词正好出现在词间距离内,例如上下文词orange的正负10个词以内也没关系。

然后,在负样本(标为0)上,在学习算法中输入x,并输入其对" context-word ",以预测目标的标签,即预测输出y(0或1 )。 所以问题是,给orange和juice这样的单词对。 你觉得它们会一起出现吗? 你认为这两个词是通过对相近的两个词进行采样得到的吗? 该算法是区分这两种不同的采样方式,这就是如何生成训练集。

步骤Mikolov等人推荐迷你数据集时,k最好从5到20。 数据集较大时,k选择较小的。 对于更大的数据集k,在2到5、5,构造一个监督学习问题中,本例中为http://www.Sina.com /

这里介绍了x到y映射的监视学习模型。

如上图所示,首先介绍那么如何选取K?。 公式如下。

数据集越小K就越大(larger values of K for smaller data sets)中显示上下文字(context-word )、在http://www.Sina.com) /中显示可能的目标字(target )、在y中显示0和1,上下文-。 我们要做的是,在K = 4,给定输入的c,t对的条件下,确定y=1的概率,即

该模型基于逻辑回归模型,每个可能的目标词都有参数向量_t和另一个参数向量e_c,即每个可能的上下文词的嵌入向量,用该公式估计y=1的概率。 如果有k个样本,可以将其视为1/K的正负样本比率。 也就是说,每个正样本都有k个相应的负样本,训练类似于逻辑回归的模型。

神经网络中,输入one-hot向量传递给e,通过将两者相乘得到嵌入向量,从而转化为10,000个可能的逻辑回归分类问题,并预测词汇表中的这些可能的单词。 我们认为这些是10,000个二分类逻辑回归分类器。 但是,并不是每次迭代都训练所有10,000个。 我只训练其中五个。 训练与真正宾语对应的一个分类器,再训练4个随机选择的负样本。 这就是K=4的情况。 不使用巨大的10,000维softmax,不是因为计算成本高,而是因为可以转换为10,000个二分类问题,分别轻松计算。 每次迭代,我们只做其中五个,一般是K 1个,其中k个负样本和正样本。 它只需要更新K 1个逻辑单元、K 1个二分类问题,每次迭代的成本相对较低。

softmax模型你有一个正样本

词orange和juice,然后需要特意生成一些负样本,所以叫负采样,即用这4个负样本训练,4个额外的二分类器,在每次迭代中你选择4个不同的随机的负样本词去训练你的算法。

这个算法有一个重要的细节就是如何选取负样本?

(1)一个办法是对中间的这些词进行采样,即候选的目标词,根据其在语料中的经验频率(empirical frequency)进行采样,就是通过词出现的频率对其进行采样。但问题是这会导致你在like、the、of、and诸如此类的词上有很高的频率。(2)另一个极端就是用1除以词汇表总词数,即1/|v|,均匀且随机地抽取负样本,这对于英文单词的分布是非常没有代表性的。(3)所以论文的作者Mikolov等人根据经验,他们发现这个经验值的效果最好,它位于这两个极端的采样方法之间,既不用经验频率,也就是实际观察到的英文文本的分布,也不用均匀分布,他们采用以下方式:

上式的f(w_i)是观测到的在语料库中的某个英文词的词频(frequency of the word),通过3/4次方(the power of three-fourths)的计算,使其处于完全独立的分布和训练集的观测分布两个极端之间。Andrew并不确定这是否有理论证明,但是很多研究者现在使用这个方法,似乎也效果不错。

总结一下,我们已经知道了在softmax分类器中如何学到词向量,但是计算成本很高,可以尝试通过将其转化为一系列二分类问题来有效地学习词向量。当然和深度学习的其他领域一样,有很多开源的实现。

说明:记录学习笔记,如果错误欢迎指正!转载请联系我。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。