当前位置: 代码迷 >> 综合 >> cs224n学习2:Word Vectors II: GloVe, Evaluation and Training
  详细解决方案

cs224n学习2:Word Vectors II: GloVe, Evaluation and Training

热度:54   发布时间:2023-12-16 06:18:59.0

Word Vectors II: GloVe, Evaluation and Training

  • 1. 单词表示的全局向量(GloVe)
    • 1.1 与先前方法的比较
    • 1.2 共现矩阵
    • 1.3 最小二乘目标
    • 1.4 结论
  • 2 词向量的评估
    • 2.1 内部评价
    • 2.2 外在评价
    • 2.3 内部评估示例:词向量类比
    • 2.4 内部评估例子:类比评估
    • 2.5 内部评估示例:相关评估
    • 2.6 进一步阅读:处理歧义
  • 3 外部任务训练
    • 3.1 问题表述
    • 3.2 训练词向量
    • 3.3 Softmax分类和正则化
    • 3.4 窗口分类
    • 3.5 非线性分类器
  • 参考

翻译:
CS224n: Natural Language Processing with Deep Learning
Lecture Notes: Part II
Word Vectors II: GloVe, Evaluation and Training
这套注释首先介绍了用于训练单词向量的GloVe模型。然后,通过查看如何对它们进行内在和外在评估,它扩展了我们对词向量(可互换地称为词嵌入)的讨论。在进行过程中,我们将讨论 单词相似性作为一种内在评估技术的示例,以及如何将其用于调整单词嵌入技术。然后,我们讨论用于外部任务的 训练模型权重/参数和单词向量。最后,我们将人工神经网络作为自然语言处理任务的一类模型。

1. 单词表示的全局向量(GloVe)

1.1 与先前方法的比较

到目前为止,我们已经研究了两种主要的方法来查找单词嵌入。第一组基于计数,并依赖于矩阵分解(例如LSA,HAL)。尽管这些方法有效地利用了全局统计信息,但它们主要用于捕获单词的相似性,并且在诸如单词比喻等任务上做得很差,表明次优向量空间结构。另一组方法是基于浅窗口的(例如, skip-gram和CBOW模型),它们通过在局部上下文窗口中进行预测来学习单词嵌入。这些模型展示了捕获单词相似度以外的复杂语言模式的能力,但是无法利用全局共现统计信息
相比之下,GloVe由加权最小二乘模型组成,该模型对全局单词-单词共现计数进行训练,从而有效地利用了统计信息。该模型产生具有有意义子结构的词向量空间。它显示了词类比任务的最新性能,并且在几个词相似性任务上的表现优于其他当前方法。

1.2 共现矩阵

令X表示单词-单词共现矩阵,其中Xij表示单词j在单词i的上下文中出现的次数。令Xi = ∑kXik为任何单词k在单词i的上下文中出现的次数。最后,令Pij = P(wj | wi)= Xij / Xi为j在单词i的上下文中出现的概率。
填充此矩阵需要遍历整个语料库以收集统计信息。对于大型语料库,此遍可能在计算上昂贵,但它是一次性的前期费用。

1.3 最小二乘目标

回想一下,对于skip-gram语法模型,我们使用softmax来计算单词j在单词i的上下文中出现的概率:
在这里插入图片描述
训练以在线,随机的方式进行,但是隐式的全局交叉熵损失可以计算为:
在这里插入图片描述
由于相同的词i和j可以在语料库中出现多次,因此将i和j的相同值首先分组在一起效率更高:
在这里插入图片描述
其中,共现频率的值由共现矩阵X给出。交叉熵损失的一个重大缺点是,它要求对分布Q进行适当的归一化,这涉及整个词汇表的昂贵求和。相反,我们使用最小二乘目标,其中P和Q中的归一化因子被丢弃:
在这里插入图片描述
其中?Pij = Xij和Qij = exp(?uT j?vi)是非归一化分布。这种表述引入了一个新问题– Xij通常具有非常大的值,并且使优化变得困难。一个有效的更改是最小化?P和?Q对数的平方误差:
在这里插入图片描述
另一个观察结果是,不能保证加权因子Xi是最优的。相反,我们引入了一个更通用的加权函数,我们也可以随意使用它来取决于上下文词:
在这里插入图片描述

1.4 结论

总之,GloVe模型通过仅训练单词共现矩阵中的非零元素来有效地利用全局统计信息,并产生具有有意义子结构的向量空间。在给定相同的语料库,词汇量,窗口大小和训练时间的情况下,它在词类比任务上始终优于word2vec。无论速度如何,它都能更快地获得更好的结果,并且还可以获得最佳的结果。

2 词向量的评估

