当前位置:   article > 正文

吴恩达深度学习笔记-NLP & Word Embeddings(第14课)

吴恩达深度学习笔记-NLP & Word Embeddings(第14课)

参考博文:红色石头Will

一、词汇表征

之前的单词都是使用one-hot编码进行表示,one-hot表征单词的最大缺点是每个单词都是独立、正交的,不能知道单词之间的相似程度。

例如:
I want a glass of apple____
Iwant a glass of Orange ____
也许语言模型能够找到下一个单词是juice,但是不能学习到apple和Orange都是水果,词性相近;即学习到apple后面是juice,但是算法泛化能力差,不能推出与apple相近的orange后面也应该是juice。

在NLP中,希望算法能够掌握不同单词之间的相似程度,提高算法泛化能力。

因此,可以使用特征表征方式对单词进行编码。即使用一些列的features对单词进行量化,使用特征向量表示单词,如下图:
在这里插入图片描述
【有点类似协同过滤中电影特征的描述】
Apple和orang词性相近,所以在数值上会比较相近。在学习下面两句话时,可以根据这两个单词距离较近,通过第一句话的学习泛化到第二句话上。
I want a glass of apple____
Iwant a glass of Orange ____

特征表征方式也叫做词嵌入,直观理解就是:假设使用300个feature来量化单词,apple就会被嵌入到300维空间的某一位置,orange也会被嵌入到300维空间的某个位置,这两个单词在300维空间上的位置也许比较靠近。

二、使用词嵌入

使用特征表征方式(featurized representation)对单词编码,并构造RNN模型用于寻找句子中的人名。如下图:
在这里插入图片描述
通过学习第一句话,可以得到前面两个是人名;当我们测试第二句话时,因为apple和orange词性相近,所以也能得出这个句子前面的是人名。可以看出featurized representation优点是可以减少训练样本数目,并且使用更低维度的、更紧凑的向量来描述单词。

若句子最后两个单词是陌生单词(训练集没有这个单词)Durian cultivator(榴莲培育家),但是如果已经有了一个已经学习好的词嵌入,它会告诉你这个词组与apple farmer词性接近;这样即使训练集样本很少,也可以学习到Durian cultivator前面对应的是个人名。
这就是迁移学习的魅力,把从互联网上免费获得的大量无标签文本中学习到的知识(能够分辨Durian 、apple、orange都是水果的知识)迁移到姓名识别的任务里。

featurized representation的特性使得很多NLP任务能方便地进行迁移学习。迁移学习流程:

  • 从海量词汇库中学习词嵌入(word embeddings),或者从网上下载训练好的词嵌入。
  • 使用较少的训练样本,将词嵌入迁移到新的任务中取
  • (可选)继续使用新数据微调词嵌入

建议仅当训练样本足够大的时候,再进行上述第三步。

词嵌入和人脸识别很像,不太一样的地方是人脸图片是不固定的,可以是数据库之外的。但是词嵌入中的单词都是固定的,当出现vocabulary之外的单词会用<UNK>表示。
在这里插入图片描述

三、词嵌入的特性

词嵌入可以帮我们找到不同单词之间的类似关系,如下图:
在这里插入图片描述
在人类常识中,“Man”和“Woman”的关系类似于“King”和“Queuen”的关系。利用词嵌入就能找到这种对应的类比关系。
将“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}=

[10.010.030.09]
-
[10.020.020.01]
[2000]
emanewoman= 10.010.030.09 10.020.020.01 2000

相同的操作给到“King”和“Queuen”:
e K i n g − e Q u e u 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_{Queuen}=

[0.950.930.700.02]
-
[0.970.950.690.01]
[2000]
eKingeQueuen= 0.950.930.700.02 0.970.950.690.01 2000

可以看到计算出来的结果是比较类似的,直观的感受是这两个词之间都是存在性别上的差异,所以第一个feature值特别大,其他feature特别小。

因此,A类比于B相当于C类比于“?”,这种问题可以使用词嵌入解决。

