【第 5 部分-序列模型-第 2 周】在吴恩达深度学习视频基础上,笔记总结,添加个人理解,如有理解描述错误,请多加批评指教。后期参考 大树先生 Koala_Tree 的笔记总结进行修改,原文地址可看吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(5-2)– NLP和词嵌入- ZJ
Coursera 课程 |deeplearning.ai |网易云课堂
CSDN:http://blog.csdn.net/JUNJUN_ZHAO/article/details/79388398
上周的学习了 RNNs GRUs and LSTMs,这一部分,我们学习将那些运用在 自然语言处理中 (NLP)。
深度学习已经对这一领域带来了革命性的变革。其中很关键的一个概念是 词嵌入 (Word Embeddings),是语言表示的一种方法,可以让算法自动理解一些类似的词,比如 男人对女人 (man is to woman),国王对皇后(King is to queen)等类似的例子。
通过词嵌入的概念,就可以构建 NLP 应用了。即使你的模型中,标记的训练值较小。这周课的最后,我们会学习如何消除词嵌入的偏差,就是去除不想要的特性。或者学习算法有时候会学到的其他类型的偏差。
在前面学习的内容中,我们表征词汇是直接使用英文单词来进行表征的,但是对于计算机来说,是无法直接认识单词的。为了让计算机能够能更好地理解我们的语言,建立更好的语言模型,我们需要将词汇进行表征。下面是几种不同的词汇表征方式:
One-hot Vector:
缺点:
举个栗子 (Example):
假如你已经学习到了一种语言模型。
比如有下面这句话:
“I want a glass of orange __”
可能想到的就是 “juice”
但是看到了另一句话时,比如:
“I want a glass of apple ___”
如果算法不知道苹果和橙子的关系,就很难,从学习过的 橙子果汁,这样常见的东西或词语句子,推理出苹果果汁也是常见的东西或词语句子。
Why ?: 因为 上图中 Apple 和 Orange 两个 One -hot 向量的的内积是 0,所以没有什么意义,也就无法知道 橙子和苹果 比 橙子和国王的 更相似。
特征表征(Featurized representation):词嵌入
单词与单词之间是有很多共性的,或在某一特性上相近,比如 “苹果” 和 “橙子” 都是水果;或者在某一特性上相反,比如 “父亲” 在性别上是男性,“母亲” 在性别上是女性,通过构建他们其中的联系可以将在一个单词学习到的内容应用到其他的单词上来提高模型的学习的效率。
如上图所示,特征 比如 性别(Gender),高贵(Royal),年龄(Age),食物(Food)……等等,然后需要表示的 词,相对这些特征给出 数值化的度量。可以看到不同的词语对应着不同的特性有不同的系数值,代表着这个词语与当前特性的关系。在实际的应用中,特性的数量可能有几百种,甚至更多。
比如,Man 是一个 300 维度的向量,如上图所示,用 e5391 e 5391 来表示,其余同理。
对于单词 “orange” 和 “apple” 来说他们会共享很多的特性,比如都是水果,都是圆形,都可以吃,也有些不同的特性比如颜色不同,味道不同,但因为这些特性让 RNN 模型理解了他们的关系,也就增加了通过学习一个单词去预测另一个的可能性。(学习过 Orange juice 就可以更好的明白 Apple juice )
可视化词嵌入 (Visualizing word embeddings ):
把一个 300 维的向量,嵌入到一个 二维空间当中,这样实现可视化。
上图中圈起来的,表示聚集程度较高。相对而言,就可以看做成一个整体。特性相似,概念相似,等等,最终可以映射为相似的特征向量。
因为词性表本身是一个很高维度的空间,通过这个算法压缩到二维的可视化平面上,每一个单词 嵌入 属于自己的一个位置,相似的单词离的近,没有共性的单词离得远,这个“嵌入”的概念就是下一节的内容 词嵌 (word embeddings)。
上图中对于 “嵌入” (embeddings) 的理解,想象一个 300 维的空间,Orange 这个词的向量表示,就相当于嵌入到了 300 维空间的某个点上。为了 可视化,t-SEN 算法,将高维的空间映射到了低维空间。
学习目的:上节学习了不同单词的特征化表示,这节学习如何应用到 NLP 中。
举个栗子:(命名实体识别)
如上图所示,从 句子中,找出 Sally Johnson 这个名字,由 orange farmer 可知,Sally Johnson 是个人名,而非公司名。若是用特征化表示方法表示嵌入的向量,用词嵌入作为输入训练好的模型,就能更容易的知道,因为 orange farmer and apple farmer 是相似的,所以,Robert Lin 也是个人名。
词嵌入的迁移学习(Transfer learning and word embeddings):
有了词嵌入,就可以让我们能够使用迁移学习,通过网上大量的无标签的文本中学习到的知识,应用到我们少量文本训练集的任务中。下面是做词嵌入迁移学习的步骤:
使用词嵌入迁移学习主要通过以下三步:
可选:使用我们新的标记数据对词嵌入模型继续进行微调。(如果训练量很小就不要更新了)
词嵌入和人脸编码:
词嵌入和人脸编码之间有很奇妙的联系。在人脸识别领域,我们会将人脸图片预编码成不同的编码向量,以表示不同的人脸,进而在识别的过程中使用编码来进行比对识别。词嵌入则和人脸编码有一定的相似性。人们喜欢用 encoding 编码结果 来指代 向量 f(x(i)) f ( x ( i ) ) 。
人脸识别,就是 将一张图片,放到神经网络中,计算得出编码结果。
词嵌入,就是有一个词汇表 | V | = 10000,通过,学习算法,网络,我们学习到 e1........e10000 e 1 . . . . . . . . e 10000 学习到一个固定的编码。
但是不同的是,对于人脸识别,我们可以将任意一个没有见过的人脸照片输入到我们构建的网络中,则可输出一个对应的人脸编码。而在词嵌入模型中,所有词汇的编码是在一个固定的词汇表中进行学习单词的编码以及其之间的关系的。
之前学到了 词嵌入是如何帮助构建 NLP 应用。
此外,另一个迷人的特性是,能够帮助实现,类比推理。
提问: Man 对应 Woman ,那么 King 对应什么?
答案: Queen
So,能否有一种算法,可以自动推导出这种关系?
实现方法:
典型的向量表示 是 50 到 1000 维,这里我们用简单的 4 维表示上图词汇向量,简单表示为 eman,ewoman...... e m a n , e w o m a n . . . . . .
向量之间做相减运算:
以上可以看出来,两两之间相互的差别主要都是在 Gender 上。
所以对于上面的问题,算法所做的就是:找一个向量,使得公式两边结果相近。
正式探讨,将思想写成算法:
如上图所示:在 300 D 的空间中, man to woman and king to queen ,两个 向量 (箭头)在 Gender 这一特性中的差值相似。
Find word w : arg maxw m a x w sim( ew,eking−eman+ewoman e w , e k i n g − e m a n + e w o m a n )
注意:
余弦相似度(Cosine similarity)
最常用的相似度函数,余弦相似度。
如上图所示,夹角是 0 时,相似度就是 1 ,夹角是 90 度时,相似度就是 0 。180 度时 是 -1。因此,这就是余弦相似度 对于这种类比工作可以起到非常好的效果。
只要有足够大的语料库,就可以自主的发现上图右侧中所示例子中的模式。
接下来将学习词嵌入 这个问题具体化,当你使用算法来学习词嵌入时,实际上是学习一个嵌入矩阵。
词汇表: a aron … orange ……zulu …..
如上图所示,词嵌入向量构建 嵌入矩阵 E,(300, 10000)维度,其中 orange 是 6257 个,其向量表示如上所示 One -hot vector O6257 O 6257 ,(10000, 1) 维度
用 E 表示矩阵, E∗o6257=[]=e6257 E ∗ o 6257 = [ ] = e 6257 是个 (300,1 )维度的。
E∗oj=ej E ∗ o j = e j = embedding for word j —- 单词 j 的嵌入向量.
此节的目标就是:学习一个嵌入矩阵 E 。 E * One -hot vector 会得到 嵌入向量 (embedding vector)
下节讲述,随机化初始矩阵 E ,然后使用梯度下降法,来学习 300 * 10000 维度中的各个参数。
学习目标: 学习一些具体的算法,来学习词嵌入。
算法讲解方式,从复杂型的算法,一步步简化到简单算法,但是能达到或者有更好的效果。目前流行使用的都是简单的算法。
以上是 早期的学习词嵌入,学习 矩阵 E 的算法之一,接下来,我们来概括这个算法,从而推导出更简单的算法。
总结:本节学习了 语言模型问题,模型提出了一个机器学习问题,即 输入一些上下文,比如目标词的 前 4 个单词,然后预测出目标词。学习了提出这些问题,是怎样帮助学习词嵌入的。
下节学习,更简单的上下文,可更简单的算法来做预测。
上节见到了,如何学习一个神经语言模型,来得到更好的词嵌入。
学习内容:Word2Vec 算法,一种简单且计算更加高效的算法。
回顾 Skip-grams :
模型细节:
- 继续假设,词汇表是 10000 (有时会超过一百万)
- 我们要解决的基本的监督问题是,学习一种映射关系,如上图所示,从上下文 Context c 到——> 某个目标 target t 。
- oc o c One-hot 向量 ——>嵌入矩阵 E (乘以 oc o c ) ——> 得到嵌入向量 ec e c ——>softmax——> y^ y ^
detail:
总结: 绿色框,框起来的部分是,一个可以找到词嵌入的简化模型和神经网络。
以上是 Word2Vec 的 skip-grams 模型。
视频中一直没有给 Word2Vec 下一个明确的定义,我们再次下一个非正式定义便于理解 word2vec 是指将词语word 变成向量 vector 的过程,这一过程通常通过浅层的神经网络完成例如 CBOW 或者skip gram,这一过程同样可以视为构建词嵌表 E 的过程”。
遇到的问题:
解决方法:
在skip gram中有一个不足是softmax作为激活函数需要的运算量太大,在上限为10000个单词的词库中就已经比较
慢了。一种补救的办法是用一个它的变种“Hierachical Softmax”,通过类似二叉树的方法提高训练的效率。
下节中讲到的负采样,对于加速 softmax 和解决对上图公式分母中,整个词汇表求和的问题。
怎么对上下文 c 进行采样?
实际上 P(C) 的分布,并不是单纯的再训练集语料库上均匀且随机采样得到的,而是采用了不同的启发来平衡更常见的词。
上节学到了 skip-gram 模型如何构建一个监督学习任务,把上下文映射到目标词上,如何让你学到一个实用的词嵌入。但是缺点在于 softmax 计算起来很慢。
本节将会看到一个改善过的学习问题叫做 负采样 (Negative sampling),运用了更有效的学习算法。
在这个算法中,我们要做的就是构建一个新的监督学习问题。
如上图所示,从序列中,选取一定词距的词汇,序列顺序正确的作为 正样本,其余的 ( K 个)在字典或词汇表中,随机选取的,没有任何联系的作为负样本。
orange —— juice —— 1 (正样本)
orange —— King —— 0 (负样本)
如上图所示,x 输入, y 输出,c 上下文,t 目标词。
定义一个 logistic regression model
参数与之前的参数相同,对于每一个可能的目标词,有一个参数向量 θ θ ,以及另一个参数向量,即每一个可能上下文词的嵌入向量。
上图的下半部分为模型的神经网络结构。
总结:
重要细节:如何选取负样本?
经验值:对词频的 3/4 次方 除以整体的值,进行采样。
f(wi) f ( w i ) 是观测到的再语料库中某个英文词的词频,对词频的 3/4 次方 处理后,可以让它处于两个极端中间,即 处于 完全独立分布,和训练集的观测分布之间。
网上有开源的 训练好的 词向量,在授权允许的情况下,可以加快 NLP 问题的进展。
下节,介绍一个更简单的算法。GloVe
前面已经了解了几个关于计算词嵌入的算法,另一个在 NLP 领域有一定势头的的算法是 GloVe 算法(global vectors for word representation)虽然相比下没有Skip-grams 模型用的多,但是相比这种模型却更加简单。
GloVe Model :
GloVe 词向量模型中,要定义一个量 Xij X i j ,表示目标词 i 出现在上下文 j 的次数。模型的优化目标如下:
添加一个额外的加权项(weighting term)
另外, ΘTiej Θ i T e j 这一项中, ΘTi Θ i T 和 ej e j 都是需要学习的参数,在这个目标算法中二者是对称的关系,所以我们可以一致地初始化 Θ 和 e,然后用梯度下降来最小化输出,在处理完所有词后,直接取二者的平均值作为词嵌入向量: efinalw=ew+Θw2 e w f i n a l = e w + Θ w 2 ,这与前面的算法有所不同。
从上面的目标中,可以看出我们想要学习一些向量,他们的输出能够对上下文和目标两个词同时出现的频率进行很好的预测,从而得到我们想要的词嵌入向量。
词嵌入的特征化:
通过上面的很多算法得到的词嵌入向量,我们无法保证词嵌入向量的每个独立分量是能够让我们理解的。我们能够确定是每个分量是和我们所想的一些特征是有关联的,其可能是一些我们能够理解的特征的组合而构成的一个组合分量。使用上面的 GloVe 模型,从线性代数的角度解释如下:
加入的 A 项,可能构成任意的分量组合。
情感分类就是通过一段文本来判断这个文本中的内容是否喜欢其所讨论的内容,这是 NLP 中最重要的模块之一。
情感分类任务存在的一个问题就是只有很小的数据集,缺乏训练样本。但是在使用了词嵌入(embedding)后,即使只有中等大小标记的训练集,也能够带来很好的效果,足以训练一个良好的情感分类模型。
示例,如上图所示,对图片左侧部分的文本内容 x, 映射到 右侧对应 y 的情感等级评定。
如上图所示,是一个简单的情感分类的模型。给出一句话,使用 10000 个词的词汇表,构建一个分类器能够把它映射成输出,如 4 个星。
平均值 或 求和 的模型:
RNN 模型:
当下机器学习或者人工智能算法已经被应用到做一些非常重要的决策中,因此我们需要尽可能地保证其不受非预期形式的偏见的影响,如性别、种族歧视等等。下面介绍一些在词嵌入中消除偏见的办法。
目前的偏见问题:
如上图所示,以一些预料库中学习到的词嵌入向量,会发现学习到的词向量存在下面一些具有性别、种族等偏见,这反映了人们在历史的写作中存在的这种社会偏见。如 父亲:医生,对应 母亲:护士。
消除偏见的方法:
最后一个细节是,如何决定哪个词是中立的?该论文作者的方法是,训练一个分类器来解决,哪些词具有明确定义,哪些词是性别确定的。其结果是,大部分词都不具有性别指向。只有小部分词具有明确性别的区分。
参考文献:
[1]. 大树先生 Koala_Tree 吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(5-2)– NLP和词嵌入
PS: 欢迎扫码关注公众号:「SelfImprovementLab」!专注「深度学习」,「机器学习」,「人工智能」。以及 「早起」,「阅读」,「运动」,「英语 」「其他」不定期建群 打卡互助活动。