到目前为止,我们已经讨论了诸如Word2Vec和GloVe方法之类的方法来训练和发现语义空间中自然语言单词的潜在矢量表示。在本节中,我们讨论如何定量评估通过这种技术产生的单词向量的质量。

2.1 内部评价

词向量的内在评估是对特定中间子任务(例如类比完成)上的由嵌入技术(例如Word2Vec或GloVe)生成的一组词向量的评估。这些子任务通常简单且计算迅速,从而使我们能够帮助理解用于生成单词向量的系统。内在评估通常应向我们返回一个数字,该数字指示这些词向量在评估子任务上的性能。
**动机:**让我们考虑一个示例,其中我们的最终目标是创建一个使用词向量的问答系统作为输入。这样做的一种方法是训练一种机器学习系统,该系统:
1.将单词作为输入
2.将它们转换为单词向量
3.将单词向量用作复杂机器学习系统的输入
4.通过该系统将输出的单词向量映射回自然语言单词
5.生成单词作为答案
在这里插入图片描述
当然,在制作这种最先进的问答系统的过程中,我们将需要创建最佳的词向量表示形式,因为它们被用于下游子系统(例如深度神经网络)。为了在实践中做到这一点,我们将需要调整Word2Vec子系统中的许多超参数(例如,词向量表示的维)。虽然理想的方法是在Word2V ec子系统中的任何参数更改后重新训练整个系统,但从工程的角度来看这是不切实际的,因为机器学习系统(在第3步中)通常是一个深度神经网络,具有数百万个参数,需要非常多的参数。渴望训练。在这种情况下,我们希望提出一种简单的内在评估技术,该技术可以提供对词对词向量子系统的“好”程度的度量。显然,要求内在评价与最终任务绩效成正相关。

2.2 外在评价

词向量的外在评估是对在手头上实际任务上通过嵌入技术生成的一组词向量的评估。这些任务通常很复杂且计算缓慢。使用上面的示例,可以评估问题答案的系统是外部评估系统。通常,对表现不佳的外部评估系统进行优化无法使我们确定哪个特定子系统出了问题,这激发了进行内部评估的需要。

2.3 内部评估示例:词向量类比

词向量内在评估的一个流行选择是它在完成词向量类比方面的性能。在词向量类比中,我们得到了以下形式的不完全类比:
a : b : : c : ?
然后,固有评估系统会识别出使余弦相似度最大化的单词向量:在这里插入图片描述
该指标具有直观的解释。理想情况下,我们希望xb? xa = xd? xc(例如,皇后–国王=女演员–演员)。这意味着我们要xb? xa + xc = xd。因此,我们确定了向量xd,该向量使两个词向量之间的标准化点积最大化(即余弦相似度)。
使用内在评估技术(例如词向量比喻)时应格外小心(牢记用于预训练的语料库的各个方面)。例如,考虑以下形式的类比:
城市1:包含城市1的州::城市2:包含城市2的州在这里插入图片描述
表1:以下是语义单词向量的类比(内部评估),可能会遭受名称相同的不同城市的困扰

在上述许多情况下,全美国有多个名称相同的城市/城镇/村庄。因此,许多州将有资格作为正确答案。例如,在美国至少有10个名为Phoenix的地方,因此,亚利桑那州不一定是唯一正确的回应。现在让我们考虑以下形式的类比:
首都1:国家1 ::首都2:国家2
在上述许多情况下,通过此任务产生的最终城市只是最近的首都。例如,在1997年之前,哈萨克斯坦的首都是阿拉木图。因此,如果我们的语料库过时,我们可以预期其他问题。
前两个示例演示了使用单词向量的语义测试。我们还可以使用词向量类比来测试语法。以下内部评估测试单词向量捕获最高级形容词概念的能力:
类似地,下面显示的内部评估测试单词向量捕获过去式概念的能力:
在这里插入图片描述
表2:以下是语义单词向量的类比(内部评估),这些国家可能在不同的时间点拥有不同的首都

在这里插入图片描述
表3:这是测试最高级形容词概念的句法词向量类比(内部评估)

2.4 内部评估例子:类比评估

现在,我们探讨了单词向量嵌入技术(例如Word2Vec和GloVe)中的一些超参数,这些超参数可以使用内部评估系统(例如类比完成系统)进行调整。首先,让我们看看在类比评估任务下,在相同的超参数下如何执行不同的创建词向量嵌入的方法(在最近的研究工作中):
在这里插入图片描述
表4:这是测试过去式概念的句法词向量类比(内部评估)

在这里插入图片描述
表5:在这里,我们比较了在使用不同的超参数和数据集的情况下不同模型的性能

