你大概能猜到为什么独热向量不是表示单词的最佳方式。它的一个已知问题是,独热向量在词汇表较大时会变得非常长,因为独热向量的维度就等于词汇表大小,这在实践中是不可取的。但这并不是最关键的问题。
真正重要的是,独热向量对它们所代表的词语
一无所知
。例如,明显背离常识的是,独热向量居然认为
“猫”到“狗”和“桌子”的语义距离一样近!因此,我们认为
独热向量没有捕捉到
单词含义
。
那么问题来了,
我们怎么知道什么是含义呢?
人类有一种能力:一旦你看到未知词语在不同语境中的使用方式,你就能够理解它的含义。那人类是怎么做的呢?
猜想是:你的大脑搜索了其他可用于相同语境的词,找到一些单词(例如,葡萄酒),并得出结论 tezgüino
与这些词具有相似的含义。这就是分布假设:
经常出现在
相似上下文
中的词具有
相似含义
。
Words which frequently appear in similar contexts have similar meaning.
编者按
:分布假设的一个通俗版本是“观其伴而知其意” (You
shall know a word by the company it),源自J. R. Firth,1957。实际上,也有更早的人说过类似的话,例如
Harris, 1954。
这是一个非常有价值的想法:可以用在实践中让词向量捕捉单词的含义。根据分布假设,“捕捉含义”和“捕捉上下文”在本质上是一样的。
因此,我们需要做的就是将有关单词上下文的信息引入单词表示中。
核心思想
:我们需要将有关单词上下文的信息引入单词表示中。
在本次课程中,我们要做的就是使用不同的方法来做到这一点。
在这种方法中,上下文的定义和之前一样,但是单词和上下文之间关联矩阵的计算采用了更加聪明的PPMI (Positive
Pointwise Mutual Information, 正点交互信息) 度量。 PPMI
度量被广泛认为是神经网络出现前用于度量分布相似性的最佳技术。
重要
:本方法与神经网络密不可分!事实证明,接下来介绍的一些基于神经网络的方法
(Word2Vec) 被证明实际上是在隐式逼近(移位的)PMI 矩阵的因式分解。敬请关注!
LSA (Latent Semantic Analysis, 潜在语义分析)
需要分析文档的集合。在前人方法中,上下文仅用于获取词向量,之后就会被丢弃。但在LSA方法中,上下文也要被充分利用,用来计算
文档向量
。也因此,LSA
成为最简单的主题模型之一:所获得的文档向量之间的余弦相似度可以用来衡量文档之间的相似度。
术语 LSA 有时是指将 SVD 应用于单词-文档矩阵的通用方法,其中单词-文档矩阵的各个元素可以通过不同的方式计算(例如,简单的共现、tf-idf
或其他的衡量方法).
动画预告!
LSA 的Wikipedia
主页
在单词-文档矩阵中有一个很好的动画用于揭示文档的主题探测过程,一定要看看!
Word2Vec
是一个参数是词向量的模型。这些参数针对某个目标进行迭代优化。而该优化目标迫使词向量“知道”一个词可能出现的上下文:训练向量来预测相应词可能的上下文。正如在分布假设中所说的,如果向量“知道”了上下文,它们就能“知道”单词的含义。
Word2Vec 是一种迭代方法。其核心思想如下:
首先,先找一个巨大的文本语料库;
接着,使用滑动窗口浏览文本,每次移动一个单词。在每一步时,都会有一个中心词(Central
Word)和上下文词(Context Words, 即同一窗口中的其他词);
然后,计算上下文词在以此中心词作为条件下出现的概率;
最后,优化中心词向量以增加上述概率。
对于文本语料库中的每个位置 \(t =1, \dots, T\), Word2Vec 在给定中心词的 m 大小窗口内预测上下文词
\(\color{#88bd33}{w_t}\):
\[\color{#88bd33}{\mbox{Likelihood}} \color{black}= L(\theta)=
\prod\limits_{t=1}^T\prod\limits_{-m\le j \le m, j\neq
0}P(\color{#888}{w_{t+j}}|\color{#88bd33}{w_t}\color{black}, \theta), \]
\(\theta\) 是需要被优化的参数(即词向量)。
目标函数(又名损失函数或成本函数) \(J(\theta)\) 则是平均负对数似然:
\(P(\color{#888}{w_{t+j}}\color{black}|\color{#88bd33}{w_t}\color{black}, \theta)\)?
(英文原文)
对于每个单词 \(w\) 我们有两个向量:
当它是一个中心词时,用\(\color{#88bd33}{v_w}\) 表示该词
当它是一个上下文词时,用\(\color{#888}{u_w}\) 表示该词
(在训练结束后,我们通常会丢弃上下文词向量,仅使用中心词向量作为一个词的向量表征。)
于是,对于中心词 \(\color{#88bd33}{c}\) 和
上下文词 \(\color{#888}{o}\),上下文词在该中心词的窗口中出现的概率是
中心词
和
上下文词
时,使用的是不同的向量.
例如, 在第一页中
a
是中心词,所以我们使用
\(\color{#88bd33}{v_a}\)来表示它,当在第二页中它被用作上下文,此时我们使用
\(\color{#888}{u_a}\) 来表示它。
让我们回想一下,对于词汇表中的任一单词,Word2Vec 模型的参数 \(\theta\) 都有两个向量对应,分别是向量
\(\color{#88bd33}{v_w}\) 和 \(\color{#888}{u_w}\)。
这些向量可以通过梯度下降优化训练目标来学习(需要指定学习率 \(\alpha\)):
\[\theta^{new} = \theta^{old} - \alpha \nabla_{\theta} J(\theta).\]
每一次模型优化时,我们都会更新一次模型参数,而每次更新都只针对一个中心词和它的一个上下文词。回顾一下损失函数:
\[\color{#88bd33}{\mbox{Loss}}\color{black} =J(\theta)= -\frac{1}{T}\log L(\theta)=
-\frac{1}{T}\sum\limits_{t=1}^T
\sum\limits_{-m\le j \le m, j\neq 0}\log
P(\color{#888}{w_{t+j}}\color{black}|\color{#88bd33}{w_t}\color{black}, \theta)=
\frac{1}{T} \sum\limits_{t=1}^T
\sum\limits_{-m\le j \le m, j\neq 0} J_{t,j}(\theta). \]
对于中心词 \(\color{#88bd33}{w_t}\), 每个上下文词损失函数中都包含项
\(J_{t,j}(\theta)=-\log
P(\color{#888}{w_{t+j}}\color{black}|\color{#88bd33}{w_t}\color{black},
\theta)\)
\(\color{#888}{w_{t+j}}\).
仔细看一下这一项,就可以知道该如何对此步骤进行更新。举个例子,假设我们有一个句子
这个句子里明显可以看到有一个中心词 cat 和四个上下文词 cute, grey, playing 和 in。
由于一次只看一个词,我们将只选择一个上下文词,下面将以 cute 为例。 那么仅包含中心词 cat 和上下文词
cute 的损失项即可写成:
\[ J_{t,j}(\theta)= -\log
P(\color{#888}{cute}\color{black}|\color{#88bd33}{cat}\color{black}) =
-\log \frac{\exp\color{#888}{u_{cute}^T}\color{#88bd33}{v_{cat}}}{
\sum\limits_{w\in Voc}\exp{\color{#888}{u_w^T}\color{#88bd33}{v_{cat}} }} =
-\color{#888}{u_{cute}^T}\color{#88bd33}{v_{cat}}\color{black}
+ \log \sum\limits_{w\in
Voc}\exp{\color{#888}{u_w^T}\color{#88bd33}{v_{cat}}}\color{black}{.}
此步骤中,哪些参数会被更新呢?
中心词向量中,被更新的仅有 \(\color{#88bd33}{v_{cat}}\);
上下文词向量中,词汇表中所有单词的表示 \(\color{#888}{u_w}\) 都会被更新。
下面是此步骤推导的示意图。
直观地,上述公式过程会通过参数更新以最小化 \(J_{t,j}(\theta)\),本次更新可以让
\(\color{#88bd33}{v_{cat}}\) 和 \(\color{#888}{u_{cute}}\) 变得更相似(点积意义上的),并同时降低
\(\color{#88bd33}{v_{cat}}\) 和词汇表内所有其他单词 \(\color{#888}{u_{w}}\)的相似度。
这听起来可能有点奇怪:如果其他词中也包含有效的上下文词(例如,示例句中的 grey, playing 和
in),为什么我们要降低\(\color{#88bd33}{v_{cat}}\)和
所有
其它单词之间的相似性?
别担心:因为我们会更新每个上下文词(当然还有所有中心词),
平均下来
我们的词向量将学习到所有可能上下文的分布,即意味着本次对有效上下文词的降低会在其他的样例中被补偿。
和以前一样,参数的更新增加了 \(\color{#88bd33}{v_{cat}}\) 和 \(\color{#888}{u_{cute}}\) 两者之间的相似性。
不同的是,现在我们只降低了
\(\color{#88bd33}{v_{cat}}\)与
K 个负样本子集
单词上下文向量的相似性,而非
所有
单词。
由于我们有一个庞大的语料库,平均下来我们将更新每个向量足够的次数,并且向量仍然能够很好地学习单词之间的关系。
正式地,此步骤的新损失函数即:
\[ J_{t,j}(\theta)=
-\log\sigma(\color{#888}{u_{cute}^T}\color{#88bd33}{v_{cat}}\color{black}) -
\sum\limits_{w\in \{w_{i_1},\dots,
w_{i_K}\}}\log\sigma({-\color{#888}{u_w^T}\color{#88bd33}{v_{cat}}}\color{black}),
\(w_{i_1},\dots, w_{i_K}\) 是这一步的K个负样本
,\(\sigma(x)=\frac{1}{1+e^{-x}}\) 是sigmoid激活函数.
\(\sigma(-x)=\frac{1}{1+e^{x}}=\frac{1\cdot e^{-x}}{(1+e^{x})\cdot e^{-x}} =
\frac{e^{-x}}{1+e^{-x}}= 1- \frac{1}{1+e^{x}}=1-\sigma(x)\). 于是loss函数可以被写成:
\[ J_{t,j}(\theta)=
-\log\sigma(\color{#888}{u_{cute}^T}\color{#88bd33}{v_{cat}}\color{black}) -
\sum\limits_{w\in \{w_{i_1},\dots,
w_{i_K}\}}\log(1-\sigma({\color{#888}{u_w^T}\color{#88bd33}{v_{cat}}}\color{black})).
每个单词只有少数“真正”的上下文。因此,随机选择的词大概率是“否定的”,即不是真正的上下文。这个简单的想法不仅可以有效地训练
Word2Vec,还可以用于许多其他应用中,其中一些我们将在后面的课程中看到。
一般地,Word2Vec 根据词的先验分布随机抽取负样本。
假设 \(U(w)\) 是单词出现的概率分布, 一般可以用单词在文本语料库中的频率近似计算。Word2Vec
修改了这个分布以更频繁地采样到频率较低的单词,最终它选择 \(U^{3/4}(w)\) 进行负样本单词的采样.
这并非一个全新的idea
(英文原文)
请注意,学习词向量(分布式表示)的想法并不新鲜。例如,有人尝试将词向量作为更大网络的一部分来学习,然后提取出模型的嵌入层作为词向量。有关前人方法的相关信息,可以通过阅读
Word2Vec 原论文摘要获取。
Word2Vec 让人出乎意料的是,它能够在庞大的数据集和大型词汇表上非常快地学习到高质量的词向量。 当然,我们将在
分析与解释部分
所要介绍的一些有趣的属性让 Word2Vec
闻名遐迩。
正如上文所介绍的,在 Word2Vec 中,我们要为每个单词训练两个向量:一个是中心词向量,另一个是上下文词向量。
训练后,上下文词向量就被丢掉了。
那既然训练后只用到中心词向量,为什么训练的时候要搞两个向量呢?其实,这正是使 Word2Vec
如此简洁的重要技巧之一!回顾一下损失函数:
\[ J_{t,j}(\theta)=
-\color{#888}{u_{cute}^T}\color{#88bd33}{v_{cat}}\color{black} -
\log \sum\limits_{w\in V}\exp{\color{#888}{u_w^T}\color{#88bd33}{v_{cat}}}\color{black}{.}
当每个单词使用不同的向量来分别表示其作为中心词和上下文词的表征时,损失函数的第一项和指数内的点积对于参数都是线性的(因为两项互不相关)。因此,梯度的计算将异常容易。
思维练习
:对单词仅使用一个向量时的情况进行推导(包括损失和梯度)
(\(\forall w \ in \ V, \color{#88bd33}{v_{w}}\color{black}{ = }\color{#888}{u_{w}}\)
Word2Vec SGNS (Skip-Gram with Negative Sampling,带负采样的Skip-Gram) 其实是在隐式地逼近(移位的)PMI
矩阵的因式分解。
点击
这里
了解更多。
实践表明,滑动窗口的大小对得到的向量相似度有很大的影响。 例如,论文
A Primer on
Neural Network Models for Natural
Language Processing
指出,较大的窗口往往会产生更多语义主题上的相似性(即dog, bark, leash 或
walked, run, walking),而较小的窗口往往会产生更多功能和句法上的相似性(即 Poodle, Pitbull,
Rottweiler, 或 walking, running, approaching)。
与往常一样,超参数的选择通常取决于需要解决的任务,你可以查看原始论文以获取更多详细信息。
模型:带负采样的 Skip-Gram;
负样本数量:对于较小的数据集,15-20;对于大型数据集(通常使用),只需 2-5 即可。
词向量的维度:常用的值为 300,但其他变体(例如,100 或 50)也可以。有关最佳维度的理论解释,请查看
相关论文
部分。
滑动窗口(即上下文)大小:5-10。
GloVe 模型
是基于计数的方法和基于预测的方法(例如
Word2Vec)的组合。模型名称 GloVe 代表 Global Vectors,也体现了它的核心思想:利用语料库中的全局信息来学习词向量。
正如之前所见
,最简单的基于计数的方法使用共现计数来衡量单词 w
和上下文 c 之间的关联:N(w, c)。类似地,GloVe 也使用这种计数来构建损失函数:
我们如何评价一种获取词嵌入的方法要比另一种更好呢?目前学术界有两种评估手段(不仅适用于词嵌入):内在评价和外在评价。
编者按
:下文中我们使用词嵌入 (Word Embeddings) 来指代词向量
(Word Vectors),但实际上它们是一个东西。
内在评价
:基于内在属性
(英文原文)
这种类型的评价着眼于词嵌入的内在属性,即它们捕捉单词“含义”的程度。在
分析与解释部分
,我们将详细讨论如何通过词相似性和词类比任务上评价词嵌入。
关于评价,您通常更关心下游任务本身的性能。 因此,读者可能会对外部评价更感兴趣。
然而,下游任务上的模型通常需要大量的时间和资源来训练,尤其是当你需要训练多个的时候,训练成本可能过于昂贵。
至于选择哪个词嵌入,最后还是要取决于读者自己 :)
语义空间旨在创建捕捉单词含义的自然语言表征。词嵌入构成了语义空间,所以我们一般会将多维空间中的一组词向量称作“语义空间”。
下面显示了在 twitter 数据(取自
gensim
)上训练的 GloVe 向量形成的语义空间。
使用 t-SNE 将向量投影到二维空间,下图中展示了前3000个最常用的单词。
例如,king (国王) 和 queen (王后) 之间的差距与 man (男人) 和 woman (女人) 之间的差距是类似的。
再例如,queens 是queen 的复数,正如同 kings 是 king 的复数。 man - woman \(\approx\) king - queen
的例子可能是最受欢迎的例子,但其实也有许多其他有趣的例子。
下面是 country-capital (国家-首都) 关系和一些句法关系的例子。
给定相同关系的两个词对,例如 (man, woman) 和 (king, queen),词类比任务是检查模型是否可以根据任三个词来找到目标词。例如,我们需要检查与
king - man + woman 最接近的向量是否对应于单词 queen。
学术界已经有一些类比基准,其中包括 (
MSR
+
Google analogy
测试集) 和
BATS
(更大规模的类比测试集)
。
在Word2Vec提出之后不久,上图形象地解释了
Tomas
Mikolov 等人提出的方法
。举个例子,我们得到一组词对及其向量表示
\(\{\color{#88a635}{x_i}\color{black}, \color{#547dbf}{z_i}\color{black} \}_{i=1}^n\),
其中 \(\color{#88a635}{x_i}\) 和 \(\color{#547dbf}{z_i}\)
分别是源语言中第 i 个单词及其在目标语言中对应单词的向量。
优化目标是找到一个变换矩阵 W,使得 \(W\color{#547dbf}{z_i}\) 近似于
\(\color{#88a635}{x_i}\):即从源语言空间匹配目标语言空间。
\(W\) 可以通过梯度下降法来学习,最小化以下目标:
\[W = \arg \min\limits_{W}\sum\limits_{i=1}^n\parallel W\color{#547dbf}{z_i}\color{black} -
\color{#88a635}{x_i}\color{black}\parallel^2\]
在原始论文中,用来学习的词汇由源语言中5000个最常用的单词及其对应翻译单词组成,其余的词对都是通过学习得到。
最简单的共现计数同等对待所有上下文词,尽管这些词与中心词的相对位置并不一样。
例如,在右边这个例子中,中心词 cat 与各个上下文词 cute, grey, playing, in 的共现计数均为
直觉上,离中心词越近的上下文词越重要。例如,直接邻居能比距离为 3 的单词提供更多信息。
我们可以利用这个简单的想法来改进模型:在评估计数时,给更接近中心的词更多的权重。这个想法被用在了过去非常出名的
HAL
(1996)
模型中。研究者们正如右侧示例一样修改了计数方法。
在这里,上面说的加权想法是行不通的:我们不能说左侧或右侧哪个上下文更重要。
我们接下来要做的是分别评估左侧和右侧上下文的共现。
对于每个上下文单词,我们引入有两个不同的计数函数:一个是左侧上下文,另一个是右侧上下文。
这意味着共现矩阵变成了 |V| 行和 2|V| 列。 这个想法也被用于
HAL
model (1996)
。
看右图的例子:请注意,对于cute,仅统计其的左共现计数,对于cat 则仅统计其右共现计数。
我们可以预期,常见的词通常比罕见的词提供的信息更少。 例如,in 作为 cat
的上下文中这一事实并不能告诉我们太多关于 cat 的含义:单词 in 可以是许多单词的上下文。
相比之下,cute, grey 和 playing 更容易让我们猜测到中心词 cat。
和中心词的距离
正如我们在之前在基于计数的方法的练习中所讨论的,更接近中心的单词可能更重要。
为了解释罕见词和常见词的不同信息量,Word2Vec 使用了一种简单的二次采样方法:每个训练集中的词
\(w_i\) 都有一定概率被忽略,概率由如下公式计算
\[P(w_i)=1 - \sqrt{\frac{thr}{f(w_i)}}\]
其中 \(f(w_i)\) 是词频, \(thr\) 是概率阈值
(在原文中, \(thr=10^{-5}\))。
这个公式保留了频率的排名,但积极地对频率大于\(thr\)的单词进行二次采样。
有趣的是,这种启发式方法在实践中效果很好:它加速了学习,甚至显著提高了罕见词向量的准确性。
2. 与中心词的距离
与之前关于基于计数的方法的
练习
on count-based methods
一样,我们可以为更接近中心的单词分配更高的权重。
乍一看,读者不会在原始 Word2Vec 实现中看到任何权重。 然而,在每一步中,它都会从 1 到 L
对上下文窗口的大小进行采样。因此,更接近中心的单词比远离的单词更频繁地使用。
在最初的工作中,这(可能)是为了提高效率(每个步骤的更新更少),但这也具有类似于分配权重的效果。
一种可能的方法是从单词子词的向量合成该单词的词向量。 例如,流行的
FastText
操作如图所示。对于每个单词,该方法为每个单词添加特殊的开始和结束字符。然后,除了单词本身的词向量之外,FastText
还使用字符级 n-gram 的向量(也在词汇表中)来补充单词的信息。一个词的表示是词及其子词的向量总和,如图所示。
请注意,这只改变了我们构造词向量的方式,但整个训练流程与标准 Word2Vec 中的相同。
如果两个语料库中一个词的最近邻居不同,则可以视为该词改变了它的含义:因为词嵌入反映了其所处的上下文!
此方法在此 ACL 2020 论文中提出。 形式上,对于每个单词,作者在两个嵌入集中取 k
个最近的邻居,并计算有多少邻居是相同的。共同邻居多的话表明语义没变,但如果共同邻居很少表明语义是不同的。
编者按
:请注意,虽然这种方法是最近才出现的,但它非常简单,并且比以前更复杂的想法效果更好。
永远不要害怕尝试简单的事情——你会惊讶于它们的效果!
以前流行的方法
:对齐两个嵌入空间
以前流行的方法
是对齐两个嵌入空间并找到联合空间中不匹配的单词。
形式化地,让 \(\color{#88a635}{W_1}\color{black}, \color{#547dbf}{W_2}\color{black} \in
\mathbb{R}^{d\times |V|}\)
代表词向量在不同语料库上训练得到的集合。 为了对齐学习的词向量,作者找到了旋转
\(R = \arg \max\limits_{Q^TQ=I}\parallel \color{#547dbf}{W_2}\color{black}Q -
\color{#88a635}{W_1}\color{black}\parallel_F\) - 这被称为正交
Procrustes。使用这种旋转,我们可以对齐词向量空间并找到不匹配的词:这些词会随着语料库的变化而改变含义。
编者按
:请在作业中实现 Orthogonal
Procrustes 方法来对齐俄罗斯语料和乌克兰语料分别训练出的词向量。 在
课程仓库
中找到笔记本。
词嵌入中的偏差(Biases in Word Embeddings)
语义变化(Semantic Change)
拯救理论!(Theory to the Rescue!)
- 即将推出
跨语言嵌入(Cross-Lingual Embeddings)
- 即将推出
... 即将被更新
从理论上讲,Word2Vec 与矩阵分解方法没有太大区别! 带有负采样 (SGNS) 的 Skip-gram
其实是在隐式逼近移位的逐点互信息 (PMI) 矩阵:
\(PMI(\color{#88bd33}{w}\color{black}, \color{#888}{c}\color{black})-\log k\),
其中 \(k\) 是负采样中的负样本数量。
NeurIPS 2014
让我们回顾一下中心词 w 和上下文词 c 的损失函数:
\[ J_{\color{#88bd33}{w}\color{black}, \color{#888}{c}}\color{black}(\theta)=
\log\sigma(\color{#888}{u_{c}^T}\color{#88bd33}{v_{w}}\color{black}) +
\sum\limits_{\color{#888}{ctx}\color{black}\in \{w_{i_1},\dots, w_{i_k}\}}
\log(1-\sigma({\color{#888}{u_{ctx}^T}\color{#88bd33}{v_w}}\color{black})),
其中 \(w_{i_1},\dots, w_{i_K}\) 是 在这一步取的\(k\)个负样本.
这是一步的loss,但是整个语料库的loss会是什么样子呢? 当然,我们会多次遇到相同的词上下文对。
我们会遇到:
(
w
,
c
) 中心词-上下文词对:
\(N(\color{#88bd33}{w}\color{black}, \color{#888}{c}\color{black})\) times;
c
作为负样本出现
\frac{kN(\color{#88bd33}{w}\color{black})N(\color{#888}{c}\color{black})}{N}\)
为什么:每次我们采样一个负样本,我们可以用概率\(\frac{N(\color{#888}{c}\color{black})}{N}\)选择c
c的频率。 乘以 N(w) 因为我们恰好遇到 w N(w) 次;
乘以\(k\),因为我们采样了\(k\)个负样本。
因此,所有语料库的总损失为:
\[ J(\theta)=\sum\limits_{\color{#88bd33}{w}\color{black}\in V,
\color{#888}{c}\color{black} \in V}
\left[N(\color{#88bd33}{w}\color{black}, \color{#888}{c}\color{black})\cdot
\log\sigma(\color{#888}{u_{c}^T}\color{#88bd33}{v_{w}}\color{black}) +
\frac{kN(\color{#88bd33}{w}\color{black})N(\color{#888}{c}\color{black})}{N}\cdot
\log(1-\sigma(\color{#888}{u_{c}^T}\color{#88bd33}{v_{w}}\color{black}))\right].\]
关于\(\color{#888}{u_{c}^T}\color{#88bd33}{v_{w}}\)的偏导数
是(需要你自己检查一下):
我们得到的是 Word2Vec (SGNS) 用一个最优值
\(\color{#888}{u_{c}^T}\color{#88bd33}{v_{w}}\color{black} =
PMI(\color{#88bd33}{w}\color{black}, \color{#888}{c}\color{black})-\log k\)优化了一些东西。
这意味着它学习了\(\color{#888}{u_{c}}\) 和
\(\color{#88bd33}{v_{w}}\)这样的向量,他们的点积等于 PMI 矩阵的元素向右移位\(\log k\)
\(\Longrightarrow\)它隐式地学习分解这个移动的 PMI 矩阵。
这是对证明背后思想的一个相当直观的解释。 如需更正式的版本,请查看论文。 此外,作者使用这些结果直接分解移位的
PMI 矩阵,并查看质量是否与 Word2Vec 相同。
在某些时候,人们认为基于预测的词向量优于基于计数的词向量。 但事实并非如此:我们可以将
word2vec 实现中的一些“技巧”应用到基于计数的模型中,并获得相同的结果。 此外,如果评估得当,GloVE
比 Word2Vec 差。
通常,由 SVD 派生的词和上下文向量表示为
\(V_d\Sigma_d\) 和 \(U_d\): 特征值矩阵仅包含在词向量中。 然而,对于单词相似度任务,这不是最佳结构。
实验表明对称的变体更好:要么在单词和上下文向量中包括
\(\sqrt{\Sigma_d}\),或者在两者中都丢弃(看图)。
上下文分布平滑
正如我们在
上面
中所讨论的,Word2Vec
根据平滑的一元分布\(U^{3/4}\)对负样本进行采样,
这样做是为了更频繁地挑选罕见词。
在计算 PMI 时,我们可以做类似的事情:不使用真正的上下文分布,而是使用平滑的分布(看右图)。
与 Word2Vec 一样, \(\alpha=0.75\).
Word2Vec 中心词向量和上下文词向量:尝试平均
回想一下,在训练后 GloVe 平均了中心词和上下文词的向量,而 Word2Vec 丢弃了上下文词向量。
但是,有时 Word2Vec 也可以从平均中受益,可以尝试一下!
通过调整超参数,基于预测的嵌入并不比基于计数的嵌入更好;
通过一些简单的小技巧,Word2Vec (SGNS) 在每项任务上都能比 GloVe 更好。
负采样目标会影响词嵌入的几何形状:词向量 \(\color{#88bd33}{v_{w}}\)
位于一个狭窄的圆锥体中,与上下文向量\(\color{#888}{u_{w}}\)截然相反。
此外,与 GloVe 不同,Word2Vec 中的上下文词向量指向远离中心词向量。
EMNLP 2017
在这里我们做同样的事情,但是取上下文词向量(平均值仍然是词向量)。 对于
SGNS,上下文词向量与词向量均值的点积为负。
这意味着上下文词向量指向远离词向量,使用它们是不合理的——我们把它们扔掉,只使用词向量。
对于 GloVe,情况并非如此:上下文向量的行为方式与词向量相同。
问题:嵌入有偏差
作者注意到词嵌入是有偏见的:它们编码了不想要的性别关联。
为了找到这样的例子,他们采用种子对(例如,(a,b)=(he,she))并找到具有相同关联的词对:在相同方向上彼此不同,并且彼此相对接近
其他。 形式上,他们选择得分高的配对:
看看下面的结果——肯定有些对是有偏差的!
这意味着,例如,不仅“男人对女人就像国王对王后”,这是一种理想的行为,而且“男人对女人就像医生对护士”,这是一种理想的行为。
不希望的关联。
性别陈规定型职业
为了找到最具性别刻板印象的职业,作者将职业投影到他-她性别方向上。 结果显示在右侧。
我们可以看到,例如,家庭主妇、护士、图书管理员、造型师大多与女性相关,而船长、魔术师、建筑师、战士与男性的相关性更强。
去偏词嵌入
在原始论文中,作者还提出了几种启发式方法来消除词嵌入的偏差——将不想要的关联作为后处理步骤移除。
由于最近在去偏方面做了很多工作,有关此特定方法的更多详细信息,请参阅原始论文。
有关更新的方法,请查看下一篇论文。
训练一个线性分类器\(W\)来预测嵌入的属性(例如,性别),
在 \(W\) 的零空间 (\(x \rightarrow Px\), \(W(Px)=0\) 上线性投影嵌入 -
删除用于预测的信息;
重复直到分类器无法预测任何东西。
这种投影是删除有关属性的线性信息的危害最小的方法:它尽可能少地损害嵌入之间的距离。
该方法是迭代的:您必须重复此过程(训练分类器并投影到新的决策边界),直到分类器无法预测任何有意义的东西。
当分类器无法预测属性时,我们知道所有信息都已被删除。
结果:一切都好
在原始论文中,您会发现实验表明该方法:
确实消除了偏见
(看右边的插图:在算法的 0、3、18、35 次迭代中,最具性别偏见的词的
GloVe 向量的 t-SNE 投影),
不损害嵌入质量
(例如,在去偏之前和之后查看最近的邻居:见下文)。
The main idea here is to align two embeddings sets and to find words
whose embeddings do not match well. Formally, let
\(\color{#88a635}{W_1}\color{black},
\color{#547dbf}{W_2}\color{black} \in
\mathbb{R}^{d\times |V|}\)
be embedding sets trained on different corpora.
To align the learned embeddings, the authors find the rotation
\[R = \arg \max\limits_{Q^TQ=I}\parallel \color{#547dbf}{W_2}\color{black}Q
\color{#88a635}{W_1}\color{black}\parallel_F.\]
is called Orthogonal Procrustes. Using this rotation, we can align embedding
and find words that do not match well: these are the words that change
meaning with the corpora.
Once the embedding sets are aligned, we can evaluate the
semantic
displacement
.
Let \(\color{#88a635}{v_w^1}\) and \(\color{#547dbf}{v_w^2}\) be embedding
word \(w\) in the two aligned spaces,
then the semantic displacement
\(1- \cos (\color{#88a635}{v_w^1}\color{black},
\color{#547dbf}{v_w^2}\color{black}).\)
Intuitively, this measures how well embeddings of the same word
"match"
in the aligned semantic spaces.
Experiments
TL;DR: SGNS Embeddings are Better than PPMI and SVD(PPMI)
The authors looked at historical texts for different time periods and tried
apply the method
on top of different embeddings: PPMI matrix, SVD(PPMI) and Word2Vec (SGNS).
Below are examples of
the top words found for each of the embedding methods.
headed
shifted from primarily referring to the "top
of a body/entity"
to referring to "a direction of travel."
underlined
- borderline cases (largely due
to global genre/discourse shifts)
E.g.,
male
has not changed in meaning, but its usage in discussions
of “gender equality” is relatively new.
unmarked - clear corpus artifacts
E.g., special, cover, and
romance are artifacts from the covers of fiction books occasionally
including
advertisements etc.
Looks like results obtained for SGNS embeddings are better.
In
the original
paper
, different kinds of evaluation were used to confirm this more
formally.
From
the next paper
, you will learn
to detect semantic change more easily.
Note: The Alignment Idea is Used for Different Tasks
Note that the idea to linearly map different semantic spaces was also used
other tasks.
For example,
earlier in the lecture
we
aligned semantic spaces for different languages to build vocabulary.
For more advanced methods
for building cross-lingual embeddings, look
here
in the Related Papers
.
To find which words are used differently in two text corpora:
train embeddings using each of the corpora,
for each word, find closest neighbors in the two embedding spaces;
the neighbors differ a lot → the words are used differently.
A very simple approach
is to train embeddings (e.g., Word2Vec) and look at the closest neighbors.
If a word's closest neighbors are different for the two corpora, the word
changed
its meaning: remember that word embeddings reflect contexts they saw!
Formally, for each word \(w\) the authors take k nearest neighbors
in the two embeddings sets: \(NN_1^k(w)\) and \(NN_2^k(w)\). Then they count
many neighbors are the same
and define the
change score
as follows:
\[score^k(w) = -|NN_1^k(w)\cap NN_2^k(w)|\]
A large intersection
means that the meaning is not different (the score will be low), small
intersection - meaning is different
(such words will receive a high score).
The Method is Interpretable
By design, the method is interpretable: it explains its decisions (i.e., why
word is used differently)
by showing the closest neighbors of the word in the two embedding spaces.
These
neighbors reflect
the word meanings in the two corpora. Look at the examples of found words
along
with the closest neighbors.
Other Good Things
Compared to the alignment-based methods (e.g.,
the previous paper
),
this approach:
is more stable,
requires less tuning and word filtering.
For more details, look at the paper.
Lena:
Note that while the approach is
recent,
it is extremely simple and works better than previous more complicated
ideas.
Never be afraid to try simple things - you'll be surprised how often
they work!
通常,我们希望词嵌入能够像人类一样进行推理。 但是让我们尝试相反的情况:您将尝试将其视为词嵌入。
您将看到类比示例,例如 国王 - 男人 + 女人 = ?,以及几个可能的答案。 任务是猜测词嵌入的想法。
完成任务(10 个示例)并获得语义空间冲浪者证书!
词嵌入:我们使用了来自 gensim-data 的 glove-twitter-100。
非常感谢 Just Heuristic 对技术问题的帮助! 只是启发式 - 只是有趣!