吴恩达深度学习第五课--第二周自然语言处理与词嵌入

一、词嵌入

1、词嵌入

1.1、意义–词汇表征

上一节中通过词汇表向量将单词转化为一个个独立编码,都是向量,且这些向量之间的内积为0,这样就无法知道词汇间的相似性,为了掌握不同单词之间的相似程度,则使用特征表征的方法对每个单词进行编码,上诉的方法又叫单词嵌入。

  • 如何进行单词嵌入?

特征表征的每个元素都是对该单词某一特征的量化描述,量化范围是[-1,1]之间。如下所示:
在这里插入图片描述

  • 使用单词嵌入的优点

根据向量能清晰知道不同单词之间的相似度,提高了有限词汇量的泛化能力,这种特征化单词的操作称为单词嵌入。

  • 单词嵌入的特征

每个单词都由高纬度特征向量表征,为了可视化不同单词之间的相似性,可以使用降维操作,例如t-SNE算法,将nD维降到2D平面上。如图所示:
在这里插入图片描述

  • 简单的理解:把单词表示成向量,然后运用旧向量去预测新向量,进而预测出新的单词。

1.2、词嵌入的特性–类比推理

例子,特征维度是4维,分别是[Gender, Royal, Age, Food]。单词“Man”与“Woman”的关系类比于“King”与“Queen”的关系,可以利用词嵌入找到这样的对应类比关系。
做法:
将“Man”的词嵌入向量与“Woman”的词嵌入向量相减:
e m a n − e w o m a n = [ − 1 0.01 0.03 0.09 ] − [ − 1 0.02 0.02 0.01 ] ≈ [ − 2 0 0 0 ] e_{man}-e_{woman}=\begin{bmatrix} -1 \\ 0.01 \\0.03\\0.09 \end{bmatrix}-\begin{bmatrix} -1 \\ 0.02 \\0.02\\0.01 \end{bmatrix} \approx \begin{bmatrix} -2 \\ 0 \\0\\0 \end{bmatrix} emanewoman=10.010.030.0910.020.020.012000
类似地,将将“King”的词嵌入向量与“Queen”的词嵌入向量相减:
e k i n g − e q u e e n = [ − 0.95 0.93 0.70 0.02 ] − [ 0.97 0.95 0.69 0.01 ] ≈ [ − 2 0 0 0 ] e_{king}-e_{queen}=\begin{bmatrix} -0.95 \\ 0.93 \\0.70\\0.02 \end{bmatrix}-\begin{bmatrix} 0.97 \\ 0.95 \\0.69\\0.01 \end{bmatrix} \approx \begin{bmatrix} -2 \\ 0 \\0\\0 \end{bmatrix} ekingequeen=0.950.930.700.020.970.950.690.012000
一般地,A类比于B相当于C类比于?,这类问题可用词嵌入进行运算,如下图:
在这里插入图片描述
根据等式 e m a n − e w o m a n ≈ e k i n g = e ? e_{man}-e_{woman}\approx e_{king}=e_? emanewomaneking=e?得:
e ? = e k i n g − e m a n + e w o m a n e_? = e_{king}-e_{man}+e_{woman} e?=ekingeman+ewoman
利用相似函数,计算与 e k i n g − e m a n + e w o m a n e_{king}-e_{man}+e_{woman} ekingeman+ewoman相似性最大的 e ? e_? e?,得到 e ? = e q u e e n e_?=e_{queen} e?=equeen
常用的相似函数为余弦相似度度,其表达式为:
S i m ( u , v ) = u T v ∣ ∣ u ∣ ∣ ∣ ∣ v ∣ ∣ Sim(u,v)=\frac{u^Tv}{||u|| ||v||} Sim(u,v)=uvuTv
还可以用欧式距离来比较相似性,即||u-v||^2。距离越大,相似性越小。

1.3、词嵌入矩阵

例子,某个词汇库包含10000个单词,每个单词包含的特征维度为300,那么表征所有单词的词嵌入矩阵维度为300X10000,用E表示。某单词w的独热编码向量表示为 O w O_w Ow,维度为10000x1,则该单词的词嵌入向量 e w e_w ew表达式为:
e w = E ∗ O w e_w=E*O_w ew=EOw
上诉矩阵乘积运算 E ∗ O w E*O_w EOw效率并不高,矩阵维度很大,且 O w O_w Ow大部分元素为零,通常做法是直接从E中选取第w列作为 e w e_w ew即可。

1.4、学习词嵌入

例子,输入一句话:I want a glass of orange (juice)。通过这句话前6个单词,预测最后的单词“juice”。每个单词可用词嵌入向量表示。构建的神经网络模型结果如下图所示:
在这里插入图片描述
神经网络包含6个词嵌入向量,每个词嵌入向量维度是300,则输入层总共有1800个输入,softmax层有10000个概率输出,与词汇表包含的单词数目一致。正确的输出label是“juice”,其中 E , W [ 1 ] , b [ 1 ] , W [ 2 ] , b [ 2 ] E,W^{[1]},b^{[1]},W^{[2]},b^{[2]} E,W[1],b[1],W[2],b[2]为待求值。对足够的训练例句样本,运用梯度下降算法,迭代优化,最终求出词汇矩阵E。
为了让神经网络输入层固定,可以选择只取预测单词的前4个单词作为输入,例如该句中只选择“a glass of orange”四个单词作为输入。
一般,我们把输入叫做context,输出叫做target。

  • context:a glass of orange
  • target:juice