检查上表,我们可以得出3个主要观察结果:

  • **性能在很大程度上取决于用于词嵌入的模型:**这是预期的结果,因为不同的方法尝试使用根本不同的属性(例如共现计数,奇异向量等)将词嵌入向量中。
  • **随着语料库大小的增加,性能也会提高:**发生这种情况的原因是,随着经验的丰富,嵌入技术会获得更多的示例。例如,如果一个类比完成示例以前未遇到过测试单词,则将产生错误的结果。
  • **对于极低维的单词向量,性能会较低:**低维的单词向量无法捕获语料库中不同单词的不同含义。这可以看作是模型偏差过低的高偏差问题。例如,让我们考虑单词“国王”,“女王”,“男人”,“女人”。直观地讲,我们将需要使用“性别”和“领导力”之类的两个维度将它们编码为2位字向量。任何较低的词都将无法捕获四个词之间的语义差异。
    在这里插入图片描述
    图2:在这里,我们看到训练时间如何提高训练效果并帮助减少最后几项表现。
    在这里插入图片描述
    图3展示了如何显示出随着语料库的增加而提高的准确性。在这里我们看到性能如何随数据大小而提高。

在这里插入图片描述
图4展示了如何使用GloVe显示其他超参数如何影响精度。我们将看到精度随着GloVe的矢量尺寸和上下文窗口大小的变化而变化。

2.5 内部评估示例:相关评估

评估单词向量质量的另一种简单方法是,要求人类以固定的比例(例如0-10)评估两个单词之间的相似度,然后将其与相应单词向量之间的余弦相似度进行比较。这已在包含人类判断调查数据的各种数据集上完成。
在这里插入图片描述
表6:在这里我们看到了使用不同嵌入技术和不同人类判断数据集的词向量相似度之间的相关性

2.6 进一步阅读:处理歧义

有人可能想知道我们该如何处理这样的情况:我们想用不同的向量捕获同一单词,以用于自然语言中的不同用法。例如,“ run”既是名词又是动词,并且根据上下文使用和解释不同。通过全局上下文和多种单词原型来改进单词表示(Huang等,2012)描述了如何在NLP中处理此类情况。该方法的实质如下:
1.收集所有出现的单词的固定大小的上下文窗口(例如,之前5个,之后5个)
2.每个上下文由上下文词向量的加权平均值表示(使用idf-weighting)
3.应用球形k均值对这些上下文表示进行聚类。
4.最后,每个单词出现都被重新标记为其关联的簇,并用于训练该簇的单词表示。
有关此主题的更严格的处理,请参阅原始论文。

3 外部任务训练

到目前为止,我们专注于内在任务,并强调了它们在开发良好的单词嵌入技术中的重要性。当然,大多数实际问题的最终目标是将生成的单词向量用于其他一些非本征任务。在这里,我们讨论处理外部任务的一般方法。

3.1 问题表述

大多数NLP外在任务都可以表述为分类任务。例如,给定一个句子,我们可以将句子分类为具有积极,消极或中立的情感。同样,在命名实体识别(NER)中,给定上下文和中心词,我们希望将中心词分类为许多类之一。对于输入“ Jim在2006年购买了Acme Corp.的300股”,我们希望得到分类输出“ [Jim] Person在2006年购买了[Acme Corp.] Organization的300股”。
对于此类问题,我们通常从以下形式的训练集开始:
在这里插入图片描述
其中x(i)是通过某种词嵌入技术生成的d维词向量,而y(i)是C维一词向量,表示我们希望最终预测的标签(情感,换句话说,命名实体,购买/出售决策等)。
在典型的机器学习任务中,我们通常保持输入数据和目标标签固定不变,并使用优化技术(例如梯度下降,L-BFGS,牛顿法等)训练权重。但是,在NLP应用程序中,我们引入了在训练外部任务时重新训练输入单词向量的想法。让我们讨论何时以及为什么我们应该考虑这样做。
在这里插入图片描述
图5:我们可以使用简单的线性决策边界(如此处所示的边界)(2-D词向量)使用逻辑回归和SVM等技术对词向量进行分类

3.2 训练词向量

到目前为止,我们已经讨论过,用于外部任务的单词向量是通过在较简单的固有任务上进行优化来初始化的。在许多情况下,这些经过预训练的词向量可以很好地代表外部任务的最佳单词向量,它们在外部任务中表现良好。然而,这次也有可能可以使用外部任务进一步训练(即,重新训练)预训练的词向量以更好地执行。但是,重新训练单词向量可能会有风险。
如果我们使用外部任务重新训练单词向量,则需要确保训练集足够大以覆盖词汇表中的大多数单词。这是因为Word2V ec或GloV e产生了语义相关的单词,它们位于单词空间的同一部分中。当我们在一小部分词汇表上重新训练这些单词时,这些单词会在单词空间中移动,结果,最终任务的性能实际上可能会降低。让我们通过一个示例进一步探讨这个想法。考虑预训练的向量在二维空间中,如图6所示。在这里,我们看到单词向量在某些外部分类任务中被正确分类。现在,如果由于训练集大小有限而仅对其中两个向量进行再训练,那么我们在图7中会看到一个词被错误分类,因为边界由于词向量更新而移动。
因此,如果训练数据集较小,则不应重新训练单词向量。如果训练集很大,则重新训练可以提高性能。
在这里插入图片描述
图6:在这里,我们看到单词“ Telly”,“ TV”和“ Television”在重新训练之前已正确分类。 “ Telly”和“ TV”出现在外部任务训练集中,而“ Television”只出现在测试集中。
在这里插入图片描述
图7:在这里,我们看到训练后单词“ Telly”和“ TV”已正确分类,但是“ Television”没有出现,因为它不在训练集中。

