Extra Reading

上下文窗口的词共现可以携带丰富的语义信息。

  • 例如,在一个大型语料库中,“固体”比“气体”更有可能与“冰”共现,但“气体”一词与“蒸汽”的共现频率可能比“冰”出现的频率更高。

  • 此外,可以预先计算此类共现的全局预料库统计数据:这可提供训练效率

  • 为了利用整个语料库中的统计信息进行词嵌入,让我们首先的跳远模型,但是使用全局预料库统计(如共现计数)来解释它

带全局语料统计的跳元模型

qijq_{ij}表示词wjw_j的条件概率P(wjwi)P(w_j \mid w_i),在跳元模型中给定词wiw_i,我们有:

qij=exp(ujvi)kVexp(ukvi),q_{ij} = \frac{\exp(\mathbf{u}_j^\top \mathbf{v}i)}{\sum{k \in V} \exp(\mathbf{u}_k^\top \mathbf{v}_i)},

其中,对于任意索引i,ji,j,向量vi\mathbf{v}_iuj\mathbf{u}_j分别表示词wiw_i作为中心词和词wjw_j作为上下文词,且V=0,1,,V1V = {0, 1, \dots, |V| - 1}是词表的索引集。

  • 考虑词wiw_i可能在语料库中出现多次。在整个语料库中,所有以wjw_j为中心词的上下文词形成一个词索引的多重集CiC_i,该索引允许同一元素的多个实例。对于任何元素,其实例数为其重数。

  • 举例说明,假设词wiw_i在语料库中出现两次,并且在两个上下文窗口中以wjw_j为中心词的上下文词索引是{k,j,m,k}\{k,j,m,k\}{k,l,k,j} \{k,l,k,j\}

  • 因此,多重集Ci={j,j,k,k,k,k,l,m}C_i = \{j, j, k, k, k, k, l, m\},其中元素j,k,l,mj,k,l,m的重数分别为2, 4, 1, 1。

现在,让我们将多重集CiC_i中的元素的重数表示为xijx_{ij}

  • 这是词wjw_j(作为上下文词)和词wiw_i(作为中心词)在整个语料库的同一上下文窗口中的全局共现计数。

  • 使用这样的全局语料库统计,跳元模型的损失函数等价于:iVjVxijlogqij.-\sum_{i \in V} \sum_{j \in V} x_{ij} \log q_{ij}.

  • 我们用xix_i表示上下文窗口中的所有上下文词的数量,其中wiw_i作为它们的中心词出现,这相当于Ci|C_i| 。设pijp_{ij}为用于生成上下文词wjw_j的条件概率xij/xix_{ij}/x_i

  • 给定中心词wiw_i,前公式可以重写为:iVxijVpijlogqij.-\sum_{i \in V} x_i \sum_{j \in V} p_{ij} \log q_{ij}. 其中,jVpijlogqij\sum_{j \in V} p_{ij} \log q_{ij}计算全局语料统计中的条件分布pijp_{ij}和模型预测的条件分布qijq_{ij}的交叉熵。如上所述,这一损失也按xix_i加权。其中最小化损失将使预测的条件分布接近全局语料统计中的条件分布。

虽然交叉熵损失函数通常用于测量概率分布之间的距离,但在这里可能不是一个好的选择。

  • 一方面,正如我们在近似训练中提到的,规范qijq_{ij}的优化存在于整个词表的求和,这在计算上可能非常昂贵。

  • 另一方面,来自大型语料库的大量罕见事件往往被交叉熵损失摊薄,从而低估了对多的频次。

GloVe模型

有鉴于此,GloVe 模型基于平方损失 (Pennington et al., 2014) 对跳元模型做了三个修改:

  1. 使用变量 pij=xijp^{'}_{ij} = x_{ij}qij=exp(ujvi)q_{ij} = \exp(\mathbf{u}j^\top \mathbf{v}i) 而非概率分布,并取两者的对数。所以平方损失项是logpijlogqij)2=(ujvilogxij)2\log p'{ij} - \log q{ij})^2 = \left( \mathbf{u}_j^\top \mathbf{v}i - \log x{ij} \right)^2

  2. 为每个词 wiw_i 添加两个标量模型参数:中心词偏置 bib_i 和上下文词偏置 cic_i

  3. 用权重函数 h(xij)h(x_{ij}) 替换每个损失项的权重,其中 h(x)h(x)[0,1][0, 1] 的间隔内递增。

整合代码,训练 GloVe 是为了尽量降低以下损失函数:

iVjVh(xij)(ujvi+bi+cjlogxij)2.\sum_{i \in V} \sum_{j \in V} h(x_{ij})\left( \mathbf{u}_j^\top \mathbf{v}i + b_i + c_j - \log x_{ij} \right)^2.