上面的问题就是寻找某个单词与"King"的关系,就想“Man”和“Woman”之间的关系一样,列出等式:
e m a n − e w o m a n ≈ e k i n g − e ? e_{man}-e_{woman}≈e_{king}-e_{?} emanewomanekinge?

e ? ≈ e k i n g + e w o m a n − e m a n e_{?}≈e_{king}+e_{woman}-e_{man} e?eking+ewomaneman

利用相似函数,问题变成找到与 e k i n g + e w o m a n − e m a n e_{king}+e_{woman}-e_{man} eking+ewomaneman最相似的 e ? e_{?} e?

常用的相似函数是余弦相似度函数(cosine similarity),表达式为:

S i m ( u , v ) = u T ⋅ v ∣ ∣ u ∣ ∣ ⋅ ∣ ∣ v ∣ ∣ Sim(u,v)=\frac{u^T\cdot v}{||u||⋅||v||} Sim(u,v)=∣∣u∣∣∣∣v∣∣uTv
这个式子的值就是向量 u u u v v v之间夹角的余弦值。 u u u v v v夹角越小,值就越大( c o s 0 = 1 cos0=1 cos0=1)

当然也可以使用欧式距离来计算相似度,即 ∣ ∣ u − v ∣ ∣ 2 ||u−v||^2 ∣∣uv2,距离越大,相似性越小。

四、词嵌入矩阵

若某个词汇库包含了1000个单词,每个单词的特征维度是300;那么这个词嵌入矩阵维度是300x1000,用 E E E来表示这个矩阵。然后用 O O O+索引下标来表示one-hot编码,如下图所示:
在这里插入图片描述
我们想要提取orange的特征向量,用 E E E乘于 O 6 253 O_6253 O6253即可:
E 300 × 10 K ⋅ O 6257 = [ … … ] 300 × 1 = e 6257 E_{300\times10K}\cdot O_{6257}=

[]
_{300\times 1}=e_{6257} E300×10KO6257=[]300×1=e6257

但是效率不高,有很多的0乘运算。通常做法是直接从 E E E中选取第 w w w列作为 e w e_w ew即可。

五、学习词嵌入

词嵌入矩阵 E E E可以通过构建自然语言模型,运用梯度下降算法得到。

如我们的训练样本是下面这句话:

I   w a n t   a   g l a s s   o f   o r a n g e   ( j u i c e ) ————— . I\ want\ a\ glass\ of\ orange\ \underset{—————}{(juice)}. I want a glass of orange —————(juice).

想要预测单词是juice。 E E E是未知的,这几个单词的嵌入向量都可以使用 E E E o w o_w ow计算出来;我们为了学习词嵌入矩阵构建了下图的自然语言模型:
在这里插入图片描述
这个模型中 E 、 W [ 1 ] 、 b [ 1 ] 、 W [ 2 ] 、 b [ 2 ] E、W^{[1]}、b^{[1]}、W^{[2]}、b^{[2]} EW[1]b[1]W[2]b[2]都是需要学习的参数。softmax层有10000个概率输出,与词汇表包含的单词数目一致。要求正确的输出label是“juice”,所以要通过反向传播修改参数 E 、 W [ 1 ] 、 b [ 1 ] 、 W [ 2 ] 、 b [ 2 ] E、W^{[1]}、b^{[1]}、W^{[2]}、b^{[2]} EW[1]b[1]W[2]b[2]。当有足够的训练样本,就可以通过优化算法学习出嵌入矩阵 E E E了。

未来保证神经网络输入维度固定,可以设置一个超参数:窗口值;窗口值指的是只看几个单词就进行预测。

如我们设置窗口值为4,只看前面4个单词即可:

  • c o n t e x t : a   g l a s s   o f   o r a n g e context:a\ glass\ of\ orange contexta glass of orange
  • t a r g e t : j u i c e target:juice targetjuice