关于context的选择有多种方法:

  • target前n个单词或后n个单词,n可调
  • target前1个单词
  • target附件某1个单词(skip-gram)

1.5、word2vec

aj. I want a glass of orange juice to go along with my cereal。
skip-gram模型的做法:首先选择一个单词作为context,例如“orange”,然后使用一个宽度为5或10的滑动窗,在context附近选择一个单词作为target,可以是juice、glass、my等等,最终得到了多个context-target对作为监督式学习样本。
训练的过程是构建自然语言模型,经过softmax单元的输出为:
y ^ = e θ t T e c ∑ j = 1 10000 e θ j T e c \hat y=\frac{e^{\theta_t^T e_c}}{\sum_{j=1}^{10000}e^{\theta_j^T e_c}} y^=j=110000eθjTeceθtTec
其中, θ t \theta_t θt为target对应的参数, e c e_c ec为context的词嵌入向量,且 e c = E O c e_c=EO_c ec=EOc,相应的loss function为:
L ( y ^ , y ) = − ∑ i = 1 10000 y i l o g y ^ i L(\hat y,y)=-\sum_{i=1}^{10000}y_ilog{\hat y_i} L(y^,y)=i=110000yilogy^i
然后运用梯度下降算法,迭代优化,最终得到词嵌入矩阵E。
然而,这种算法计算量大,影响运算速度,主要因为softmax输出单元为10000个, y ^ \hat y y^计算公式中包含大量的求和运算,解决办法之一是使用hierarchical softmax classifier,即树形分类器,其结构如下图所示:
在这里插入图片描述
这种树形分类器是一种二分类,与之前的softmax分类器不同,它在每个树节点上对目标单词进行区间判断,最终定位到目标单词。这种树形分类器最多需要logN步就能找到目标单词,N为单词总数。
实际应用中,对树形分类器做了一些改进,改进后的树形分类器是非对称的,通常选择把比较常用的单词放在树的顶层,而把不常用的单词放在树的底层,这样更能提高搜索速度。
除此之外,关于context采样,需要注意的是如果使用均匀采样,那么一些常用的介词、冠词,例如the,of,a,and,to等出现的概率更大一些,但是,这些单词的词嵌入向量通常不是我们最关心的,我们更关心例如orange、apple、juice等名词,所以,实际应用中,一般不选择随机均匀采样的方式来选择context,而是使用其它算法来处理这类问题。

1.6、负采样

负采样是另外一种有效求解词嵌入向量E的方法,它的做法是判断选取的文本单词和目标单词是否构成一组正确的context-target对,一般包含一个正样本和k个负样本。一般地,固定某个context word对应的负样本个数k一般遵循:

  • 若训练样本较小,k一般选择5-20
  • 若训练样本较大,k一般选择2-5即可

在这里插入图片描述
负采样的数学模型为:
P ( y = 1 ∣ c , t ) = σ ( θ t T e c ) P(y=1|c,t)=\sigma(\theta_t^Te_c) P(y=1c,t)=σ(θtTec)
其中, θ \theta θ表示sigmoid激活函数。
负采样某个固定的正样本对应k个负样本,即模型总共包含了k+1个二分类,对比之前介绍的10000个输出单元的softmax分类,负采样转化为k+1个二分类问题,计算量要小很多,大大提高了模型运算速度。
如何选择负样本对应的target单词,可以使用随机选择的方法,根据该词出现的频率进行选择,相应的概率公式为:
P ( w i ) = f ( w i ) 3 4 ∑ j 10000 f ( w j ) 3 4 P(w_i)=\frac{f(w_i)^{\frac{3}{4}}}{\sum_j^{10000}f(w_j)^{\frac{3}{4}}} P(wi)=j10000f(wj)43f(wi)43
其中,f(w_i)表示单词w_i在单词表中出现的概率。

1.7、glove word vector

glove算法引入了一个新的参数:

  • X i j X_{ij} Xij:表示i出现在j之前的次数,即i和j同时出现的次数。

