吴恩达《深度学习-序列模型》2 -- 自然语言处理与词嵌入

1. Word representation词汇表征

Word embeddings词嵌入

让算法自动理解同类词。
之前我们将对词的表示用的是one-shot,这种方法简单,这种表示方法的一个缺点就是,它把每个词都孤立起来了,使得其对相关词的泛化能力不强,因为任意两个one-shot向量内积都为0 ,也就是任意两个词间的距离是一样的,没有词类的概念。
举个例子,若已经学习了I want a glass of orange juice“”很可能是一个句子,但再看到“I want a glass of apple __”的时候,因为不知道orange和Apple的相近关系,所以很难从已经学习到的句子学习到 orange juice和Apple juice都是和常见的词组

词的特征化的表示:
就是列举所有可能的特征,用这些特征的值来表示一个词。
吴恩达《深度学习-序列模型》2 -- 自然语言处理与词嵌入_第1张图片
如果学习了300维的特征,然后表示到2D空间可视化显示,可以看出如下效果:
吴恩达《深度学习-序列模型》2 -- 自然语言处理与词嵌入_第2张图片
类似的词距离比较近,不同类的词距离比较远。

2. Using word embeddings

以人名实体识别为例,给出一句话:Sally Johnson is an orange farmer。我们知道Sally Johnson应该是一个人名而不是公司名之类的,因为farmer必须为一个人。如果用一个基于词嵌入训练的模型,遇到另外一句Robert Lin is an apple farmer,因为知道橘子和苹果属于一类,那么就很容易推断出Robert Lin也是一个人名,一个比较有意思的情况,如果遇到很少见的词如Robert Lin is a durian cultivator,durian cultivator这两个词都是比较少见的,如果训练集里面没有这两个词,那么预测就会很困难,但是如果有一个学习好的词嵌入,它告诉我们durian属于水果,cultivator和farmer属于一类,那么就很容易能够判断出Robert Lin是一个人名。
词嵌入能达到这样的效果,是因为学习词嵌入的算法通常会考察非常大量的无标签文本库,如1亿甚至百亿单词,其来源可以是互联网文本,通常也是可以免费下载的,所以可以利用迁移学习使用词嵌入。

基于词嵌入的迁移学习

(1)从一个很大的文本集中学习词嵌入或从网上下载学习好的词嵌入;
(2)将学习好的词嵌入应用到只有小量带标签的训练集的新任务当中;
(3)可选步,决定是否根据新任务的训练集对词嵌入进行微调,当新任务的训练集较小的时候,不推荐花费精力调整词嵌入。
迁移学习对于训练集较小的任务比较有意义,所以目前词嵌入广泛应用于NLP,如名称识别、文本摘要、文本解析、parsing等标准的NLP任务,在语言模型、机器翻译等领域应用较少,因为这些任务中有大量的数据。

词嵌入Word embadding和人脸编码face encoding

Word embadding学习的是词的编码,而face encoding学习的是人脸或图像的编码,术语embedding和encoding是可以互换的,那么区别在哪里呢?
不同:
face encoding学习的编码/特征没有范围限定,也就是预先不需要设置编码,所以任何输入都能学习他的编码;
Word embadding则有一个固定的词汇表,所以学习的编码也是固定的。

3. Properties of word embedding词嵌入的特性

词嵌入可以帮助实现类比推理。
吴恩达《深度学习-序列模型》2 -- 自然语言处理与词嵌入_第3张图片
上图是用词嵌入学习特征表示的几个词,man如果对应woman,那么king对应谁?如何让算法学习到这种推理关系?
(1)用编码向量表示各个词 eman,ewoman,eking,equeen... e m a n , e w o m a n , e k i n g , e q u e e n . . . ,注意man(5391)中5391标示的是man这个词在词汇表中的位置,向量是man的特征编码;

eman=[1,0.01,0.03,0.09]T e m a n = [ − 1 , 0.01 , 0.03 , 0.09 ] T

(2)通过编码向量找到与 ekingeman+ewoman e k i n g − e m a n + e w o m a n 相似性最高的词,也就是所找词 ew e w 计算方法如下: ew=(argmaxw)sim(ew,ekingeman+ewoman) e w = ( a r g m a x w ) s i m ( e w , e k i n g − e m a n + e w o m a n )
计算编码差发现:
emanewoman[2,0,0,0]T e m a n − e w o m a n ≈ [ − 2 , 0 , 0 , 0 ] T

ekingequenn[2,0,0,0]T e k i n g − e q u e n n ≈ [ − 2 , 0 , 0 , 0 ] T