c o n t e x t context context选择多种多样:

    1. target的前/后4个词
    1. 只看target附近的的1个词,如只看 g l a s s glass glass
    1. 只看target的前一个词,如只看 o r a n g e orange orange

如果想要构建自然语言模型,一般选取目标词的前几个单词作为 c o n t e n t content content
若目标是学习 E E E,那么其他的 c o n t e x t context context选取方式都能得到不错的嵌入矩阵 E E E

六、Word2Vec

下面介绍Skip-Gram模型:

以下面这个句子为例:
I want a glass of orange juice to go along with my cereal.

Skip-Gram模型做的是:
先随机选取一个单词作为 c o n t e x t context context,比如选择了 o r a n g e orange orange;然后自定义一个范围,比如±10,在这个范围内随机选取一个单词作为 c o n t e x t context context,可以是 j u i c e 、 g l a s s juice、glass juiceglass或者是 m y my my,假设选取的是 j u i c e juice juice。这样就构建了从 o r a n g e orange orange j u i c e juice juice的监督学习样本

采用上节课的自然语言模型,经过softmax层的输出为:
P ( t a r g e t ∣ c o n t e x t ) = y ^ = e θ t T ⋅ e c ∑ j = 1 10000 e θ j T ⋅ e c P(target|context)=\hat{y}=\frac{e^{θ^T_{t}\cdot e_c}}{\sum^{10000}_{j=1}e^{θ^T_{j}\cdot e_c}} P(targetcontext)=y^=j=110000eθjTeceθtTec

  • θ t T θ^T_{t} θtT表示为 t a r g e t target target的参数
  • e c e_c ec表示为 c o n t e n t content content的嵌入向量
  • e c = E ⋅ o c e_c=E\cdot o_c ec=Eoc

对应损失函数为:
L ( y ^ , y ) = − ∑ i = 1 10000 y i ⋅ l o g y ^ i L(\hat{y},y)=-\sum\limits_{i=1}^{10000} {y_i\cdot log \hat{y}_i} L(y^,y)=i=110000yilogy^i

优化这个损失函数,就会得到一个不错的词嵌入举证 E E E

但是在计算 y ^ \hat{y} y^的时候,softmax的输出是10000个,所以分母计算量很大。解决的方式之一是使用hierarchical softmax classifier(分层softmax分类器);即在输出的时候采用二分类的方式逐层找到输出的值。分层softmax分类器输出可以如下图所示,一般是哈夫曼树:
在这里插入图片描述

Skip-Gram模型中随机采样的缺点:
the、of、a等此类单词出现频率高,因此会有很多时间都花在这些常用词身上,我们更希望能够花时间在apple、juice、orange这些词上。实际应用中,一般不选择随机均匀采样的方式来选择context,而是使用其它算法来处理这类问题。

七、负采样

Negative sampling(负采样)是另一种有效求解 E E E的方法。

它做法是选取一个正样本对,其label设置为y=1;如选取“orange”作context 、“juice”作target ;再选取k个负样本对,其label设置为y=0;如下图所示:

在这里插入图片描述
一般k的选取要满足:

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

接下来将原来的softmax的10000个输出看作是10000个二分类问题,使用sigmoid的就能解决。
则这10000个二分类输出的值含义为:
P ( y = 1 ∣ c , t ) = σ ( θ t T ⋅ e c ) P(y=1|c,t)=σ(θ^T_t⋅e_c) P(y=1∣c,t)=σ(θtTec)
即当选定 c o n t e n t content content t a r g e t target target时,y=1的概率。
在训练时,只更新这k+1个二分类问题分支,其余10000-(k+1)节点不管。negative sampling转化为k+1个二分类问题,计算量要小很多,大大提高了模型运算速度。

如何随机抽取负样本?
可以根据单词出现的频率进行选择,单词抽取概率公式为:
P ( w i ) = f ( w i ) 3 4 ∑ j 10000 f ( w i ) 3 4 P(w_i)=\frac{f(w_i)^{\frac{3}{4}}}{\sum ^{10000}_jf(w_i)^{\frac{3}{4}}} P(wi)=j10000f(wi)43f(wi)43

  • f ( w i ) f(w_i) f(wi)为单词 w i w_i wi出现的频率。

