Abstract:
This week, I explored the skip-gram model from word2vec, which learns dense word embeddings. The report covers the model’s training process, its distinction from traditional logistic regression, and touches on other embedding models like fastText and GloVe. It also briefly discusses the semantic properties of embeddings and their applications in historical semantics.
skip-gram(word2vec)
之前介绍tf-idf,PPIM向量模型如何将单词表示为一个稀疏的长向量,其维度与词汇表中的单词或文档集中的文档相对应。将词表示为短的密集向,才是通常所说的真正意义上的嵌入(embedding).
事实证明,在所有 NLP 任务中,密集向量都比稀疏向量更有效。虽然我们并不完全了解其中的所有原因,但我们有一些直觉。将单词表示为 300 维稠密向量时,分类器需要学习的权重远远少于将单词表示为 50,000 维向量时的权重,而较小的参数空间可能有助于泛化和避免过度拟合。密集向量还能更好地捕捉同义词。
介绍一种计算嵌入的方法:带负采样的跳格算法(skip-gram with negative sampling)(SGNS)。skip-gram是一个名为word2vec的软件包中的两种算法之一,因此有时该算法被笼统地称为word2vec。
word2vec 的直觉是,我们不计算每语境词 c 出现在目标词 w 附近的频率,而是训练一个二元预测任务的分类器,来学习c出现在w附近的概率。
- 将目标词和邻近的语境词,作为正样本。
- 随机抽取词库中的其他单词,作为负样本。
- 使用逻辑回归来训练分类器,以区分这两种情况。
- 使用学习到的权重作为嵌入。
分类器
我们的目标是训练一个分类器,在给定目标词 w 与候选语境词 c(例如(apricot, jam))配对的元组(w, c)时,它将返回 c 是真实语境词的概率
P ( + ∣ w , c ) P(+|w,c) P(+∣w,c)
单词 c 不是 w 的真实语境单词的概率为 1 减P(+)
P ( − ∣ w , c ) = 1 − P ( + ∣ w , c ) P(-|w,c)=1-P(+|w,c) P(−∣w,c)=1−P(+∣w,c)
要计算这些嵌入之间的相似性,我们依据的直觉是,如果两个向量的点积很高(毕竟余弦值是一个归一化的点积),那么它们就是相似的,那么他们出现在一起的概率就很高。要将点积转化为概率,我们再使用sigmoid函数。
分类器计算概率 P(+)的预测函数:
Skip-gram 实际上为每个词存储了两个嵌入,一个是作为目标词的词的嵌入,另一个是作为上下文的词的嵌入。因此,我们需要学习的参数是两个矩阵 W 和 C,每个矩阵包含词汇表 V 中每一个词的嵌入。
skip-gram的训练
首先为 N 个词汇中的每个词汇分配一个随机嵌入向量,然后迭代移动每个单词 w 的嵌入向量,使其更像文本中附近出现的单词c的嵌入向量,而更不像附近未出现的单词的嵌入向量。
从单个训练数据开始:
这个例子有一个目标词 w(apricot),在 L =2 窗口中有 4 个上下文词,从而产生了 4 个正向训练实例:
为了训练二元分类器,我们还需要负示例。事实上,负采样跳格法(SGNS)使用的负样本多于正样本(两者之间的比例由参数 k 设定)。因此,我们将为每个( w , c p o s w,c_{pos} w,cpos)训练实例创建 k 个负样本,每个负样本由目标词 w 和一个 "噪声词 " c n e g c_{neg} cneg 组成。噪声词是从词典中随机抽取的一个词,但不能是目标词 w。上图右侧显示的是 k = 2 的设置,因此我们将为每个正样本 w , c p o s w,c_{pos} w,cpos在负样本训练集中创建 2 个负样本。
给定一组正向和负向训练实例以及一组初始嵌入,学习算法的目标是调整这些嵌入,使其符合以下条件
• 最大化从正面例子中提取的目标词、上下文词对( w , c p o s w,c_{pos} w,cpos)的相似度
• 最小化反面例子中 ( w , c n e g w,c_{neg} w,cneg ) 对的相似度。
如果我们考虑一个单词/上下文对 ( w , c p o s w,c_{pos} w,cpos) 以及它的 k 个噪声词 c n e g 1 , c n e g 2 . . . c n e g k c_{neg1}, c_{neg2}...c_{negk} cneg1,cneg2...cnegk,我们可以将这两个目标表达为以下待最小化的损失函数 LL(因此是负号);这里第一项表示我们希望分类器赋予真实的上下文词 c p o s c_{pos} cpos 一个高概率成为邻词,第二项表示我们希望赋予每个噪声词 c_{negi}$一个高概率成为非邻词,所有这些都乘在一起是因为我们假设它们是相互独立的。
我们希望最大化单词与实际上下文单词的点积,最小化单词与 k 个负采样非邻近单词的点积。
梯度下降一步的直观效果。skip-gram试图移动嵌入,使目标嵌入(此处为 apricot)更接近附近词语(此处为 jam)的上下文嵌入(与之有更高的点积),而远离附近没有出现的噪音词(此处为 Tolstoy 和 matrix)的上下文嵌入式(与之有更低的点积)。
对参数w,c求偏导
就像在逻辑回归中一样,学习算法从随机初始化的 W 和 C 矩阵开始,然后使用梯度下降法在训练语料库中移动 W 和 C,使损失最小化。
其他类型的静态嵌入
静态嵌入包括多种类型。fastText是word2vec的一个扩展,解决了word2vec处理未知词的问题,即那些在测试语料库中出现但在训练语料库中未出现过的词。fastText通过使用子词模型来处理这些问题,将每个词表示为其本身加上构成的n-grams,并在每个词上添加特殊的边界符号<和>。例如,在n=3的情况下,单词"where"将由序列加上字符n-gram表示:<wh, whe, her, ere, re>。然后为每个构成n-gram学习一个嵌入,而单词"where"则由其构成n-gram的所有嵌入之和表示。这样,未知单词就可以通过构成n-grams的总和来表示。fastText开源库包括157种语言的预训练嵌入,可在https://fasttext.cc上获取。
另一个广泛应用的静态嵌入模型是GloVe,它是Global Vectors的缩写,基于全局语料库统计。GloVe基于单词-单词共现矩阵的概率比率,结合了PPMI等基于计数模型的直觉,同时也捕捉了word2vec等方法所使用的线性结构。研究表明,像word2vec这样的稠密嵌入与PPMI这样的稀疏嵌入之间有着优雅的数学关系,word2vec可被视为隐含地优化了PPMI矩阵的移位版本。
嵌入的语义特性
不同强度的相似性
向量语义模型中与稀疏 tf-idf 向量和密集word2vec 向量都相关的一个参数是用于收集计数的上下文窗口的大小。这通常是目标词两侧各 1 到 10 个词(总上下文为 2 到 20 个词)。如何选择取决于表征的目标。
较短的上下文窗口往往会导致语法性更强的表征,因为信息都来自邻近的词语。从短上下文窗口计算向量时,与目标词 w 最相似的词往往是语义相似、语篇相同的词。
相似词:如猫(cat)和狗(dog)。
当向量从长上下文窗口计算时,与目标词 w 的余弦值最高的词往往是在拓扑上相关但不相似的词。
相关词:如咖啡(coffee)和杯子(cup)
类比相似性
类比问题:a对于b就相当于a*对于b*。
平行四边形模型
*苹果(apple)之于树(tree)*就像葡萄(grape)之于 藤蔓(vine)
对于"a对于b就相当于a*对于b*"问题,即给定算法向量 a、b 和a* ,必须求出 b* ,平行四边形法给出这样的表达:
distance是某种距离函数。
如果任务涉及频繁词、小距离和某些关系(如国家与首都或动词/名词与它们的变位形式之间的关系),嵌入空间的效果会很好,但对于其他关系,带有嵌入空间的平行四边形方法效果并不好。
历史语义学
嵌入也是研究意义如何随时间变化的有用工具,方法是计算多个嵌入空间,每个嵌入空间来自特定时期的文本。例如,图展示了过去两个世纪中英语单词意义变化的可视化图示。(谷歌 n-grams(Lin 等人,2012b)和美国历史英语语料库(Davies,2012)等历史语料库)
可视化展示了同性恋(gay)一词从 "cheerful"或 "frolicsome"到指“同性恋”的变化,*广播(*broadcast)的现代 "传播"意义从最初的“播种”意义发展而来,以及 “可怕”(awful)一词从 "充满敬畏(full of awe)"到 "可怕或骇人听闻(terrible or appalling)"意义的转变。
总结
这周学习了skip-gram(word2vec)的嵌入算法原理,其学习的参数和样本形式和一般的逻辑回归有很大的不同,但总体上有相似之处。最后介绍了密集嵌入的一些性质。word2vec是一种经典的密集嵌入算法,为之后的BM25和BERT奠定了很多基础。