也就是man和woman的主要差异在第一个参数也就是性别,而King和queen的主要差异也是性别。

最常用的相似度函数-余弦函数:

sim(u,v)=uTv||u||2||v||2 s i m ( u , v ) = u T v | | u | | 2 | | v | | 2

也可以用平方距离做相似度函数:

sim(u,v)=||uv||2 s i m ( u , v ) = | | u − v | | 2

4.Embedding matrix嵌入矩阵

应用算法学习词嵌入实际学习的是嵌入矩阵。

如果词汇表长度是10000,加上就是10001,特征为300个,那么我们要得到的矩阵E就是(300,10001),矩阵每一列代表词汇表中的一个字,通过其在词汇值表的位置来表示,即one-shot向量里面1的位置,用O来表示每个词的ont-shot向量,那么词的嵌入表示也就是编码可以这样计算:

ej=Eoj e j = E ∗ o j

j:代表词在词汇表中的位置,如orange是6257
e:表示词嵌入向量
E:嵌入矩阵
o:词的one-shot向量
这样表示是为了方便理解,实际中并不利用矩阵乘法来计算嵌入向量,因为词汇表通常很大one-shot向量也会很大,但是里面只有一个有用值,其他都为0,所以矩阵相乘大部分都是在做0乘法运算。实际中一般都直接从嵌入矩阵提取嵌入向量,如在Keras中有个embedding layer可以利用其高效的从嵌入矩阵中提取列。
下一节讲如何初始化嵌入矩阵E,并通过梯度下降学习E。

5. Learn Word embeddings

在词嵌入学习的历史上,一开始算法非常复杂,后来算法越来越简单,尤其是大数据时代,主流的算法都很简单,本节会从复杂算法讲起,以便于大家理解算法原理。

复杂算法-通过学习语言模型学习词嵌入矩阵

本节不做重点,只为了说明此类算法的理论基础
建立神经语言模型是学习词嵌入的一个好方法,具体如下:
吴恩达《深度学习-序列模型》2 -- 自然语言处理与词嵌入_第4张图片
每个单词获得其one-shot向量后,乘以嵌入矩阵E得到嵌入向量e(假设为300维),然后将所有嵌入向量作为神经网络输入,经过神经网络层之后,通过softmax层输出预测,softmax分类器输出数目与词汇表数目一致,通过输出的各词出现的概率,预测此位置最可能的词。最后利用反向传播学习各参数以及嵌入矩阵E。
这里我们用了这句话所有的词预测,实际中也可以设置一个超参数来决定用几个词来进行预测,比如4个,那么就用a glass of orange来进行下一个词的预测,用固定数目的词组成的隐藏层叫做历史窗口,因为其维度固定不受句长的影响,所以可以处理任意长度的句子。
吴恩达《深度学习-序列模型》2 -- 自然语言处理与词嵌入_第5张图片
如上图,设置超参数决定用哪些词进行预测,可以用目标词前面的4个词(目前用的最多),也可以用目标前后的4个词,目标之前一个词,或目标附近一个词。

简单方法-Word2Vec

下一节讲

另一种简单方法-GloVe词向量

第8节讲

6. Word2Vec

Word2Vec有两个版本模型,一个是skip gram模型,一个是CBow模型,continues bag-of-words连续词袋模型。skip gram模型是选择中间词然后预测两边词,而CBow是选择两边的词预测中间的词。

Skip gram

