【吴恩达深度学习笔记】5.2自然语言处理与词嵌入Natural Language Processing and Word Embeddings

第五门课 序列模型(Sequence Models)

2.1词汇表征(Word Representation)

词嵌入(word embeddings)是语言表示的一种方式,可以让算法自动的理解一些类似的词。之前一直用one-hot向量来表示词。如果man在词典里是第5391个,就可以表示成一个向量,只在第5391处为1,用 O 5391 O_{5391} O5391代表这个量, O O O代表one-hot。这种表示方法的缺点是把每个词孤立起来,使得算法对相关词的泛化能力不强,因为任何两个向量的内积结果都为0。使用特征化表示这些词的结果会更好。
在这里插入图片描述
假设有300个不同的特征,可以组成一个300维的向量表示man这个词,用 e 5391 e_{5391} e5391这个符号表示。
在这里插入图片描述
如果能够学习到一个300维的特征向量,或者说300维的词嵌入,可以把这300维的数据嵌入到一个二维空间里,这样就可以可视化了。常用的可视化算法是t-SNE算法,来自于Laurens van der Maaten 和 Geoff Hinton的论文。

2.2使用词嵌入(Using Word Embeddings)

如果对于一个命名实体识别任务,只有一个很小的标记的训练集,训练集里可能没有durian(榴莲)或者cultivator(培育家)这两个词。但是如果有一个已经学好的词嵌入,它会告诉你durian(榴莲)是水果,就像orange(橙子)一样,cultivator(培育家)是做培育工作的人跟farmer(农民)差不多。词嵌入能够达到这种效果其中一个原因就是学习词嵌入的算法会考察非常大的文本集。尽管只有一个很小的训练集,但可以使用迁移学习,把从互联网上免费获得的大量的无标签文本中学习到的知识,能够分辨orange(橙子)、apple(苹果)和durian(榴莲)都是水果的知识,迁移到一个任务中。
在这里插入图片描述
词嵌入在语言模型、机器翻译领域用的少一些。

2.3词嵌入的特性(Properties of word Embeddings)

词嵌入还有一个迷人的特性就是它还能帮助实现类比推理,尽管类比推理可能不是自然语言处理应用中最重要的,不过它能帮助理解词嵌入做了什么,以及词嵌入能够做什么。

如果已知man对应woman,想找出king对应的词(queen),即 e m a n − e w o m a n ≈ e k i n g − e w e_{man}-e_{woman}\approx e_{king}-e_w emanewomanekingew,即 F i n d   w o r d   w : a r g m a x   S i m ( e w , e k i n g − e m a n + e w o m a n ) Find\space word\space w:argmax\space Sim(e_w,e_{king}-e_{man}+e_{woman}) Find word w:argmax Sim(ew,ekingeman+ewoman)。最常用的相似度函数是余弦相似度。在余弦相似度中,假如 u u u v v v之间定义相似度: s i m ( u , v ) = u T v ∣ ∣ u ∣ ∣ 2 ∣ ∣ v ∣ ∣ 2 = c o s ( θ ) sim(u,v)=\frac{u^Tv}{||u||_2||v||_2}=cos(\theta) sim(u,v)=u2v2uTv=cos(θ)

该式是 u u u v v v夹角 θ \theta θ的余弦值,夹角为0时余弦相似度为1,夹角为90°时余弦相似度为0。

参考文献:Mikolov T, Yih W T, Zweig G. Linguistic regularities in continuous space word representations[J]. In HLT-NAACL, 2013.

2.4嵌入矩阵(Embedding Matrix)

当应用算法来学习词嵌入时,实际上是学习一个嵌入矩阵。
在这里插入图片描述
假如说有某个单词w, e w e_w ew代表单词w的嵌入向量。 O j O_j Oj是只有第 j j j个位置是1的one-hot向量, E ⋅ O j = e j E·O_j=e_j EOj=ej e j e_j ej表示字典中单词 j j j的嵌入向量。实践中用大量的矩阵和向量相乘来计算嵌入向量效率是很低的,因为one-hot向量是一个维度非常高的向量,并且几乎所有元素都为0。所以在实践中会使用一个专门的函数来单独查找矩阵 E E E的某列,而不是用通常的矩阵乘法来做。

2.5学习词嵌入(Learning Word Embeddings)

本节要学习一些具体的算法来学习词嵌入。建立一个语言模型是学习词嵌入的好方法,通过建立神经网络来预测序列中的下一个单词。
在这里插入图片描述
更常见的是有一个固定的历史窗口,比如想预测给定四个单词后的下一个单词,这里4是算法的超参数。这就是如何适应很长或者很短的句子,只使用一个4个词的历史窗口,神经网络会输入一个1200(300×4)维的特征变量,然后通过softmax来预测输出。这个模型的参数就是矩阵,对所有的单词用的都是同一个矩阵,而不是对应不同的位置上的不同单词用不同的矩阵。权重(上图编号5所示)也都是算法的参数,可以用反向传播来进行梯度下降来最大化训练集似然,通过序列中给定的4个单词去重复地预测出语料库中下一个单词什么。
在这里插入图片描述
如果想建立一个语言模型,用目标词的前几个单词作为上下文是常见做法(上图编号9所示)。但如果目标是学习词嵌入,那么你就可以用这些其他类型的上下文(上图编号10所示)。