其中,i表示context,j表示target。一般,如果不限定context一定在target前面,则有对称关系 X i j = X j i X_{ij}=X_{ji} Xij=Xji,如果有限定先后,则 X i j ≠ X j i X_{ij} \neq X_{ji} Xij=Xji。接下来的讨论中,默认存在对称关系 X i j = X j i X_{ij}=X_{ji} Xij=Xji
glove模型的loss function为:
L = ∑ i = 1 10000 ∑ j = 1 10000 ( θ i T e j − l o g X i j ) 2 L=\sum_{i=1}^{10000}\sum_{j=1}^{10000}(\theta_i^Te_j-logX_{ij})^2 L=i=110000j=110000(θiTejlogXij)2
若两个词的词嵌入向量越相近,同时出现的次数越多,则对应的loss越小。
为了防止出现log0,即两个单词不会同时出现 ,无相关性的情况,对loss function引入一个权重因子 f ( X i j ) f(X_{ij}) f(Xij)
L = ∑ i = 1 10000 ∑ j = 1 10000 f ( X i j ) ( θ i T e j − l o g X i j ) 2 L=\sum_{i=1}^{10000}\sum_{j=1}^{10000}f(X_{ij})(\theta_i^Te_j-logX_{ij})^2 L=i=110000j=110000f(Xij)(θiTejlogXij)2
X i j = 0 X_{ij}=0 Xij=0时,权重因子 f ( X i j ) = 0 f(X_{ij})=0 f(Xij)=0。这种做法直接忽略了无任何相关性的context和target,只考虑 X i j > 0 X_{ij}>0 Xij>0的情况。
出现频率较大的单词相应的权重因子 f ( X i j ) f(X_{ij}) f(Xij)较大,出现频率较小的单词相应的权重因子 f ( X i j ) f(X_ij) f(Xij)较小一些,具体的权重因子 f ( x i j ) f(x_{ij}) f(xij)选取方法可查阅相关论文资料。
一般地,引入偏移量,则loss function表达式为:
L = ∑ i = 1 10000 ∑ j = 1 10000 f ( X i j ) ( θ i T e j + b i + b j ′ − l o g X i j ) L=\sum_{i=1}^{10000}\sum_{j=1}^{10000}f(X_{ij})(\theta_i^Te_j+b_i+b_j^{'}-logX_{ij}) L=i=110000j=110000f(Xij)(θiTej+bi+bjlogXij)
参数 θ i \theta_i θi e j e_j ej是对称的,使用优化算法得到所有参数之后,最终的 e w e_w ew可表示为:
e w = e w + θ w 2 e_w=\frac{e_w+\theta_w}{2} ew=2ew+θw
无论使用skip-gram模型还是glove模型等等,计算得到的词嵌入向量E的每一个特征值不一定对应有实际物理意义的特征值,如gender,age等。

1.8、例子–情感分类

情感分类一般是根据一句话来判断其喜爱程度,例如1-5星分布,如下图所示:
在这里插入图片描述
情感分类问题的一个主要挑战是缺少足够多的训练样本,而单词嵌入恰恰可以帮助解决训练样本不足的问题。
首先介绍使用单词嵌入解决情感分类问题的一个简单模型算法。
在这里插入图片描述
这句话的4个单词分别用单词向量表示, e 8928 , e 2468 , e 4694 , e 3180 e_{8928},e_{2468},e_{4694},e_{3180} e8928,e2468,e4694,e3180计算均值,这样得到的平均向量的维度仍是300,最后经过softmax输出1-5星,这种模型结构简单,计算量不大,不论句子长度多长,都使用平均的方式得到300D的词嵌入向量,该模型实际表现较好。但是,这种简单模型的缺点是使用平均方法,没有考虑句子中单词出现的次序,忽略其位置信息,而有时候,不同单词出现的次序直接决定了句意,即情感分类的结果,例如下面这句话:
Completely lacking in good taste, good service, and good ambience.
虽然这句话中包含了3个good,但其前面出现了lacking,很明显这句话句意是negative的,但是使用上面介绍的平均算法,则很可能会错误识别为positive的,因为忽略了单词出现的次序。
为了解决这一问题,情感分类的另一种模型是RNN。
在这里插入图片描述
该RNN模型是典型的many-to-one模型,考虑单词出现的次序,能够有效识别句子表达的真实情感。
值得一提的是使用词嵌入,能够有效提高模型的泛化能力,即使训练样本不多,也能保证模型有不错的性能。

1.9、词嵌入除偏

单词嵌入中存在一些性别、宗教、种族等偏见或者歧视,例如:
Man: Woman as King: Queen
Man: Computer programmer as Woman: Homemaker
Father: Doctor as Mother: Nurse
很明显,第二句话和第三句话存在性别偏见,因为woman和mother也可以是computer programmer和doctor。
例子:以性别偏见为例,来探讨如何消除单词嵌入中偏见。
在这里插入图片描述
首先,确定偏见bias的方向,方法是对所有性别对立的单词求差值,再平均,上图展示了bias direction和non-bias direction。
b i a s d i r e c t i o n = 1 N ( ( e h e − e s h e ) + ( e m a l e − e f e m a l e ) + …   ) bias direction = \frac{1}{N}((e_{he}-e_{she})+(e_{male}-e_{female})+\dots) biasdirection=N1((eheeshe)+(emaleefemale)+)
然后,单词中立化,将需要消除性别偏见的单词投影到non-bias direction上去,消除bias维度,例如babysitter,doctor等。
在这里插入图片描述
最后,均衡对,让性别对立单词与上面的中立词距离相等,具有同样的相似度。例如让grandmother和grandfather与babysitter的距离同一化。
在这里插入图片描述
值得注意的是,掌握哪些单词需要中立化非常重要,一般来说,大部分英文单词,例如职业、身份等都需要中立化,消除词嵌入中性别这一维度的影响。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值