2020-11-10 吴恩达DL学习-C5 序列模型-W2 自然语言处理与词嵌入(2.8 GloVe 词向量-定义c和t为任意两个位置相近的单词,将他们之间的差距进行最小化处理)

274 篇文章 24 订阅
233 篇文章 0 订阅

1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai

2.8 GloVe 词向量 GloVe word vectors

你已经了解了几个计算词嵌入的算法,另一个在NLP社区有着一定势头的算法是GloVe算法,这个算法并不如Word2Vec或是Skip-Gram模型用的多,但是也有人热衷于它,我认为可能是因为它简便吧,我们来看看这个算法。

Glove算法是由Jeffrey Pennington,Richard Socher和Chris Manning发明的。

(Pennington J, Socher R, Manning C. Glove: Global Vectors for Word Representation[C]// Conference on Empirical Methods in Natural Language Processing. 2014:1532-1543.)

GloVe代表用词表示的全局变量(global vectors for word representation)。

在此之前,我们曾通过挑选语料库中位置相近的两个词,列举出词对,即上下文和目标词,GloVe算法做的就是使其关系开始明确化。
在这里插入图片描述

假定 X i j X_{ij} Xij是单词 i i i在单词 j j j上下文中出现的次数,那么这里 i i i j j j就和 t t t c c c的功能一样,所以你可以认为 X i j X_{ij} Xij等同于 X t c X_{tc} Xtc

你也可以遍历你的训练集,然后数出单词 i i i在不同单词 j j j上下文中出现的个数,单词 t t t在不同单词 c c c的上下文中共出现多少次。

根据上下文和目标词的定义,你大概会得出 X i j X_{ij} Xij等于 X j i X_{ji} Xji这个结论。事实上,如果你将上下文和目标词的范围定义为出现于左右各10词以内的话,那么就会有一种对称关系。如果你对上下文的选择是,上下文总是目标词前一个单词的话,那么 X i j X_{ij} Xij X j i X_{ji} Xji就不会像这样对称了。

不过对于GloVe算法,我们可以定义上下文和目标词为任意两个位置相近的单词,假设是左右各10词的距离,那么 X i j X_{ij} Xij就是一个能够获取单词 i i i和单词 j j j出现位置相近时或是彼此接近的频率的计数器。

GloVe模型做的就是进行优化,我们将他们之间的差距进行最小化处理:
在这里插入图片描述

其中 θ i T e j \theta^T_ie_j θiTej,想一下 i i i j j j t t t c c c的功能一样,因此这就和你之前看的有些类似了,即 θ t T e c \theta^T_te_c θtTec。同时对于这个( θ t T e c \theta^T_te_c θtTec)来说,你想要知道的是告诉你这两个单词之间有多少联系, t t t c c c之间有多紧密, i i i j j j之间联系程度如何,换句话说就是他们同时出现的频率是多少,这是由这个 X i j X_{ij} Xij影响的。然后,我们要做的是解决参数 θ \theta θ e e e的问题,然后准备用梯度下降来最小化上面的公式,你只想要学习一些向量,这样他们的输出能够对这两个单词同时出现的频率进行良好的预测。

θt ​是一个与输出 t 有关的参数,即某个词 t 和标签相符的概率是多少
ec 输入的上下文词c的嵌入向量​

现在一些附加的细节是如果 X i j X_{ij} Xij是等于0的话,那么 l o g 0 log 0 log0就是未定义的,是负无穷大的,所以我们想要对 X i j X_{ij} Xij为0时进行求和,因此要做的就是添加一个额外的加权项 f ( X i j ) f(X_{ij}) f(Xij)。如果 X i j X_{ij} Xij等于0的话,同时我们会用一个约定,即 0 l o g 0 = 0 0log 0=0 0log0=0,这个的意思是如果 X i j = 0 X_{ij}=0 Xij=0,先不要进行求和,所以这个 l o g 0 log 0 log0项就是不相关项。

上面的求和公式表明,这个和仅是一个上下文和目标词关系里连续出现至少一次的词对的和。

f ( X i j ) f(X_{ij}) f(Xij)的另一个作用是,有些词在英语里出现十分频繁,比如说this,is,of,a等等,有些情况,这叫做停止词,但是在频繁词和不常用词之间也会有一个连续体 (continuum)。还有一些不常用的词,比如durion,你还是想将其考虑在内,但又不像那些常用词这样频繁。因此,这个加权因子 f ( X i j ) f(X_{ij}) f(Xij)就可以是一个函数,即使是像durion这样不常用的词,它也能给予大量有意义的运算,同时也能够给像this,is,of,a这样在英语里出现更频繁的词更大但不至于过分的权重。

因此有一些对加权函数 f f f的选择有着启发性的原则,就是既不给这些词(this,is,of,a)过分的权重,也不给这些不常用词(durion)太小的权值。如果你想要知道 f f f是怎么能够启发性地完成这个功能的话,你可以看一下我之前的介绍里引用的GloVe算法论文。

最后,一件有关这个算法有趣的事是 θ \theta θ e e e现在是完全对称的,所以公式里的 θ i \theta_i θi e i e_i ei就是对称的。如果你只看数学式的话,他们( θ i \theta_i θi e i e_i ei)的功能其实很相近,你可以将它们颠倒或者将它们进行排序,实际上他们都输出了最佳结果。

因此一种训练算法的方法是一致地初始化 θ \theta θ e e e,然后使用梯度下降来最小化输出,当每个词都处理完之后取平均值,所以,给定一个词 w w w,你就会有 e w ( f i n a l ) = e w + θ w 2 e_w^{(final)}=\frac{e_w+\theta_w}2 ew(final)=2ew+θw。因为 θ \theta θ e e e在这个特定的公式里是对称的,而不像之前课程里我们了解的模型, θ \theta θ e e e功能不一样,因此也不能像那样取平均。

这就是GloVe算法的内容,我认为这个算法的一个疑惑之处是,如果你看着上面的这个公式,它实在是太简单了,对吧?仅仅是最小化,像这样的一个二次代价函数是怎么能够让你学习有意义的词嵌入的呢?

但是结果证明它确实有效,发明者们发明这个算法的过程是他们以历史上更为复杂的算法,像是newer language模型,以及之后的Word2Vec、Skip-Gram模型等等为基础,同时希望能够简化所有之前的算法才发明的。

在我们总结词嵌入学习算法之前,有一件更优先的事,我们会简单讨论一下。
在这里插入图片描述

就是说,我们以上面这个特制的表格作为例子来开始学习词向量,我们说,第一行的嵌入向量是来表示Gender的,第二行是来表示Royal的,然后是是Age,在之后是Food等等。但是当你在使用我们了解过的算法的一种来学习一个词嵌入时,例如我们之前提到的GloVe算法,会发生一件事就是你不能保证嵌入向量的独立组成部分是能够理解的,为什么呢?
在这里插入图片描述

假设说有个空间,里面的第一个轴是Gender,第二个轴是Royal,你能够保证的是第一个嵌入向量对应的轴是和这个轴(上面提到的第一和第二基轴)有联系的,它的意思可能是Gender、Royal、Age和Food。具体而言,这个学习算法会选择这个( e w , 1 e_{w,1} ew,1)作为第一维的轴,所以给定一些上下文词,第一维可能是这个轴( e w , 1 e_{w,1} ew,1),第二维也许是这个(上图最左),或者它可能不是正交的,它也可能是第二个非正交轴( e w , 2 e_{w,2} ew,2),它可以是你学习到的词嵌入中的第二部分。

如果你没有学过线性代数的话,如果有某个可逆矩阵 A A A,那么这项( θ i T e j \theta_i^Te_j θiTej)就可以简单地替换成 ( A θ i ) T ( A − T e j ) (A\theta_i)^T(A^{-T}e_j) (Aθi)T(ATej),因为我们将其展开:
在这里插入图片描述

不必担心,如果你没有学过线性代数的话会,和这个算法一样有一个简单证明过程。你不能保证这些用来表示特征的轴能够等同于人类可能简单理解的轴,具体而言,第一个特征可能是个Gender、Roya、Age、Food Cost和Size的组合,它也许是名词或是一个行为动词和其他所有特征的组合,所以很难看出独立组成部分,即这个嵌入矩阵的单行部分,然后解释出它的意思。尽管有这种类型的线性变换,这个平行四边形映射也说明了我们解决了这个问题,当你在类比其他问题时,这个方法也是行得通的。因此尽管存在特征量潜在的任意线性变换,你最终还是能学习出解决类似问题的平行四边形映射。

这就是词嵌入学习的内容,你现在已经了解了一些学习词嵌入的算法了,你可以在本周的编程练习里更多地运用它们。下节课讲解怎样使用这些算法来解决情感分类问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值