2.6Word2Vec

上节讲述了如何学习一个神经语言模型来得到更好的词嵌入,本节介绍Word2Vec算法,一种简单且计算时更加高效的方式来学习这种类型的嵌入。在Skip-Gram模型中,要做的是抽取上下文和目标词配对,来构造一个监督学习问题。上下文不一定是目标单词之前离得最近的n个单词。需要随机选一个词作为上下文词。

我们要解决的基本的监督学习问题是学习一种映射关系,从上下文c到某个目标词t。使用 O c O_c Oc表示上下文词的one-hot向量,用嵌入矩阵 E E E乘向量 O c O_c Oc得到输入的上下文词的嵌入向量 e c e_c ec,将 e c e_c ec喂入一个softmax单元,softmax单元要做的就是输出 y ^ \hat y y^。softmax模型要预测不同目标词的概率: S o f t m a x : p ( t ∣ c ) = e θ t T e c ∑ j = 1 10000 e θ j T e c Softmax:p(t|c)=\frac{e^{\theta^T_te_c}}{\sum^{10000}_{j=1}e^{\theta^T_je_c}} Softmax:p(tc)=j=110000eθjTeceθtTec

θ t \theta _t θt是一个与输出 t t t有关的参数,即某个词 t t t和标签相符的概率是多少。此处省略了softmax中的偏差项,想要加上的话也可以加上。用 y y y表示目标词, y y y y ^ \hat y y^都是用one-hot表示的,softmax的损失函数为: L ( y ^ , y ) = − ∑ i = 1 10000 y i l o g y ^ i L(\hat y,y)=-\sum^{10000}_{i=1}y_ilog\hat y_i L(y^,y)=i=110000yilogy^i

如果优化关于所有这些参数的损失函数就会得到一个较好的嵌入向量集,这个就叫Skip-Gram模型。它把一个像orange这样的词作为输入,并预测这个输入词,从左数或从右数的某个词,预测上下文词的前面一些或者后面一些是什么词。这个算法存在计算速度问题。在softmax模型中需要对你词汇表中的所有10000个词做求和计算,这个分母的求和操作是相当慢的,所以扩大词汇表就更加困难了。解决方案是分级(hierarchical)的softmax分类器和负采样(Negative Sampling)。使用一个分级的softmax分类器类似于二分搜索,而负采样类似于优先队列。
在这里插入图片描述
以上就是Word2Vec的Skip-Gram模型,实际上有两个不同版本的Word2Vec模型,Skip-Gram是其中的一个,另一个叫CBOW,即连续词袋模型(Continuous Bag-Of-Words Model),它获得中间词两边的的上下文,然后用周围的词去预测中间的词。CBOW是从原始语句推测目标字词;而Skip-Gram正好相反,是从目标字词推测出原始语句。CBOW对小型数据库比较合适,而Skip-Gram在大型语料中表现更好。 (下图左边为CBOW,右边为Skip-Gram)
在这里插入图片描述
参考文献:Mikolov T, Chen K, Corrado G, et al. Efficient Estimation of Word Representations in Vector Space[J]. Computer Science, 2013.

2.7负采样(Negative Sampling)

上节介绍了Skip-Gram模型构造一个监督学习任务,把上下文映射到了目标词上,它的缺点在于softmax计算起来很慢。负采样能做到Skip-Gram模型相似的事,但是用了一个更加有效的学习算法。在这个算法中要做的是构造一个新的监督学习问题,给定一对单词,预测这是否是一对上下文词-目标词(context-target)。

生成输入数据 x x x(包括context和word)的方式是选择一个上下文词和一个目标词,并给定标签为1作为正样本,然后从字典随机选取的词标记为0,作为负样本,负样本的数量为 K K K。小数据集 K K K从5-20比较好。如果数据集很大, K K K就选的小一点。对于更大的数据集 K K K就等于2-5,数据集越小 K K K越大。
在这里插入图片描述
为了定义模型,使用记号 c c c表示上下文词,记号 t t t表示可能的目标词,用 y y y表示0和1,表示是否是一对上下文-目标词。定义一个逻辑回归模型,给定输入的 c 、 t c、t ct对的条件下, y = 1 y=1 y=1的概率,即: P ( y = 1 ∣ c , t ) = σ ( θ t T e c ) P(y=1|c,t)=\sigma(\theta^T_te_c) P(y=1c,t)=σ(θtTec)