对于权重函数,建议的选择是:

  • x<cx < c (例如 c=100c = 100) 时,h(x)=(x/c)αh(x) = (x/c)^\alpha (例如 α=0.75\alpha = 0.75);否则 h(x)=1h(x) = 1。在这种情况下,由于 h(0)=0h(0) = 0,为了提高计算效率,可以省略任意 xij=0x_{ij} = 0 的平方损失项。例如,当使用小批量随机梯度下降训练时,在每次迭代中,我们随机抽样一小批量非零的 xijx_{ij} 来计算梯度并更新模型参数。注意,这些非零的 xijx_{ij} 是预先计算的全局语料库统计数据;因此,该模型 GloVe 被称为全局向量。

  • 应该强调的是,当词 wiw_i 出现在词 wjw_j 的上下文窗口时,词 wjw_j 也出现在词 wiw_i 的上下文窗口。因此,xij=xjix_{ij} = x_{ji}。与拟合非对称条件概率 pijp_{ij} 的 word2vec 不同,GloVe 拟合对称概率 logxij\log x_{ij}。因此,在 GloVe 模型中,任意词的中心向量和上下文向量在数学上是等价的。

  • 但在实际应用中,由于初始化值不同,同一个词经过训练后,在这两个向量中可能得到不同的值:GloVe 将它们相加作为输出向量。

从条件概率比值理解GloVe模型

我们也可以从另一个角度来理解GloVe模型。设 pij=P(wjwi)p_{ij} = P(w_j \mid w_i) 为生成上下文词 wjw_j 的条件概率,给定 wiw_i 作为语料库中的中心词。tab_glove 根据大量语料库的统计数据,列出了给定单词 “ice” 和 “steam” 的共现概率及其比值。

大型语料库中的词-词共现概率及其比值(根据 (Pennington et al., 2014) 中的表1改编)

中, 我们可以观察到以下几点:

  • 对于与 “ice” 相关但与 “steam” 无关的单词 wkw_k,例如 wk=solidw_k = \text{solid},我们预计会有更大的共现概率比值, 例如 8.9%。

  • 对于与 “steam” 相关但与 “ice” 无关的单词 wkw_k,例如 wk=gasw_k = \text{gas},我们预计较小的共现概率比值, 例如 0.85%。

  • 对于同时与 “ice” 和 “steam” 相关的单词 wkw_k,例如 wk=waterw_k = \text{water},我们预计其共现概率的比值接近 1, 例如 1.36。

  • 对于与 “ice” 和 “steam” 都不相关的单词 wkw_k ,例如 wk=fashionw_k = \text{fashion},我们预计其共现概率的比值接近 1, 例如 0.96。

由此可见, 共现概率的比值能够直观地表达词与词之间的关系。因此, 我们可以设计三个词向量的函数来拟合这个比值。对于共现概率 pij/pikp_{ij} / p_{ik} 的比值,其中 wiw_i 是中心词, wjw_jwkw_k 是上下文词, 我们希望使用某个函数 ff 来拟合该比值:f(uj,uk,vi)pijpikf(\mathbf{u}_j, \mathbf{u}_k, \mathbf{v}_i) \approx \frac{p_{ij}}{p_{ik}}

ff 的许多可能的设计中, 我们只在以下几点中选择了一个合理的选择。因为共现概率的比值是标量, 所以我们要求 ff 是标量函数, 例如

f(uj,uk,vi)=f((ujuk)vi)f(\mathbf{u}_j, \mathbf{u}_k, \mathbf{v}_i) = f\left( (\mathbf{u}_j - \mathbf{u}_k)^\top \mathbf{v}_i \right)

在 (14.5.5) 中交换词索引 jjkk, 它必须保持 f(x)f(x)=1f(x) f(-x) = 1, 所以一种可能性是 f(x)=exp(x)f(x) = \exp(x), 即:

f(uj,uk,vi)=exp(ujvi)exp(ukvi)pijpikf(\mathbf{u}_j, \mathbf{u}_k, \mathbf{v}_i) = \frac{\exp\left( \mathbf{u}_j^\top \mathbf{v}_i \right)}{\exp\left( \mathbf{u}_k^\top \mathbf{v}_i \right)} \approx \frac{p_{ij}}{p_{ik}}

现在让我们选择 exp(ujvi)αpij\exp\left( \mathbf{u}_j^\top \mathbf{v}_i \right) \approx \alpha p_{ij} 其中α\alpha是常数。将 pij=xij/xip_{ij} = x_{ij} / x_i 代入, 取两边的对数得到

ujvilogα+logxijlogxi\mathbf{u}_j^\top \mathbf{v}_i \approx \log \alpha + \log x_{ij} - \log x_i

我们可以使用附加的偏置项来拟合 logα+logxi-\log \alpha + \log x_i, 如中心词偏置 bib_i 和上下文词偏置 cjc_j,因此:

ujvi+bi+cjlogxij\mathbf{u}_j^\top \mathbf{v}_i + b_i + c_j \sim \log x_{ij}

通过对加权平方误差的度量, 得到了 (14.5.4) 的 GloVe 损失函数。

Last updated