- 作者:韩信子 @ShowMeAI
- 教程地址:http://www.showmeai.tech/tutorials/35
- 本文地址:http://www.showmeai.tech/article-detail/226
- 申明:版权所有,转载请分割平台与作者并注明出处
珍藏 ShowMeAI 查看更多精彩内容
本系列为吴恩达老师《深度学习专项课程 (Deep Learning Specialization)》学习与总结整顿所得,对应的课程视频能够在 这里 查看。
引言
在 ShowMeAI 前一篇文章 序列模型与 RNN 网络 中咱们对以下内容进行了介绍:
- 循环神经网络 RNN
- 语言模型
- 采样生成序列
- RNN 梯度隐没与梯度爆炸
- GRU(门控循环单元)
- LSTM(长短期记忆)
- 双向与深度 RNN
本篇介绍自然语言解决,文本示意与词嵌入的相干常识。
1. 词嵌入
ShowMeAI 在上一篇内容 序列模型与 RNN 网络 里介绍了基于词表 (例如 10000 大小的 vocabulary) 映射,应用 one-hot 的形式对每个单词进行编码。例如单词 Rome、Paris、Italy、France 别离呈现在词汇表的第 1、2、3、4 的地位,则示意如下:
这中 one-hot 稠密单词表征的最大毛病就是每个单词都是独立的、正交的,无奈晓得不同单词之间的语义类似与关联度。例如「橙子」和「橘子」都是水果,词性相近,然而单从 one-hot 编码上来看,内积为零,无奈晓得二者的相似性。在自然语言解决的很多工作里,咱们更心愿能更精确地对词进行向量化表征,笼罩到其语义类似度和散布个性。
换用特色化示意办法可能解决这一问题。咱们能够通过用语义特色作为维度来示意一个词,因而语义相近的词,其词向量也相近。语义特色表征的例子如下图所示:
词语义特色表征的长度能够基于场景做不同设定,通常越长能蕴含的信息越多。假设上图的词特征向量长度设定为 300。则词汇表中的每个单词都能够应用对应的 \(300 \times 1\) 的向量来示意,该向量的每个元素示意该单词对应的某个特征值。
这种特色表征的长处是依据特征向量能清晰晓得不同单词之间的类似水平,例如「橙子」和「橘子」之间的类似度较高,很可能属于同一类别。这种单词「类别」化的形式,大大提高了无限词汇量的泛化能力。这种特色化单词的操作被称为 Word Embeddings,即 单词嵌入。
在咱们以后的这个例子中,特征向量的每个特色元素含意是具体的,对应到理论特色,例如性别、年龄等。而在理论自然语言解决利用中,特征向量很多特色元素并不一定对应到有物理意义的特色,是比拟形象的。但这并不影响对每个单词进行向量化的无效表征,而且不同单词之间的相似性和散布个性也能够由向量表征计算取得。
如果咱们应用降维算法 (具体能够浏览 ShowMeAI 文章 图解机器学习 | 降维算法详解 ) 对失去的词嵌入向量解决,并在 2 维立体里进行可视化,能够直观看到词之间的散布和类似度,如下图所示
相干论文:van der Maaten and Hinton., 2008. Visualizing Data using t-SNE
一个更官网一点的定义是:词嵌入 (Word Embedding) 是 NLP 中语言模型与表征学习技术的统称,它是指把一个维数为所有词的数量的高维空间(one-hot 模式示意的词)「嵌入」到一个维数低得多的间断向量空间中,每个单词或词组被映射为实数域上的向量。
- 基于大语料库构建失去词嵌入 / 词向量,可用于实现自然语言解决中的上游各种工作(文本分类、文本类似度建模、序列标注等)。
1.1 词嵌入与迁徙学习
在 ShowMeAI 上一篇文章 序列模型与 RNN 网络 介绍的命名实体辨认例子中,每个单词采纳的是 one-hot 编码。如下图所示,因为「菜农」是份职业,能够判断晓得「王刚」是一个人名。
如果替换 one-hot 为特色化示意办法对每个字进行编码,再构建 RNN 模型。对于一个新的句子:
因为两句话中,「菜」与「果」的特征向量很靠近,很容易类比得出「张三」也是一个人名。这就是特色化示意办法的长处之一。
通过上例,咱们晓得特色化示意办法有缩小训练样本数目的长处,前提是对海量单词建设特征向量表述(word embedding)。这样,即便是训练样本中没有的单词,也能够依据 word embedding 的后果失去与其词性相近的单词,从而失去与该单词相近的后果,无效缩小了训练样本的数量。
特色化示意办法的个性使得很多 NLP 工作能不便地进行迁徙学习,办法步骤是:
- ① 从大量的文本集中学习词嵌入,或者下载网上开源的、预训练好的词嵌入模型;
- ② 将这些词嵌入模型迁徙到新的、只有大量标注训练集的工作中;
- ③ 能够抉择是否微调词嵌入。当标记数据集不是很大时能够省下这一步。
吴恩达老师倡议仅当训练样本足够大的时候,再进行上述第三步。
大家可能会留神到,这里的词嵌入,和 ShowMeAI 后面文章 CNN 利用:人脸识别和神经格调转换 里提到的人脸特色编码有很多相似性。人脸图片通过 Siamese 网络,失去其特征向量,这点跟词嵌入是相似的。
不同的中央是 Siamese 网络输出的人脸图片能够是数据库之外的;而词嵌入个别都是已建设的词汇库中的单词,非词汇库单词对立用 < UNK > 示意。
1.2 词嵌入与类比推理
词嵌入的一个利用场景是类比推理。
举个例子,咱们用 \(e_{word}\) 示意单词 word 的词嵌入向量,则给定对应关系「男性(Man)」对「女性(Woman)」,想要类比出「国王(King)」对应的词汇。
则能够有 \(e_{man} – e_{woman} \approx e_{king} – e_?\),之后的指标就是找到词向量 \(w\),来找到使类似度 \(sim(e_w, e_{king} – e_{man} + e_{woman})\) 最大。
咱们最罕用到的类似度计算函数是余弦类似度 (cosine similarity)(具体参考 ShowMeAI 文章 图解 AI 数学根底 | 线性代数与矩阵论 中距离与类似度度量局部内容)。余弦类似度计算公式为:
$$
sim(u, v) = \frac{u^T v}{|| u ||_2 || v ||_2}
$$
相干论文:Mikolov et. al., 2013, Linguistic regularities in continuous space word representations
2. 嵌入矩阵
假如构建好的词汇库 vocabulary 蕴含了 10000 个单词,每个词蕴含的特色维度为 300,那么表征所有词的嵌入矩阵 (embedding matrix) 维度为 \(300 \times 10000\),用 E 来示意。词 \(w\) 的 one-hot 向量示意为 \(O_w\) (咱们晓得其维度为 \( 10000 \times 1\) ),则该词对应的嵌入向量 (embedding vector) 能够如下计算失去:
$$
e_w=E\cdot O_w
$$
所以,一旦有了嵌入矩阵 embedding matrix (具体的计算方法在前面会提到),就能计算失去所有单词的 embedding vector。不过真的做矩阵乘积运算的效率并不高,矩阵维度很大,且大部分元素为零,理论上述矩阵运算等价于间接从中选取第 w 列作为词嵌入向量。
3. 学习词嵌入
3.1 神经概率语言模型
神经概率语言模型 (Neural Probabilistic Language Model) 构建了一个可能通过上下文来预测未知词的神经网络。嵌入矩阵 \(E\) 能够通过构建 神经概率语言模型(Neural Probabilistic Language Model),使用梯度降落优化失去。举个简略的例子,输出样本是上面这句话:
I want a glass of orange (juice).
通过这句话的前 6 个词,预测最初的词「juice」。嵌入矩阵 \(E\) 未知待求,每个单词可用嵌入向量 \(e_w\) 示意。构建的神经概率模型构造如下图所示:
神经网络输出层蕴含 6 个词嵌入向量,每个向量的维度是 300,则输出层总共是 1800 维输出。Softmax 层有 10000 个维输入(对应词表里的 10000 个词)。正确的输入 label 是「juice」。
网络中 \(E\) ,\(W^{[1]}\) ,\(b^{[1]}\) ,\(W^{[2]}\) ,\(b^{[2]}\) 为可学习的参数。在足量的语料样本下,应用梯度降落,迭代优化,最终能够失去嵌入矩阵 \(E\)。
这个工作下构建的神经网络,能无效保障具备类似属性单词的嵌入向量 embedding vector 相近。
为了简化和固定神经网络的输出,咱们能够抉择只用前 4 个单词作为输出预测下一个词,对应到本例中,是应用「a glass of orange」4 个单词作为输出。(当然,4 是超参数,依据数据量和计算资源不同,能够调整。)
个别地,咱们把输出叫做上下文 context,输入叫做 target。对应上例:
context: a glass of orange
target: juice
对于 context 的抉择有多种办法:
- target 前 \(n\) 个单词或后 n 个单词
- target 前 1 个单词
- target 左近某 1 个单词(Skip-Gram 模型就是这样做的)
上述不论哪一个办法,在数据量充沛的状况下都能失去出较精确的嵌入矩阵 embedding matrix \(E\)。
相干论文:Bengio et. al., 2003, A neural probabilistic language model
3.2 Word2Vec
在很长一段时间里,大家应用多的是 Word2Vec 这个模型,它是一种简略高效的词嵌入学习办法,包含 2 种模型:
- Skip-gram (SG):依据词预测指标上下文
- Continuous Bag of Words (CBOW):依据上下文预测指标词
这两种办法训练失去的隐层参数即是对应的词嵌入。
这部分也举荐大家学习 ShowMeAI 整顿的斯坦福 cs224n 课程课件注解与笔记:
- 词向量初步
- 词向量进阶
- 词向量、SVD 合成与 word2vec
在模型的训练阶段,又蕴含 负采样 (Negative Sampling) 和分级的 Softmax(Hierarchical Softmax)两种训练技巧办法。
相干论文:Mikolov et. al., 2013. Efficient estimation of word representations in vector space.
上面咱们来开展解说一下 Skip-gram 和 CBOW 模型:
(1) Skip-gram
Skip-gram 是一个应用中心词去预测 context 里周边词的模型,构造如图所示,从左到右是:
① 输出的中心词 One-hot 向量
② 输出乘以 center word 的矩阵 \(W\),失去词向量
③ 词向量乘以另一个 context word 的矩阵 \(W\prime\) 失去对每个词语的「类似度」
④ 对类似度得分取 Softmax 失去概率,与答案比照计算损失。
设中心词为 \(c\),该词的肯定词距内选取指标上下文 \(t\),则依据 Softmax 单元失去输入条件概率:
\(p(t|c) = \frac{exp(\theta_t^T e_c)}{\sum^m_{j=1}exp(\theta_j^T e_c)}\)
公式中 \(\theta_t\) 是一个与输入 \(t\) 无关的参数。损失函数仍选用穿插熵:
$$
L(\hat{y}, y) = -\sum^m_{i=1}y_ilog\hat{y}_i
$$
这个 Softmax 分类中,每次计算条件概率时,须要对词典中所有词做求和操作,因为词库很大,所以总的计算量很大。优化计划之一是应用一个层次化 Softmax 分类器(Hierarchical Softmax Classifier),形如二叉树。在实践中,个别对词表依据频次构建霍夫曼树(Huffman Tree),常用词在顶部。
(2) CBOW
CBOW 模型的工作形式与 Skip-gram 相同,通过上下文词来预测两头的词。
根本步骤原理如下:
吴恩达老师没有深刻去讲 CBOW。想要更深刻理解的话,也举荐大家学习 ShowMeAI 整顿的斯坦福 cs224n 课程课件注解与笔记:
- 词向量初步
- 词向量进阶
- 词向量、SVD 合成与 word2vec
(3) 负采样
为了解决词表大的状况下平铺开的 Softmax 计算量大的问题,Word2Vec 的作者提出了负例采样 (Negative Sampling) 办法。
负例采样的做法是采样选取 context 词,和 target 词构建样本,个别蕴含一个正样本和 k 个负样本。
- 例「orange」为 context word,「juice」为 target word,「orange juice」是正确的组合,相应的 target label 为 1。
- 放弃「orange」为 context word 不变,target word 随机抉择「king」、「book」、「the」或者「of」等。这些都不是适合的组合,相应的 target label 为 0。
-
个别地,固定某个 context word 对应的负样本个数 k 个别遵循:
- 若训练样本较少,k 能够抉择 5~20;
- 若训练样本较多,k 抉择 2~5 即可。
在负例采样中,调整为多个 Sigmoid 输入上下文 - 指标词 \((c,t)\) 为正样本的概率:
\(P(y=1 \mid c, t) = \sigma(\theta_t^Te_c)\)
公式其中,\(\theta_t\)、\(e_c\) 别离代表指标词和上下文的词向量。
比照原始状态,每次要更新 \(n\) 维的多分类 Softmax 单元(\( n\) 为词典中词的数量)。应用负例采样之后,每次只须要更新 \(k+1\) 维的二分类 Sigmoid 单元,计算量大大降低。
对于计算抉择某个词作为负样本的概率,能够应用随机抉择。但作者给出了如下成果更好的公式:
$$
p(w_i) = \frac{f(w_i)^{\frac{3}{4}}}{\sum^m_{j=0}f(w_j)^{\frac{3}{4}}}
$$
公式中,\(f(w_i)\) 代表语料库中单词 \(w_i\) 呈现的频率。上述公式更加平滑,可能减少低频词的选取可能。
相干论文:Mikolov et. al., 2013. Distributed representation of words and phrases and their compositionality
3.3 GloVe
GloVe(Global Vectors)是另一种风行的词嵌入算法。Glove 模型基于语料库统计了词的共现矩阵 \(X\),\(X\) 中的元素 \(X_{ij}\) 示意单词 \(i\) 和单词 \(j\)「为上下文 - 指标词」的次数。之后,用梯度降落法最小化损失函数。
共现矩阵的一个例子如下(此时左右窗长都为 1):
语料库的 3 句话如下:
like deep learning.
I like NLP.
I enjoy flying.
损失函数公式定义为:
$$
J = \sum^N_{i=1}\sum^N_{j=1}f(X_{ij})(\theta^t_ie_j + b_i + b_j – log(X_{ij}))^2
$$
公式中,\(\theta_i\)、\(e_j\) 是单词 \(i\) 和单词 \(j\) 的词向量;\(b_i\)、\(b_j\);\(f()\) 是一个用来防止 \(X_{ij}=0\) 时 \(log(X_{ij})\) 为负无穷大、并在其余状况下调整权重的函数。\(X_{ij}=0\) 时,\(f(X_{ij}) = 0\)。
「为上下文 - 指标词」能够代表两个词呈现在同一个窗口。在这种状况下,\(\theta_i\) 和 \(e_j\) 是齐全对称的。因而,在训练时能够统一地初始化二者,应用梯度降落法解决完当前取平均值作为二者独特的值。
相干论文:Pennington st. al., 2014. Glove: Global Vectors for Word Representation
最初,留神一点,应用 word2vec 或者 GloVe 等词嵌入算法学到的词向量,并不能对其中每个维度作明确的物理含意解析,但能够表征词语的散布和相近度,对上游工作也是有帮忙的。
4. 情感分类
4.1 情感剖析问题
情感分类是指剖析一段文本对某个对象的情感是侧面的还是负面的,理论利用包含舆情剖析、民意调查、产品意见调查等等。
4.2 情感剖析简略词嵌入利用
情感分类的问题之一是标记好的训练数据有余。然而有了词嵌入失去的词向量,中等规模的标记训练数据也能构建出一个成果不错的情感分类器。
如上图所示,用词嵌入办法取得嵌入矩阵 \(E\) 后,计算出句中每个单词的词向量并取平均值,输出一个 Softmax 单元,输入预测后果。
这种办法的长处是实用于任何长度的文本;毛病是没有思考词的程序,对于蕴含了多个侧面评估词的负面评估,很容易预测到谬误后果。
4.3 词嵌入 +RNN 解决情感剖析问题
应用 RNN 可能实现一个成果更好的情感分类器:
上图中的 RNN 模型是典型的「多对一」模型,因为 RNN 思考单词呈现的秩序,能更无效地进行实在情感的判断。
再配合上应用词嵌入,可能无效进步模型的泛化能力,即便训练样本不多,也能保障模型有不错的性能。
5. 词嵌入除偏
5.1 词嵌入偏见问题
语料库中可能存在性别歧视、种族歧视、性取向歧视等非预期模式偏见(Bias),这种偏见会间接反映到通过词嵌入取得的词向量。如上面的例子(自身不失当,然而可能词向量体现出这层关系):
- Man 和 Woman 类比,相当于 King 和 Queen
- Man 和 Woman 类比,相当于 Computer programmer 和 Homemaker
- Father 和 Mother 类比,相当于 Doctor 和 Nurse
上例中,显著第 2 和第 3 句话存在性别偏见,因为 Woman 和 Mother 也能够是 Computer programmer 和 Doctor。
5.2 打消词嵌入偏见的办法
上面以性别偏见为例,介绍下打消词嵌入 word embeddings 偏见的办法。
- 第 1 步,确定偏见 bias 的方向
办法是对所有性别对抗的单词求差值,再均匀。公式如下:
$$
bias\ direction=\frac1N ((e_{he}-e_{she})+(e_{male}-e_{female})+\cdots)
$$
下图展现了 bias direction 和 non-bias direction。
- 第 2 步,单词中立化(Neutralize)
将须要打消性别偏见的单词投影到 non-bias direction 下来,打消 bias 维度。例如 babysitter,doctor 等。
- 第 3 步,平衡对(Equalize pairs)
让性别对抗单词与下面的中立词间隔相等,具备同样的类似度。例如让 grandmother 和 grandfather 与 babysitter 的间隔同一化。
吴恩达老师指出,把握哪些单词须要中立化十分重要。一般来说,大部分英文单词,例如职业、身份等都须要中立化,打消词嵌入中「性别」这一维度的影响。
相干论文:Bolukbasi et. al., 2016. Man is to computer programmer as woman is to homemaker? Debiasing word embeddings
参考资料
- van der Maaten and Hinton., 2008. Visualizing Data using t-SNE
- Mikolov et. al., 2013, Linguistic regularities in continuous space word representations
- Bengio et. al., 2003, A neural probabilistic language model
- 词向量初步
- 词向量进阶
- 词向量、SVD 合成与 word2vec
- Mikolov et. al., 2013. Efficient estimation of word representations in vector space.
- Mikolov et. al., 2013. Distributed representation of words and phrases and their compositionality
- Pennington st. al., 2014. Glove: Global Vectors for Word Representation
- Bolukbasi et. al., 2016. Man is to computer programmer as woman is to homemaker? Debiasing word embeddings
ShowMeAI 系列教程举荐
- 图解 Python 编程:从入门到精通系列教程
- 图解数据分析:从入门到精通系列教程
- 图解 AI 数学根底:从入门到精通系列教程
- 图解大数据技术:从入门到精通系列教程
- 图解机器学习算法:从入门到精通系列教程
- 机器学习实战:手把手教你玩转机器学习系列
- 深度学习教程 | 吴恩达专项课程 · 全套笔记解读
举荐文章
- 深度学习教程 | 深度学习概论
- 深度学习教程 | 神经网络根底
- 深度学习教程 | 浅层神经网络
- 深度学习教程 | 深层神经网络
- 深度学习教程 | 深度学习的实用层面
- 深度学习教程 | 神经网络优化算法
- 深度学习教程 | 网络优化:超参数调优、正则化、批归一化和程序框架
- 深度学习教程 | AI 利用实际策略(上)
- 深度学习教程 | AI 利用实际策略(下)
- 深度学习教程 | 卷积神经网络解读
- 深度学习教程 | 经典 CNN 网络实例详解
- 深度学习教程 | CNN 利用:指标检测
- 深度学习教程 | CNN 利用:人脸识别和神经格调转换
- 深度学习教程 | 序列模型与 RNN 网络
- 深度学习教程 | 自然语言解决与词嵌入
- 深度学习教程 | Seq2seq 序列模型和注意力机制