这个模型基于逻辑回归模型,不同的是将一个sigmoid函数作用于 θ t T e c \theta^T_te_c θtTec,参数和之前一样,对每一个可能的目标词有一个参数向量 θ t T \theta^T_t θtT和另一个参数向量 e c e_c ec,即每一个可能上下文词的的嵌入向量,用这个公式估计 y = 1 y=1 y=1的概率。如果有 K K K个样本,可以看作 1 K \frac{1}{K} K1的正负样本比例,即每一个正样本你都有 K K K个对应的负样本来训练一个类似逻辑回归的模型。本算法只需更新 K + 1 K+1 K+1个逻辑单元, K + 1 K+1 K+1个二分类问题,相对而言每次迭代的成本比更新10000维的softmax分类器成本低。这就是负采样。

如何选取负样本?

  • 对中间的这些词进行采样,即候选的目标词,通过词出现的频率对其进行采样。问题是这会导致在the、of、and此类词上有很高的频率。
  • 用1除以词汇表总词数,即 1 ∣ v ∣ \frac{1}{|v|} v1,均匀且随机地抽取负样本,这对于英文单词的分布是非常没有代表性的。
  • 不用经验频率,也就是实际观察到的英文文本的分布,也不用均匀分布,采用以下方式采样: P ( w i ) = f ( w i ) 3 4 ∑ j = 1 10000 f ( w i ) 3 4 P(w_i)=\frac{f(w_i)^{\frac{3}{4}}}{\sum^{10000}_{j=1}f(w_i)^{\frac{3}{4}}} P(wi)=j=110000f(wi)43f(wi)43 f ( w i ) f(w_i) f(wi)是观测到的在语料库中的某个英文词的词频,通过 3 4 \frac{3}{4} 43次方的计算,使其处于完全独立的分布和训练集的观测分布两个极端之间。

参考文献:Mikolov T, Sutskever I, Chen K, et al. Distributed Representations of Words and Phrases and their Compositionality[J]. 2013, 26:3111-3119.

2.8GloVe词向量(Glove Word Vectors)

GloVe算法并不如Word2Vec或是Skip-Gram模型用的多,可能是因为它比较简便。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 t c X_{ij}=X_{tc} Xij=Xtc。对于GloVe算法可以定义上下文和目标词为任意两个位置相近的单词, X i j X_{ij} Xij是一个能够获取单词和单词出现位置相近时或是彼此接近的频率的计数器。GloVe模型做的就是进行优化,将他们之间的差距进行最小化处理: m i n i m i z e ∑ i = 1 10000 ∑ j = 1 10000 f ( X i j ) ( θ i T e j + b i + b + j ′ − l o g X i j ) 2 minimize\sum^{10000}_{i=1}\sum^{10000}_{j=1}f(X_{ij})(\theta^T_ie_j+b_i+b+j'-logX_{ij})^2 minimizei=110000j=110000f(Xij)(θiTej+bi+b+jlogXij)2

f ( X i j ) f(X_{ij}) f(Xij)为额外的加权项,有两个作用:

  • X i j = 0 X_{ij}=0 Xij=0时,约定 0 l o g 0 = 0 0log0=0 0log0=0,是一个不相关项,求和仅是一个上下文和目标词关系里连续出现至少一次的词对的和
  • 不给频繁词(this,is,of,a)过分的权重,也不给不常用词(durion)太小的权值

θ \theta θ e e e是完全对称的, θ i \theta_i θi e j e_j ej就是对称的,给定一个词 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

在这里插入图片描述

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

2.9情感分类(Sentiment Classification)

情感分类一个最大的挑战是标记的训练集没有那么多。采用词嵌入能够带来更好的效果,尤其是只有很小的训练集时。
在这里插入图片描述
上图算法有一个问题是没考虑词序,用RNN做情感分类:
在这里插入图片描述

2.10词嵌入除偏(Debiasing Word Embeddings)

现在机器学习和人工智能算法正渐渐地被信任用以辅助或是制定极其重要的决策,因此需要确保它们不受非预期形式偏见影响,如性别歧视、种族歧视等。本节讲述词嵌入中一些有关减少或是消除这些形式的偏见的办法。辨别出与这个偏见相似的趋势有以下三个步骤:

  1. 确定偏见趋势。偏见趋势可以将它看做1D子空间,无偏见趋势是299D的子空间
  2. 中和步骤。对于定义不确切的词可以将其处理一下,避免偏见。
  3. 均衡步
    在这里插入图片描述
    参考文献:The debiasing algorithm is from Bolukbasi et al., 2016.Man is to Computer Programmer as Woman is to Homemaker? Debiasing Word Embeddings
    The GloVe word embeddings were due to Jeffrey Pennington, Richard Socher, and Christopher D. Manning. (链接)

错题

GloVe算法目前没搞懂

  1. embedding matrix就是词预测任务中的一个by-product,是根据train data构造出来的。即使训练后的模型用在test data上效果不好也没关系,关键在于训练出了一个根据train data中word的词嵌入矩阵。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值