本节介绍两种更新一点的词向量。分别是2014年Stanford发表的Glove和2017年由Facebook发表的fastText.
让我们先回顾一下 word2vec 中的跳字模型。将跳字模型中使用 softmax 运算表达的条件概率 $\mathbb{P}(w_j\mid w_i)$. 记作 $q_{ij}$,即
GloVe 模型
有鉴于此,作为在 word2vec 之后提出的词嵌入模型,GloVe 采用了平方损失,并基于该损失对跳字模型做了三点改动
从条件概率比值理解 GloVe
我们还可以从另外一个角度来理解 GloVe 词嵌入。沿用本节前面的符号,$\mathbb{P}(w_j \mid w_i)$ 表示数据集中以 $w_i$ 为中心词生成背景词 $w_j$ 的条件概率,并记作 $p_{ij}$。作为源于某大型语料库的真实例子,以下列举了两组分别以“ice”(“冰”)和“steam”(“蒸汽”)为中心词的条件概率以及它们之间的比值 [1]:
$w_k$= | “solid” | “gas” | “water” | “fashion” |
---|---|---|---|---|
$p_1=\mathbb{P}(w_k\mid\text{“ice”})$ | 0.00019 | 0.000066 | 0.003 | 0.000017 |
$p_2=\mathbb{P}(w_k\mid\text{“steam”})$ | 0.000022 | 0.00078 | 0.0022 | 0.000018 |
$p_1/p_2$ | 8.9 | 0.085 | 1.36 | 0.96 |
我们可以观察到以下现象:
对于与“ice”相关而与“steam”不相关的词 $w_k$,例如 $w_k=$“solid”(“固体”),我们期望条件概率比值较大,例如上表最后一行中的值 8.9;
对于与“ice”不相关而与 steam 相关的词 $w_k$,例如 $w_k=$“gas”(“气体”),我们期望条件概率比值较小,例如上表最后一行中的值 0.085;
对于与“ice”和“steam”都相关的词 $w_k$,例如 $w_k=$“water”(“水”),我们期望条件概率比值接近 1,例如上表最后一行中的值 1.36;
对于与“ice”和“steam”都不相关的词 $w_k$,例如 $w_k=$“fashion”(“时尚”),我们期望条件概率比值接近 1,例如上表最后一行中的值 0.96。
由此可见,条件概率比值能比较直观地表达词与词之间的关系。我们可以构造一个词向量函数使得它能有效拟合条件概率比值。我们知道,任意一个这样的比值需要三个词 $w_i$、$w_j$ 和 $w_k$。以 $w_i$ 作为中心词的条件概率比值为 ${p_{ij}}/{p_{ik}}$。我们可以找一个函数,它使用词向量来拟合这个条件概率比值
这里函数 $f$ 可能的设计并不唯一,我们只需考虑一种较为合理的可能性。注意到条件概率比值是一个标量,我们可以将 $f$ 限制为一个标量函数:$f(\boldsymbol{u}_j, \boldsymbol{u}_k, {\boldsymbol{v}}_i) = f\left((\boldsymbol{u}_j - \boldsymbol{u}_k)^\top {\boldsymbol{v}}_i\right)$。交换索引 $j$ 和 $k$ 后可以看到函数 $f$ 应该满足 $f(x)f(-x)=1$,因此一个可能是 $f(x)=\exp(x)$,于是
满足最右边约等号的一个可能是 $\exp\left(\boldsymbol{u}_j^\top {\boldsymbol{v}}_i\right) \approx \alpha p_{ij}$,这里 $\alpha$ 是一个常数。考虑到 $p_{ij}=x{ij}/x_i$,取对数后 $\boldsymbol{u}_j^\top {\boldsymbol{v}}_i \approx \log\,\alpha + \log\,x\{ij} - \log\,x_i$。我们使用额外的偏差项来拟合 $- \log\,\alpha + \log\,x_i$,例如中心词偏差项 $b_i$ 和背景词偏差项 $c_j$:
对上式左右两边取平方误差并加权,我们可以得到 GloVe 的损失函数。
小结
- 在有些情况下,交叉熵损失函数有劣势。GloVe 采用了平方损失,并通过词向量拟合预先基于整个数据集计算得到的全局统计信息。
- 任意词的中心词向量和背景词向量在 GloVe 中是等价的。