Skip to content

Commit 44b8fb8

Browse files
authored
upload 10.4 10.5 docs
1 parent f81e643 commit 44b8fb8

File tree

2 files changed

+131
-0
lines changed

2 files changed

+131
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# 10.4 子词嵌入(fastText)
2+
3+
英语单词通常有其内部结构和形成方式。例如,我们可以从“dog”“dogs”和“dogcatcher”的字面上推测它们的关系。这些词都有同一个词根“dog”,但使用不同的后缀来改变词的含义。而且,这个关联可以推广至其他词汇。例如,“dog”和“dogs”的关系如同“cat”和“cats”的关系,“boy”和“boyfriend”的关系如同“girl”和“girlfriend”的关系。这一特点并非为英语所独有。在法语和西班牙语中,很多动词根据场景不同有40多种不同的形态,而在芬兰语中,一个名词可能有15种以上的形态。事实上,构词学(morphology)作为语言学的一个重要分支,研究的正是词的内部结构和形成方式。
4+
5+
在word2vec中,我们并没有直接利用构词学中的信息。无论是在跳字模型还是连续词袋模型中,我们都将形态不同的单词用不同的向量来表示。例如,“dog”和“dogs”分别用两个不同的向量表示,而模型中并未直接表达这两个向量之间的关系。鉴于此,fastText提出了子词嵌入(subword embedding)的方法,从而试图将构词信息引入word2vec中的跳字模型 [1]
6+
7+
在fastText中,每个中心词被表示成子词的集合。下面我们用单词“where”作为例子来了解子词是如何产生的。首先,我们在单词的首尾分别添加特殊字符“<”和“>”以区分作为前后缀的子词。然后,将单词当成一个由字符构成的序列来提取$n$元语法。例如,当$n=3$时,我们得到所有长度为3的子词:“<wh>”“whe”“her”“ere”“<re>”以及特殊子词“<where>”。
8+
9+
在fastText中,对于一个词$w$,我们将它所有长度在$3 \sim 6$的子词和特殊子词的并集记为$\mathcal{G}_w$。那么词典则是所有词的子词集合的并集。假设词典中子词$g$的向量为$\boldsymbol{z}_g$,那么跳字模型中词$w$的作为中心词的向量$\boldsymbol{v}_w$则表示成
10+
11+
$$
12+
\boldsymbol{v}_w = \sum_{g\in\mathcal{G}_w} \boldsymbol{z}_g.
13+
$$
14+
15+
fastText的其余部分同跳字模型一致,不在此重复。可以看到,与跳字模型相比,fastText中词典规模更大,造成模型参数更多,同时一个词的向量需要对所有子词向量求和,继而导致计算复杂度更高。但与此同时,较生僻的复杂单词,甚至是词典中没有的单词,可能会从同它结构类似的其他词那里获取更好的词向量表示。
16+
17+
18+
## 小结
19+
20+
* fastText提出了子词嵌入方法。它在word2vec中的跳字模型的基础上,将中心词向量表示成单词的子词向量之和。
21+
* 子词嵌入利用构词上的规律,通常可以提升生僻词表示的质量。
22+
23+
24+
25+
## 参考文献
26+
27+
[1] Bojanowski, P., Grave, E., Joulin, A., & Mikolov, T. (2016). Enriching word vectors with subword information. arXiv preprint arXiv:1607.04606.
28+
29+
-----------
30+
> 注:本节与原书完全相同,[原书传送门](https://zh.d2l.ai/chapter_natural-language-processing/fasttext.html)
31+
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
# 10.5 全局向量的词嵌入(GloVe)
2+
3+
让我们先回顾一下word2vec中的跳字模型。将跳字模型中使用softmax运算表达的条件概率$P(w_j\mid w_i)$记作$q_{ij}$,即
4+
5+
$$
6+
q_{ij}=\frac{\exp(\boldsymbol{u}_j^\top \boldsymbol{v}_i)}{ \sum_{k \in \mathcal{V}} \text{exp}(\boldsymbol{u}_k^\top \boldsymbol{v}_i)},
7+
$$
8+
9+
其中$\boldsymbol{v}_i$和$\boldsymbol{u}_i$分别是索引为$i$的词$w_i$作为中心词和背景词时的向量表示,$\mathcal{V} = \{0, 1, \ldots, |\mathcal{V}|-1\}$为词典索引集。
10+
11+
对于词$w_i$,它在数据集中可能多次出现。我们将每一次以它作为中心词的所有背景词全部汇总并保留重复元素,记作多重集(multiset)$\mathcal{C}_i$。一个元素在多重集中的个数称为该元素的重数(multiplicity)。举例来说,假设词$w_i$在数据集中出现2次:文本序列中以这2个$w_i$作为中心词的背景窗口分别包含背景词索引$2,1,5,2$和$2,3,2,1$。那么多重集$\mathcal{C}_i = \{1,1,2,2,2,2,3,5\}$,其中元素1的重数为2,元素2的重数为4,元素3和5的重数均为1。将多重集$\mathcal{C}_i$中元素$j$的重数记作$x_{ij}$:它表示了整个数据集中所有以$w_i$为中心词的背景窗口中词$w_j$的个数。那么,跳字模型的损失函数还可以用另一种方式表达:
12+
13+
$$
14+
-\sum_{i\in\mathcal{V}}\sum_{j\in\mathcal{V}} x_{ij} \log\,q_{ij}.
15+
$$
16+
17+
我们将数据集中所有以词$w_i$为中心词的背景词的数量之和$\left|\mathcal{C}_i\right|$记为$x_i$,并将以$w_i$为中心词生成背景词$w_j$的条件概率$x_{ij}/x_i$记作$p_{ij}$。我们可以进一步改写跳字模型的损失函数为
18+
19+
$$
20+
-\sum_{i\in\mathcal{V}} x_i \sum_{j\in\mathcal{V}} p_{ij} \log\,q_{ij}.
21+
$$
22+
23+
上式中,$-\sum_{j\in\mathcal{V}} p_{ij} \log\,q_{ij}$计算的是以$w_i$为中心词的背景词条件概率分布$p_{ij}$和模型预测的条件概率分布$q_{ij}$的交叉熵,且损失函数使用所有以词$w_i$为中心词的背景词的数量之和来加权。最小化上式中的损失函数会令预测的条件概率分布尽可能接近真实的条件概率分布。
24+
25+
然而,作为常用损失函数的一种,交叉熵损失函数有时并不是好的选择。一方面,正如我们在10.2节(近似训练)中所提到的,令模型预测$q_{ij}$成为合法概率分布的代价是它在分母中基于整个词典的累加项。这很容易带来过大的计算开销。另一方面,词典中往往有大量生僻词,它们在数据集中出现的次数极少。而有关大量生僻词的条件概率分布在交叉熵损失函数中的最终预测往往并不准确。
26+
27+
28+
29+
## 10.5.1 GloVe模型
30+
31+
鉴于此,作为在word2vec之后提出的词嵌入模型,GloVe模型采用了平方损失,并基于该损失对跳字模型做了3点改动 [1]
32+
33+
1. 使用非概率分布的变量$p'_{ij}=x_{ij}$和$q'_{ij}=\exp(\boldsymbol{u}_j^\top \boldsymbol{v}_i)$,并对它们取对数。因此,平方损失项是$\left(\log\,p'_{ij} - \log\,q'_{ij}\right)^2 = \left(\boldsymbol{u}_j^\top \boldsymbol{v}_i - \log\,x_{ij}\right)^2$。
34+
2. 为每个词$w_i$增加两个为标量的模型参数:中心词偏差项$b_i$和背景词偏差项$c_i$。
35+
3. 将每个损失项的权重替换成函数$h(x_{ij})$。权重函数$h(x)$是值域在$[0,1]$的单调递增函数。
36+
37+
如此一来,GloVe模型的目标是最小化损失函数
38+
39+
$$\sum_{i\in\mathcal{V}} \sum_{j\in\mathcal{V}} h(x_{ij}) \left(\boldsymbol{u}_j^\top \boldsymbol{v}_i + b_i + c_j - \log\,x_{ij}\right)^2.$$
40+
41+
其中权重函数$h(x)$的一个建议选择是:当$x < c$时(如$c = 100$),令$h(x) = (x/c)^\alpha$(如$\alpha = 0.75$),反之令$h(x) = 1$。因为$h(0)=0$,所以对于$x_{ij}=0$的平方损失项可以直接忽略。当使用小批量随机梯度下降来训练时,每个时间步我们随机采样小批量非零$x_{ij}$,然后计算梯度来迭代模型参数。这些非零$x_{ij}$是预先基于整个数据集计算得到的,包含了数据集的全局统计信息。因此,GloVe模型的命名取“全局向量”(Global Vectors)之意。
42+
43+
需要强调的是,如果词$w_i$出现在词$w_j$的背景窗口里,那么词$w_j$也会出现在词$w_i$的背景窗口里。也就是说,$x_{ij}=x_{ji}$。不同于word2vec中拟合的是非对称的条件概率$p_{ij}$,GloVe模型拟合的是对称的$\log\, x_{ij}$。因此,任意词的中心词向量和背景词向量在GloVe模型中是等价的。但由于初始化值的不同,同一个词最终学习到的两组词向量可能不同。当学习得到所有词向量以后,GloVe模型使用中心词向量与背景词向量之和作为该词的最终词向量。
44+
45+
46+
## 10.5.2 从条件概率比值理解GloVe模型
47+
48+
我们还可以从另外一个角度来理解GloVe模型。沿用本节前面的符号,$P(w_j \mid w_i)$表示数据集中以$w_i$为中心词生成背景词$w_j$的条件概率,并记作$p_{ij}$。作为源于某大型语料库的真实例子,以下列举了两组分别以“ice”(冰)和“steam”(蒸汽)为中心词的条件概率以及它们之间的比值 [1]
49+
50+
|$w_k$=|“solid”|“gas”|“water”|“fashion”|
51+
|--:|:-:|:-:|:-:|:-:|
52+
|$p_1=P(w_k\mid$ “ice” $)$|0.00019|0.000066|0.003|0.000017|
53+
|$p_2=P(w_k\mid$ “steam” $)$|0.000022|0.00078|0.0022|0.000018|
54+
|$p_1/p_2$|8.9|0.085|1.36|0.96|
55+
56+
57+
我们可以观察到以下现象。
58+
59+
* 对于与“ice”相关而与“steam”不相关的词$w_k$,如$w_k=$“solid”(固体),我们期望条件概率比值较大,如上表最后一行中的值8.9;
60+
* 对于与“ice”不相关而与“steam”相关的词$w_k$,如$w_k=$“gas”(气体),我们期望条件概率比值较小,如上表最后一行中的值0.085;
61+
* 对于与“ice”和“steam”都相关的词$w_k$,如$w_k=$“water”(水),我们期望条件概率比值接近1,如上表最后一行中的值1.36;
62+
* 对于与“ice”和“steam”都不相关的词$w_k$,如$w_k=$“fashion”(时尚),我们期望条件概率比值接近1,如上表最后一行中的值0.96。
63+
64+
由此可见,条件概率比值能比较直观地表达词与词之间的关系。我们可以构造一个词向量函数使它能有效拟合条件概率比值。我们知道,任意一个这样的比值需要3个词$w_i$、$w_j$和$w_k$。以$w_i$作为中心词的条件概率比值为${p_{ij}}/{p_{ik}}$。我们可以找一个函数,它使用词向量来拟合这个条件概率比值
65+
66+
$$
67+
f(\boldsymbol{u}_j, \boldsymbol{u}_k, {\boldsymbol{v}}_i) \approx \frac{p_{ij}}{p_{ik}}.
68+
$$
69+
70+
这里函数$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)$,于是
71+
72+
$$f
73+
(\boldsymbol{u}_j, \boldsymbol{u}_k, {\boldsymbol{v}}_i) = \frac{\exp\left(\boldsymbol{u}_j^\top {\boldsymbol{v}}_i\right)}{\exp\left(\boldsymbol{u}_k^\top {\boldsymbol{v}}_i\right)} \approx \frac{p_{ij}}{p_{ik}}.
74+
$$
75+
76+
满足最右边约等号的一种可能是$\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$:
77+
78+
$$
79+
\boldsymbol{u}_j^\top \boldsymbol{v}_i + b_i + c_j \approx \log(x_{ij}).
80+
$$
81+
82+
对上式左右两边取平方误差并加权,我们可以得到GloVe模型的损失函数。
83+
84+
85+
## 小结
86+
87+
* 在有些情况下,交叉熵损失函数有劣势。GloVe模型采用了平方损失,并通过词向量拟合预先基于整个数据集计算得到的全局统计信息。
88+
* 任意词的中心词向量和背景词向量在GloVe模型中是等价的。
89+
90+
91+
92+
## 参考文献
93+
94+
[1] Pennington, J., Socher, R., & Manning, C. (2014). Glove: Global vectors for word representation. In Proceedings of the 2014 conference on empirical methods in natural language processing (EMNLP) (pp. 1532-1543).
95+
96+
97+
-----------
98+
> 注:本节与原书完全相同,[原书传送门](https://zh.d2l.ai/chapter_natural-language-processing/glove.html)
99+
100+

0 commit comments

Comments
 (0)