抽取上下文和目标词配对,构建监督学习问题,通过根据选定词,预测上下文,来学习词嵌入矩阵。
Skip gram就是在一定词距内随机抽取上下文,如orange,可以在上下文5个词内随机抽取一个词,选定的词orange作为context,以随机抽取的词为target。
吴恩达《深度学习-序列模型》2 -- 自然语言处理与词嵌入_第6张图片
具体步骤如下:
吴恩达《深度学习-序列模型》2 -- 自然语言处理与词嵌入_第7张图片
假设词汇表长度为10000k,选定orange为context,预测一定间距内上下文出现的词,如juice,对照词汇表确定context的one-shot向量 oc o c ,结合嵌入矩阵E,生成嵌入向量 ec e c ,然后输入softmax分类器,得到所有可能目标词在这里出现的概率 p(t|c p ( t | c ,即在c的情况下发生t的概率, θt θ t 为与输出t有关的参数。
成本函数中 y y 为target的one-shot向量, y^ y ^ 为softmax预测值。

问题:

在计算 p(t|c) p ( t | c ) 的时候,分母部分需要计算词汇表中所有词之和,当词汇表较大的时候,求和计算会比较慢。
解决方法:
- 分级softmax分类器:相当于折半查找,用一个分类树,每个节点处将所有词汇分成两份,用一个二分类如sigmoid来确定目标词是在前半部分还是后半部分,然后一级一级的分下去,直到找到这个词。实际中,一般不会使用完美平衡的分类树,通常使用率较高的词一般会放在树的浅层,使用率较低的词放在树的深层。这种方法的成本是log|v|,v是词汇表大小。
吴恩达《深度学习-序列模型》2 -- 自然语言处理与词嵌入_第8张图片
- 负采样
此方法会在下一节讨论,效率更高,推荐此方法

如何对context c采样?即如何选择c

  • 对语料库均匀随机采样,会发现有些词出现频率特别高,如the a of and to等,一般必选选择此类词作为c

7.Negative sampling负采样

简单来说就是选一组词,然后判断其是否有关联。
具体做法如下:
这里写图片描述
吴恩达《深度学习-序列模型》2 -- 自然语言处理与词嵌入_第9张图片
给出一句话,选定一个context词,然后从句子中一定间距内选择一个target词,即跟context关联的词,组成一个正样本词组,然后从字典随机选k个词和context组成负样本词组,然后建立一个监督学习

如何选择k?
小数据集,k取(5,20),数据集越大k应该越小,比如(2,5)

如何预测?
因为要预测的目标取值为0和1,所以可以用sigmoid函数,给定c和t组合情况下target为1的概率为:

P(y=1|c,t)=σ(θTtec) P ( y = 1 | c , t ) = σ ( θ t T e c )

完整流程:
吴恩达《深度学习-序列模型》2 -- 自然语言处理与词嵌入_第10张图片
输入context的one-shot向量,传递个嵌入向量E,然后两者相乘得到嵌入向量e,输出有10000(词汇表长度)种二分类可能,也就是由10000个二分类logistics回归分类器,根据与context配对的Word来确定是哪个分类器,每次计算更新k+1个二分类结果,计算量大大减少。
选择负样本的方法:
按照均匀随机分布抽样以及按照词频抽样(大量的负样本都是the of and之类的高频词)是两个极端,都不太理想,有人根据观察到的英文文本分布提出了以下方法,抽取某个词的概率为:

P(wi)=f(wi)3410000j=1f(wi)34 P ( w i ) = f ( w i ) 3 4 ∑ j = 1 10000 f ( w i ) 3 4

f(w_i)} f(w_i)} 为观测到的Word i在语料库中出现的频率,通过这种方式使得分布在两个极端之间。

现在有很多开源资源,如果想要在NLP领域取得快速进展,可以下载词向量,并在此基础上改进。

8. GloVe word vector

GloVe代表global vector for Word representation。
xij x i j :单词i出现在单词j的上下文的次数,如果定义词距为10个词,那么就会有一种能对称关系 xij=xji x i j = x j i ,如果定义词距比较小比如前面1个,那么则没有这种对称关系。
吴恩达《深度学习-序列模型》2 -- 自然语言处理与词嵌入_第11张图片
f(xij) f ( x i j ) 为加权项weighting term:
f(xij)=0 f ( x i j ) = 0 if xij=0 x i j = 0 ,是为了防止当 xij=0 x i j = 0 是出现 log(0) l o g ( 0 ) ,并定义 0log(0)=0 0 l o g ( 0 ) = 0
f(xij) f ( x i j ) 另一个作用就是控制不让常用词的权重过高,也不让低频词的权重过低,具体方法可以看论文。
另外,算法里面的 θe θ e 是对称的,作用是相似的。

9.Sentiment classification情绪分类

情绪分类的一大挑战就是标记数据较少,利用词嵌入可以达到很好的效果。

算法一

吴恩达《深度学习-序列模型》2 -- 自然语言处理与词嵌入_第12张图片
计算出各词的嵌入向量,然后对向量对应元素取均值或和,带入softmax分类器,这种方法适合任意长度的句子
缺点:没有考虑词序

算法二-RNN

吴恩达《深度学习-序列模型》2 -- 自然语言处理与词嵌入_第13张图片

10. Debiasing word embeddings词嵌入去偏

吴恩达《深度学习-序列模型》2 -- 自然语言处理与词嵌入_第14张图片
这里的偏是指偏见而不是偏差。
以性别歧视为例:
吴恩达《深度学习-序列模型》2 -- 自然语言处理与词嵌入_第15张图片

你可能感兴趣的:(深度学习)