八、GloVe词向量

【没听懂,待完善,此部分来自红色石头Will博客

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}≠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\limits_{i=1}^{10000} \sum\limits_{j=1}^{10000} {(θ^T_ie_j−logX_{ij})^2} L=i=110000j=110000(θiTejlogXij)2

从上式可以看出,若两个词的embedding vector越相近,同时出现的次数越多,则对应的loss越小。

为了防止出现“log 0”,即两个单词不会同时出现,无相关性的情况,对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\limits_{i=1}^{10000} \sum\limits_{j=1}^{10000} {f(X_{ij})(θ^T_ie_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)也小,可采取其他的取值方式,具体的权重因子 f ( X i j ) f(X_{ij}) f(Xij)选取方法可查阅相关论文资料。

值得注意的是,参数 θ i θ_i θi e j e_j ej是对称的。使用优化算法得到所有参数之后,最终的 e w e_w ew可表示为:
e w = e w + θ w 2 e_w=\frac{e_w+θ_w}{2} ew=2ew+θw

最后提一点的是,无论使用Skip-Gram模型还是GloVe模型等等,计算得到的embedding matrix E E E的每一个特征值不一定对应有实际物理意义的特征值,如gender,age等。

九、情绪分类

情绪分类:根据一句话来判断其喜爱程度。例如外卖后的服务反馈,如下图:
在这里插入图片描述

上图的情绪分类问题就是寻找一句话( x x x)到喜爱程度( y y y)的映射。

情绪分类问题的主要问题是缺失足够多的训练样本,但词嵌入(迁移学习)可以解决训练样本不够的问题。

使用词嵌入的情感问题模型结构如下:
在这里插入图片描述
我们想要判断The dessert is excellent这句话的情绪分(1-5分)。

和之前一样,将各单词的one-hot编码与 E E E相乘得到各单词的嵌入向量 e w e_w ew;然后将所以单词的嵌入向量 e w e_w ew相加取平均,平均后的结果向量作为softmax函数的输入,最后输出1-5分的预测值 y ^ \hat{y} y^

取平均这个做法存在问题,如下面这句话:

Completely lacking in good taste, good service, and good ambience.

有很多的good,平均后情绪会偏向好的情感。但是前面有个否定词lacking,这样预测的结果就会相反了。

为了解决这个问题,采用RNN情感分类模型,模型结构如下图所示:

在这里插入图片描述

只在最后一个时间步输出情感分类;该RNN模型是典型的many-to-one模型,考虑单词出现的次序,能够有效识别句子表达的真实情感。值得一提的是使用word embedding,能够有效提高模型的泛化能力,即使训练样本不多,也能保证模型有不错的性能。

十、词嵌入去除偏见

词嵌入存在性别、宗教、种族上的一些偏见。
例如:
人们在寻找Man:Computer programmer相类比的Woman:“?”时;结果是Homemaker。很明显,这存在着偏见,因为Man和Woman都可以是Computer programmer。

以性别为例子,如何消除词嵌入中的偏见呢?【红色石头Will

在这里插入图片描述
首先,确定偏见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})+⋯) biasdirection=N1((eheeshe)+(emaleefemale)+)

然后,单词中立化(Neutralize)。将需要消除性别偏见的单词投影到non-bias direction上去,消除bias维度,例如babysitter,doctor等。

在这里插入图片描述
最后,均衡对(Equalize pairs)。让性别对立单词与上面的中立词距离相等,具有同样的相似度。例如让grandmother和grandfather与babysitter的距离同一化。

在这里插入图片描述
值得注意的是,掌握哪些单词需要中立化非常重要。一般来说,大部分英文单词,例如职业、身份等都需要中立化,消除embedding vector中性别这一维度的影响。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/366287
推荐阅读
相关标签
  

闽ICP备14008679号