共计 7948 个字符,预计需要花费 20 分钟才能阅读完成。
作者:韩信子 @ShowMeAI,路遥 @ShowMeAI,奇异果 @ShowMeAI
教程地址:http://www.showmeai.tech/tutorials/36
本文地址:http://www.showmeai.tech/article-detail/231
申明:版权所有,转载请分割平台与作者并注明出处
珍藏 ShowMeAI 查看更多精彩内容
ShowMeAI 为 斯坦福 CS224n《自然语言解决与深度学习 (Natural Language Processing with Deep Learning)》课程的全副课件,做了 中文翻译和正文,并制作成了 GIF 动图!
本讲内容的 深度总结教程 能够在 这里 查看。视频和课件等材料的获取形式见 文末。
引言
CS224n 是顶级院校斯坦福出品的深度学习与自然语言解决方向专业课程。核心内容笼罩 RNN、LSTM、CNN、transformer、bert、问答、摘要、文本生成、语言模型、浏览了解等前沿内容。
ShowMeAI 将从本节开始,依靠 cs224n 课程为主框架,逐篇为大家梳理 NLP 的外围重点常识原理。
本篇内容笼罩
第 1 课间接切入语言和词向量,解说了自然语言解决的基本概念,文本表征的办法和演进,包含 word2vec 等外围办法,词向量的利用等。
- 自然语言与文字
- word2vec 介绍
- word2vec 指标函数与梯度
- 算法优化根底
- word2vec 构建的词向量模式
1. 自然语言与词汇含意
1.1 人类的语言与词汇含意
咱们先来看看人类的高级语言。
人类之所以比类人猿更“聪慧”,是因为咱们有语言,因而是一个人机网络,其中人类语言作为网络语言。人类语言具备信息性能和社会性能。
据估计,人类语言只有大概 5000 年的短暂历史。语言和写作是让人类变得弱小的起因之一。它使常识可能在空间上传送到世界各地,并在工夫上传送。
然而,相较于现在的互联网的传播速度而言,人类语言是一种迟缓的语言。然而,只需人类语言模式的几百位信息,就能够构建整个视觉场景。这就是自然语言如此迷人的起因。
1.2 咱们如何表白一个词的意思?
咱们如何表白一个词的含意 呢?有如下一些形式:
- 用一个词、词组等示意的概念。
- 一个人想用语言、符号等来表白的想法。
- 表白在作品、艺术等方面的思维。
了解意义的最广泛的 语言形式(linguistic way):语言符号与语言意义(想法、事件)的互相对应
- denotational semantics:语义
$$
signifier(symbol) \Leftrightarrow signified(idea \quad or \quad thing)
$$
1.3 如何在计算机里表白词的意义
要应用计算机解决文本词汇,一种解决形式是 WordNet:即构建一个蕴含同义词集和上位词(“is a”关系) 的列表的辞典。
英文当中的确有这样一个 wordnet,咱们在装置完 NLTK 工具库和下载数据包后能够应用,对应的 python 代码如下:
from nltk.corpus import wordnet as wn
poses = {'n':'noun', 'v':'verb', 's':'adj (s)', 'a':'adj', 'r':'adv'}
for synset in wn.synsets("good"):
print("{}: {}".format(poses[synset.pos()], ",".join([l.name() for l in synset.lemmas()])))
from nltk.corpus import wordnet as wn
panda = wn.synset("panda.n.01")
hyper = lambda s: s.hypernyms()
list(panda.closure(hyper))
后果如下图所示:
1.4 WordNet 的问题
WordNet 大家能够视作 1 个专家经验总结进去的词汇表,但它存在一些问题:
① 疏忽了词汇的细微差别
- 例如“proficient”被列为“good”的同义词。这只在某些上下文中是正确的。
② 短少单词的新含意
- 难以继续更新!
- 例如:wicked、badass、nifty、wizard、genius、ninja、bombast
③ 因为是小局部专家构建的,有肯定的 主观性
④ 构建与调整都须要很多的 人力老本
⑤ 无奈定量计算出单词类似度
1.5 文本 (词汇) 的离散表征
在传统的自然语言解决中,咱们会对文本做离散表征,把词语看作离散的符号:例如 hotel、conference、motel 等。
一种文本的离散示意模式是把单词表征为 独热向量 (one-hot vectors) 的模式
- 独热向量:只有一个 1,其余均为 0 的稠密向量
在独热向量示意中,向量维度 = 词汇量(如 500,000),以下为一些独热向量编码过后的单词向量示例:
$$
motel = [0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 1 \ 0 \ 0 \ 0 \ 0]
$$
$$
hotel = [0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 1 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0]
$$
1.6 离散表征的问题
在上述的独热向量离散表征里,所有词向量是正交的,这是一个很大的问题。对于独热向量,没有对于相似性概念,并且向量维度过大。
对于上述问题有一些 解决思路:
- ① 应用相似 WordNet 的工具中的列表,取得类似度,但会因不够残缺而失败
- ② 通过大量数据学习词向量自身相似性,取得更准确的浓密词向量编码
1.7 基于上下文的词汇表征
近年来在深度学习中比拟无效的形式是基于上下文的词汇表征 。它的 外围想法 是:一个单词的意思是由经常出现在它左近的单词给出的 “You shall know a word by the company it keeps”(J. R. Firth 1957: 11)
。
这是古代统计 NLP 最胜利的理念之一,总体思路有点物以类聚,人以群分的感觉。
- 当一个单词 \(w\)呈现在文本中时,它的上下文是呈现在其左近的一组单词(在一个固定大小的窗口中)
- 基于海量数据,应用 \(w\)的许多上下文来构建 \(w\)的示意
如图所示,banking 的含意能够依据上下文的内容表征。
2.Word2vec 介绍
2.1 词向量示意
上面咱们要介绍词向量的构建办法与思维,咱们心愿为每个单词构建一个浓密示意的向量,使其与呈现在类似上下文中的单词向量类似。
- 词向量 (word vectors) 有时被称为 词嵌入 (word embeddings) 或词示意(word representations)。
- 浓密词向量是分布式示意(distributed representation)。
2.2 Word2vec 原理介绍
Word2vec (Mikolov et al. 2013)是一个学习词向量表征的框架。
外围思路 如下:
- 基于海量文本语料库构建
- 词汇表中的每个单词都由一个向量示意(学习实现后会固定)
- 对应语料库文本中的每个地位 \(t\),有一个中心词 \(c\)和一些上下文 (“内部”) 单词 \(o\)
- 应用 \(c\)和 \(o\)的词向量来计算概率 \(P(o|c)\),即给定中心词推断上下文词汇的概率(反之亦然)
- 一直调整词向量来最大化这个概率
下图为窗口大小 \(j=2\)时的 \(P\left(w_{t+j} | w_{t}\right)\),它的中心词为 \(into\)
下图为窗口大小 \(j=2\)时的 \(P\left(w_{t+j} | w_{t}\right)\),它的中心词为 \(banking\)
3.Word2vec 指标函数
3.1 Word2vec 指标函数
咱们来用数学示意的形式,对 word2vec 办法做一个定义和解说。
3.1.1 似然函数
对于每个地位 \(t=1, \cdots, T\),在大小为 \(m\)的固定窗口内预测上下文单词,给定中心词 \(w_j\),似然函数能够示意为:
$$
Likelihoood = L(\theta) = \prod^{T}_{t=1} \prod_{-m \leq j \leq m \atop j \neq 0} P(w_{t+j} | w_{t} ; \theta)
$$
上述公式中,\(\theta\)为模型蕴含的所有待优化权重变量
3.1.2 指标函数
对应上述似然函数的指标函数 \(J(\theta)\)能够取作 (均匀) 负对数似然:
$$
J(\theta)=-\frac{1}{T} \log L(\theta)=-\frac{1}{T} \sum_{t=1}^{T} \sum_{-m \leq j \leq m \atop j \neq 0} \log P\left(w_{t+j} | w_{t} ; \theta\right)
$$
留神:
- 指标函数 \(J(\theta)\)有时也被称为“代价函数 ”或“ 损失函数”
- 最小化指标函数 \(\Leftrightarrow\)最大化似然函数(预测概率 / 精度),两者等价
补充解读:
- 上述指标函数中的 log 模式是不便将连乘转化为求和,负号是心愿将极大化似然率转化为极小化损失函数的等价问题
- 在连乘之前应用 log 转化为求和十分无效,特地是做优化时
$$
\log \prod_i x_i = \sum_i \log x_i
$$
失去指标函数后,咱们心愿最小化指标函数,那咱们如何计算 \(P(w_{t+j} | w_{t} ; \theta)\)?
对于每个词 \(w\)都会用两个向量:
- 当 \(w\)是中心词时,咱们标记词向量为 \(v_w\)
- 当 \(w\)是上下文词时,咱们标记词向量为 \(u_w\)
则对于一个中心词 \(c\)和一个上下文词 \(o\),咱们有如下概率计算形式:
$$
P(o | c)=\frac{\exp \left(u_{o}^{T} v_{c}\right)}{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)}
$$
对于上述公式,ShowMeAI 做一点补充解读:
- 公式中,向量 \(u_o\)和向量 \(v_c\)进行点乘
- 向量之间越类似,点乘后果越大,从而归一化后失去的概率值也越大
- 模型的训练正是为了使得具备类似上下文的单词,具备类似的向量
- 点积是计算相似性的一种简略办法,在注意力机制中常应用点积计算 Score,参见 ShowMeAI 文章[C5W3] 16.Seq2Seq 序列模型和注意力机制
3.2 从向量视角回顾 Word2vec
下图为计算 \(P(w_{t+j} |w_{t})\)的示例,这里把 \(P(problems|into; u_{problems},v_{into},\theta)\)简写为 \(P(u_{problems} | v_{into})\),例子中的上下文窗口大小 2,即“左右 2 个单词 + 一个中心词”。
4.Word2vec prediction function
4.1 Word2vec 预测函数
回到下面的概率计算,咱们来察看一下
$$
P(o | c)=\frac{\exp \left(u_{o}^{T} v_{c}\right)}{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)}
$$
- 取幂使任何数都为正
- 点积比拟 \(o\)和 \(c\)的相似性 \(u^{T} v=u . v=\sum_{i=1}^{n} u_{i} v_{i}\),点积越大则概率越大
- 分母:对整个词汇表进行标准化,从而给出概率分布
这里有一个 softmax 的概率,softmax function \(\mathbb{R}^{n} \in \mathbb{R}^{n}\)示例:
将任意值 \(x_i\)映射到概率分布 \(p_i\)
$$
\operatorname{softmax}\left(x_{i}\right)=\frac{\exp \left(x_{i}\right)}{\sum_{j=1}^{n} \exp \left(x_{j}\right)}=p_{i}
$$
其中对于名称中 soft 和 max 的解释如下(softmax 在深度学习中常常应用到):
- max:因为放大了最大的概率
- soft:因为依然为较小的 \(x_i\)赋予了肯定概率
4.2 word2vec 中的梯度降落训练细节推导
上面是对于 word2vec 的参数更新迭代,利用梯度降落法的一些推导细节,ShowMeAI 写在这里做一点补充。
首先咱们随机初始化 \(u_{w}\in\mathbb{R}^d\)和 \(v_{w}\in\mathbb{R}^d\),而后应用梯度降落法进行更新
$$
\begin{aligned}
\frac{\partial}{\partial v_c}\log P(o|c) &=\frac{\partial}{\partial v_c}\log \frac{\exp(u_o^Tv_c)}{\sum_{w\in V}\exp(u_w^Tv_c)}\\
&=\frac{\partial}{\partial v_c}\left(\log \exp(u_o^Tv_c)-\log{\sum_{w\in V}\exp(u_w^Tv_c)}\right)\\
&=\frac{\partial}{\partial v_c}\left(u_o^Tv_c-\log{\sum_{w\in V}\exp(u_w^Tv_c)}\right)\\
&=u_o-\frac{\sum_{w\in V}\exp(u_w^Tv_c)u_w}{\sum_{w\in V}\exp(u_w^Tv_c)}
\end{aligned}
$$
偏导数能够移进求和中,对应上方公式的最初两行的推导
\(\frac{\partial}{\partial x}\sum_iy_i = \sum_i\frac{\partial}{\partial x}y_i\)
咱们能够对上述后果重新排列如下,第一项是真正的上下文单词,第二项是预测的上下文单词。应用梯度降落法,模型的预测上下文将逐渐靠近真正的上下文。
$$
\begin{aligned}
\frac{\partial}{\partial v_c}\log P(o|c)
&=u_o-\frac{\sum_{w\in V}\exp(u_w^Tv_c)u_w}{\sum_{w\in V}\exp(u_w^Tv_c)}\\
&=u_o-\sum_{w\in V}\frac{\exp(u_w^Tv_c)}{\sum_{w\in V}\exp(u_w^Tv_c)}u_w\\
&=u_o-\sum_{w\in V}P(w|c)u_w
\end{aligned}
$$
再对 \(u_o\)进行偏微分计算,留神这里的 \(u_o\)是 \(u_{w=o}\)的简写,故可知
$$
\frac{\partial}{\partial u_o}\sum_{w \in V} u_w^T v_c = \frac{\partial}{\partial u_o} u_o^T v_c = \frac{\partial u_o}{\partial u_o}v_c + \frac{\partial v_c}{\partial u_o}u_o= v_c
$$
$$
\begin{aligned}
\frac{\partial}{\partial u_o}\log P(o|c)
&=\frac{\partial}{\partial u_o}\log \frac{\exp(u_o^Tv_c)}{\sum_{w\in V}\exp(u_w^Tv_c)}\\
&=\frac{\partial}{\partial u_o}\left(\log \exp(u_o^Tv_c)-\log{\sum_{w\in V}\exp(u_w^Tv_c)}\right)\\
&=\frac{\partial}{\partial u_o}\left(u_o^Tv_c-\log{\sum_{w\in V}\exp(u_w^Tv_c)}\right)\\
&=v_c-\frac{\sum\frac{\partial}{\partial u_o}\exp(u_w^Tv_c)}{\sum_{w\in V}\exp(u_w^Tv_c)}\\
&=v_c – \frac{\exp(u_o^Tv_c)v_c}{\sum_{w\in V}\exp(u_w^Tv_c)}\\
&=v_c – \frac{\exp(u_o^Tv_c)}{\sum_{w\in V}\exp(u_w^Tv_c)}v_c\\
&=v_c – P(o|c)v_c\\
&=(1-P(o|c))v_c
\end{aligned}
$$
能够了解,当 \(P(o|c) \to 1\),即通过中心词 \(c\)咱们能够正确预测上下文词 \(o\),此时咱们不须要调整 \(u_o\),反之,则相应调整 \(u_o\)。
对于此处的微积分常识,能够查阅 ShowMeAI 的教程 图解 AI 数学根底 文章图解 AI 数学根底 | 微积分与最优化。
- 训练模型的过程,实际上是咱们在调整参数最小化损失函数。
- 如下是一个蕴含 2 个参数的凸函数,咱们绘制了指标函数的等高线。
4.3 训练模型:计算所有向量梯度
\(\theta\)代表所有模型参数,写在一个长的参数向量里。
在咱们的场景汇总是 \(d\)维向量空间的 \(V\)个词汇。
5. 视频教程
能够点击 B 站 查看视频的【双语字幕】版本
6. 参考资料
- 本讲带学的 在线阅翻页本
- 《斯坦福 CS224n 深度学习与自然语言解决》课程学习指南
- 《斯坦福 CS224n 深度学习与自然语言解决》课程大作业解析
- 【双语字幕视频】斯坦福 CS224n | 深度学习与自然语言解决(2019·全 20 讲)
- Stanford 官网 | CS224n: Natural Language Processing with Deep Learning
ShowMeAI系列教程举荐
- 大厂技术实现 | 举荐与广告计算解决方案
- 大厂技术实现 | 计算机视觉解决方案
- 大厂技术实现 | 自然语言解决行业解决方案
- 图解 Python 编程:从入门到精通系列教程
- 图解数据分析:从入门到精通系列教程
- 图解 AI 数学根底:从入门到精通系列教程
- 图解大数据技术:从入门到精通系列教程
- 图解机器学习算法:从入门到精通系列教程
- 机器学习实战:手把手教你玩转机器学习系列
- 深度学习教程 | 吴恩达专项课程 · 全套笔记解读
- 自然语言解决教程 | 斯坦福 CS224n 课程 · 课程带学与全套笔记解读
NLP 系列教程文章
- NLP 教程(1)- 词向量、SVD 合成与 Word2vec
- NLP 教程(2)- GloVe 及词向量的训练与评估
- NLP 教程(3)- 神经网络与反向流传
- NLP 教程(4)- 句法分析与依存解析
- NLP 教程(5)- 语言模型、RNN、GRU 与 LSTM
- NLP 教程(6)- 神经机器翻译、seq2seq 与注意力机制
- NLP 教程(7)- 问答零碎
- NLP 教程(8)- NLP 中的卷积神经网络
- NLP 教程(9)- 句法分析与树形递归神经网络
斯坦福 CS224n 课程带学详解
- 斯坦福 NLP 课程 | 第 1 讲 – NLP 介绍与词向量初步
- 斯坦福 NLP 课程 | 第 2 讲 – 词向量进阶
- 斯坦福 NLP 课程 | 第 3 讲 – 神经网络常识回顾
- 斯坦福 NLP 课程 | 第 4 讲 – 神经网络反向流传与计算图
- 斯坦福 NLP 课程 | 第 5 讲 – 句法分析与依存解析
- 斯坦福 NLP 课程 | 第 6 讲 – 循环神经网络与语言模型
- 斯坦福 NLP 课程 | 第 7 讲 – 梯度隐没问题与 RNN 变种
- 斯坦福 NLP 课程 | 第 8 讲 – 机器翻译、seq2seq 与注意力机制
- 斯坦福 NLP 课程 | 第 9 讲 – cs224n 课程大我的项目实用技巧与教训
- 斯坦福 NLP 课程 | 第 10 讲 – NLP 中的问答零碎
- 斯坦福 NLP 课程 | 第 11 讲 – NLP 中的卷积神经网络
- 斯坦福 NLP 课程 | 第 12 讲 – 子词模型
- 斯坦福 NLP 课程 | 第 13 讲 – 基于上下文的表征与 NLP 预训练模型
- 斯坦福 NLP 课程 | 第 14 讲 – Transformers 自注意力与生成模型
- 斯坦福 NLP 课程 | 第 15 讲 – NLP 文本生成工作
- 斯坦福 NLP 课程 | 第 16 讲 – 指代消解问题与神经网络办法
- 斯坦福 NLP 课程 | 第 17 讲 – 多任务学习(以问答零碎为例)
- 斯坦福 NLP 课程 | 第 18 讲 – 句法分析与树形递归神经网络
- 斯坦福 NLP 课程 | 第 19 讲 – AI 平安偏见与偏心
- 斯坦福 NLP 课程 | 第 20 讲 – NLP 与深度学习的将来