提交 040cb955 编写于 作者: A Aston Zhang

positive and neg

上级 d1add606
......@@ -28,7 +28,7 @@ $$\sigma(x) = \frac{1}{1+\exp(-x)}.$$
$$ \prod_{t=1}^{T} \prod_{-m \leq j \leq m,\ j \neq 0} \mathbb{P}(D=1\mid w^{(t)}, w^{(t+j)}).$$
然而,以上模型中包含的事件仅考虑了正例样本。这导致当所有词向量相等且值为无穷大时,以上的联合概率才被最大化为1。很明显,这样的词向量毫无意义。负采样通过采样并添加负例样本使目标函数更有意义。设背景词$w_o$出现在中心词$w_c$的一个背景窗口为事件$P$,我们根据分布$\mathbb{P}(w)$采样$K$个未出现在该背景窗口中的词,即噪音词。设噪音词$w_k$($k=1, \ldots, K$)不出现在中心词$w_c$的该背景窗口为事件$N_k$。假设同时含有正例样本和负例样本的事件$P, N_1, \ldots, N_K$相互独立,负采样将以上需要最大化的仅考虑正例样本的联合概率改写为
然而,以上模型中包含的事件仅考虑了正类样本。这导致当所有词向量相等且值为无穷大时,以上的联合概率才被最大化为1。很明显,这样的词向量毫无意义。负采样通过采样并添加负类样本使目标函数更有意义。设背景词$w_o$出现在中心词$w_c$的一个背景窗口为事件$P$,我们根据分布$\mathbb{P}(w)$采样$K$个未出现在该背景窗口中的词,即噪音词。设噪音词$w_k$($k=1, \ldots, K$)不出现在中心词$w_c$的该背景窗口为事件$N_k$。假设同时含有正类样本和负类样本的事件$P, N_1, \ldots, N_K$相互独立,负采样将以上需要最大化的仅考虑正类样本的联合概率改写为
$$ \prod_{t=1}^{T} \prod_{-m \leq j \leq m,\ j \neq 0} \mathbb{P}(w^{(t+j)} \mid w^{(t)}),$$
......@@ -75,7 +75,7 @@ $$\sum_{w \in \mathcal{V}} \mathbb{P}(w \mid w_c) = 1.$$
## 小结
* 负采样通过考虑同时含有正例样本和负例样本的相互独立事件来构造损失函数。其训练中每一步的梯度计算开销与采样的噪音词的个数线性相关。
* 负采样通过考虑同时含有正类样本和负类样本的相互独立事件来构造损失函数。其训练中每一步的梯度计算开销与采样的噪音词的个数线性相关。
* 层序softmax使用了二叉树,并根据根节点到叶子节点的路径来构造损失函数。其训练中每一步的梯度计算开销与词典大小的对数相关。
## 练习
......
......@@ -160,7 +160,7 @@ all_negatives = get_negatives(all_contexts, sampling_weights, 5)
我们从数据集中提取所有中心词`all_centers`,以及每个中心词对应的背景词`all_contexts`和噪音词`all_negatives`。我们将通过随机小批量来读取它们。
在一个小批量数据中,第$i$个样本包括一个中心词以及它所对应的$n_i$个背景词和$m_i$个噪音词。由于每个样本的背景窗口大小可能不一样,其中背景词与噪音词个数之和$n_i+m_i$也会不同。在构造小批量时,我们将每个样本的背景词和噪音词连结在一起,并添加填充项0直至连结后的长度相同,即长度均为$\max_i n_i+m_i$(`max_len`)。为了避免填充项对损失函数计算的影响,我们构造了掩码变量`masks`,其每一个元素分别与连结后的背景词和噪音词`contexts_negatives`中的元素一一对应。当变量`contexts_negatives`中的某个元素为填充项时,相同位置的掩码变量`masks`中的元素取0,否则取1。为了区分正例和负例,我们还需要将`contexts_negatives`变量中的背景词和噪音词区分开来。依据掩码变量的构造思路,我们只需创建与`contexts_negatives`变量形状相同的标签变量`labels`,并将与背景词(正例)对应的元素设1,其余清0。
在一个小批量数据中,第$i$个样本包括一个中心词以及它所对应的$n_i$个背景词和$m_i$个噪音词。由于每个样本的背景窗口大小可能不一样,其中背景词与噪音词个数之和$n_i+m_i$也会不同。在构造小批量时,我们将每个样本的背景词和噪音词连结在一起,并添加填充项0直至连结后的长度相同,即长度均为$\max_i n_i+m_i$(`max_len`)。为了避免填充项对损失函数计算的影响,我们构造了掩码变量`masks`,其每一个元素分别与连结后的背景词和噪音词`contexts_negatives`中的元素一一对应。当变量`contexts_negatives`中的某个元素为填充项时,相同位置的掩码变量`masks`中的元素取0,否则取1。为了区分正类和负类,我们还需要将`contexts_negatives`变量中的背景词和噪音词区分开来。依据掩码变量的构造思路,我们只需创建与`contexts_negatives`变量形状相同的标签变量`labels`,并将与背景词(正类)对应的元素设1,其余清0。
下面我们将实现这个小批量读取函数`batchify`。它的小批量输入`data`是一个长度为批量大小的列表,其中每个元素分别包含中心词`center`、背景词`context`和噪音词`negative`。该函数返回的小批量数据符合我们所需要的格式,例如包含了掩码变量。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册