3.3 Softmax分类和正则化

让我们考虑使用具有以下形式的Softmax分类函数:
在这里插入图片描述
在这里,我们计算单词向量x在类j中的概率。使用交叉熵损失函数,我们计算出这样一个训练示例的损失:
在这里插入图片描述
当然,上面的求和将是(C-1)个零值的总和,因为yjis仅在一个索引处(至少现在),这意味着x仅属于1个正确的类。因此,让我们将k定义为正确类的索引。因此,我们现在可以将损失简化为:
在这里插入图片描述
然后,我们可以将上述损失扩展到N点的数据集:
在这里插入图片描述
上面的唯一区别是k(i)现在是一个返回正确的类索引的函数,例如x(i)。现在让我们尝试估计如果考虑同时训练模型权重(W)和词向量(x)时将更新的参数数量。我们知道,一个简单的线性决策边界将需要一个至少吸收一个d维输入字向量并在C类上产生分布的模型。因此,要更新模型权重,我们将更新C·d参数。如果我们也更新词汇表V中每个单词的单词向量,那么我们将更新多达| V |个。单词向量,每个向量都是d维的。因此,参数的总数将多达C·d + | V |。 ·d为简单的线性分类器:
在这里插入图片描述
考虑到模型的决策边界有多简单,这是非常大量的参数-如此大量的参数极有可能过度拟合。
为了降低过度拟合的风险,我们引入了一个正则化项,该项提出了贝叶斯(Bayesian)的信念,即参数(θ)应该很小(即接近零):
在这里插入图片描述
使上述成本函数最小化可减少参数取非常大的值以恰好适合训练集的可能性,并且如果相对目标权重λ进行了很好的调整,则可以提高泛化性。一旦我们探索了具有更多参数的更复杂的模型(例如神经网络),正则化的想法就变得更加必要。

3.4 窗口分类

到目前为止,我们主要探讨了使用单个单词向量x进行外部任务预测的想法。实际上,由于自然语言的性质,很难做到这一点。自然语言倾向于将相同的单词用于不同的含义,并且我们通常需要知道该单词用法的上下文以区分含义。例如,如果您被要求向某人解释什么“制裁”的意思是,您会立即意识到,根据上下文,“制裁”可能意味着“允许”或“惩罚”。在大多数情况下,我们倾向于使用单词序列作为模型的输入。序列是上下文词向量之前和之后的中心词向量。上下文中的单词数也称为上下文窗口大小,并根据要解决的问题而变化。通常,较窄的窗口大小会导致语法测试中更好的性能,而较宽的窗口会导致语义测试中更好的性能。通常,较窄的窗口大小会导致语法测试中更好的性能,而较宽的窗口会导致语义测试中更好的性能。
为了修改前面讨论的Softmax模型以使用单词窗口进行分类,我们将以以下方式将x(i)替换为x(i)窗口:
在这里插入图片描述
结果,当我们评估损失相对于单词的梯度时,我们将收到单词向量的梯度:
在这里插入图片描述
在实现中,当然将需要分配梯度以更新相应的词向量。

3.5 非线性分类器

现在,我们介??绍对非线性分类模型(例如神经网络)的需求。我们在图9中看到,线性分类器对许多数据点进行了错误分类。使用如图10所示的非线性决策边界,我们设法对所有训练点进行准确分类。尽管简化了,但这是一个经典案例,说明了对非线性决策边界的需求。在下一组说明中,我们将神经网络作为一类非线性模型进行研究,这些模型在深度学习应用中表现特别出色。在这里插入图片描述
图9:在这里,我们看到即使选择了最佳线性决策边界,许多示例仍被错误分类。这是由于线性决策边界对此数据集的模型容量有限。
在这里插入图片描述
图10:在这里,我们看到非线性决策边界允许对数据点进行更好的分类。

参考

https://github.com/datawhalechina/team-learning/tree/master/04%20%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/Lecture/Lecture2/official_notes

  相关解决方案