找到了大神的笔记,码一下,一起分享
以下是我的渣记
文章目录
lecture1: NLP简介
NLP,natural language processing
1.自然语言的层次
输入有两种,语音、文本
- 单词分析
- 句法分析
- 语义分析
2.传统机器学习vs深度学习
深度学习是机器学习的分支
- 机器学习,通常人类提取特征,决定哪些特征进行组和分析,或为某些特征设计模板;通过机器学习算法,最优化权值
- 深度学习,自己学习到原始输入的多层特征表示
3.NLP的难点
- 语言模棱两可;程序需要各种明确规则
- 语言有上下文、依赖于常识、背景知识
lecture2: 词向量表示
1.单词的表示
1.1分类表示系统(discrete representation)
- 缺点:
- 某些同义词之间还是有些微小差别体现不出,比较主观
- 词库太多,向量超长
- 例如onehot编码,无法通过运算得到相似性。可能两个词是同一个意思,但两个向量正交
- 需求:建立一个向量直接编码词含义的系统。通过两个向量点积求体现相似性
1.2分布式表示系统(distributes representation)
- 分布相似性理论(distributional similarity:通过上下文得到一个词的意思
- 通过调整单词向量,使上下文单词互相预测。
- 可以通过向量间运算推测单词的关系
2.词嵌入神经网络(word embedding)
- 模型可以预测某单词上下文,表示为
p ( c o n t e x t ∣ w t ) p(context|w_t) p(context∣wt) - 损失函数:
J = 1 − p ( w − t ∣ w t ) J=1-p(w_{-t}|w_t) J=1−p(w−t∣wt)
其中 w t w_t wt指中心词汇; w − t w_{-t} w−t指 w t w_t wt的上下文词汇(负号表示除中心词外)。
最优化 w t w_t wt以最小化损失函数
3.word2vec
中心词和上下文彼此预测。
- 有两个算法:
- Skip-grams(SG):给定中心预测上下文
- Continuous Bag of Words(CBOW):利用上下文的词袋预测目标
- 两个效果稍高效的训练方法:
- Hierarchical softmax
- negative sampling
但这门课只讲naive softmax
4.skip-gram
4.1 模型
所有的单词
t
=
1
,
⋯
 
,
T
t=1,\cdots,T
t=1,⋯,T, 中心词位置为t,预测左/右侧距离m内的单词。模型表示为
p
(
w
t
+
j
∣
w
t
)
,
−
m
⩽
j
⩽
m
,
j
≠
0
p(w_{t+j}|w_t),-m\leqslant j \leqslant m,j\neq 0
p(wt+j∣wt),−m⩽j⩽m,j̸=0
4.2 最大似然估计
参数
θ
\theta
θ是整个模型中的唯一参数。
使每个上下文词出现的概率尽可能的大,计算最优
θ
\theta
θ
max
J
′
(
θ
)
=
∏
t
=
1
T
∏
−
m
⩽
j
⩽
m
j
≠
0
p
(
w
t
+
j
∣
w
t
;
θ
)
\begin{aligned} \max J'(\theta) &= \prod_{t=1}^T \prod_{-m\leqslant j \leqslant m \atop j\neq 0}p(w_{t+j}|w_t;\theta) \end{aligned}
maxJ′(θ)=t=1∏Tj̸=0−m⩽j⩽m∏p(wt+j∣wt;θ)
取负对数,最小化目标函数
min
J
(
θ
)
=
−
1
T
∑
t
=
1
T
∑
−
m
⩽
j
⩽
m
j
≠
0
log
p
(
w
t
+
j
∣
w
t
)
\min J(\theta) = -\frac{1}{T}\sum_{t=1}^T\sum_{-m\leqslant j \leqslant m \atop j\neq 0} \log p(w_{t+j}|w_t)
minJ(θ)=−T1t=1∑Tj̸=0−m⩽j⩽m∑logp(wt+j∣wt)
其中
T
T
T是词个数。得到负对数似然函数
J
(
θ
)
J(\theta)
J(θ)
4.3 用softmax得到上下文概率分布
p
(
o
∣
c
)
=
e
x
p
(
u
o
T
v
c
)
∑
w
=
1
V
e
x
p
(
u
w
T
v
c
)
p(o|c) = \frac{exp(u^T_ov_c)}{\sum_{w=1}^Vexp(u^T_wv_c)}
p(o∣c)=∑w=1Vexp(uwTvc)exp(uoTvc)
其中
c
c
c是中心词在中心词矩阵中的索引,
o
o
o是上下文矩阵中的索引。
v
c
v_c
vc是中心词向量,
u
o
u_o
uo是上下文词向量。
- 利用softmax函数将数值映射为概率分布。
- 向量间的点积可以估计相似性
4.4 skip-gram的神经网络
![](https://i-blog.csdnimg.cn/blog_migrate/8cf2fdd77ef7e92b3fe9028ac194b897.png)
- w t w_t wt,词的onehot向量,维度 V × 1 V \times 1 V×1(V是中心词空间中所有词的数目)
- W W W,中心词空间的嵌入矩阵(代表每个词作为中心词时的向量v组成的矩阵),维度 d × V d \times V d×V(d是词向量的长度,每列就是一个词向量)
- v c = W w t v_c=Ww_t vc=Wwt,是词 w t w_t wt的词向量,维度为 d × 1 d \times 1 d×1
- W ′ W' W′,上下文的矩阵(代表每个词作为上下文时的向量u组成的矩阵),维度为 V × d V \times d V×d
- W ′ v c = [ u x T v c ] W'v_c=[u_x^Tv_c] W′vc=[uxTvc],上下文矩阵与中心词词向量相乘,得到每个词与中心词的“相似度”,维度为 V × 1 V\times1 V×1
- P ( x ∣ c ) = s o f t m a x ( u x T ∣ v c ) P(x|c)=softmax(u_x^T|v_c) P(x∣c)=softmax(uxT∣vc),用softmax映射为概率,维度为 V × 1 V\times1 V×1
- 用真实值与概率对比计算损失
上面这个图片拷贝自大神博客
我们要学习
W
W
W和
W
′
W'
W′。两个矩阵都含有V个词向量,那么每个单词有2个d维向量(作为中心词时的向量
v
v
v,和作为上下文时的向量
u
u
u)。
可以每次学习单个
v
c
v_c
vc和
u
o
u_o
uo。
对于模型来说,把
W
W
W和
W
′
W'
W′矩阵所有值叠加起来,那么参数
θ
∈
R
2
d
V
\theta \in R^{2dV}
θ∈R2dV
4.5 利用梯度下降最小化目标函数
- 对中心词参数
v
c
v_c
vc求导
p ( o ∣ c ) = e x p ( u o T v c ) ∑ w = 1 V e x p ( u w T v c ) ∂ ∂ v c log e x p ( u o T v c ) ∑ w = 1 V e x p ( u w T v c ) = ∂ ∂ v c log e x p ( u o T v c ) − ∂ ∂ v c log ∑ w = 1 V e x p ( u w T v c ) = u o − ∑ x = 1 V e x p ( u x T v c ) u x ∑ w = 1 V e x p ( u w T v c ) = u o − ∑ x = 1 V e x p ( u x T v c ) ∑ w = 1 V e x p ( u w T v c ) u x = u o − ∑ x = 1 V p ( x ∣ c ) u x \begin{aligned} p(o|c) &= \frac{exp(u^T_ov_c)}{\sum_{w=1}^Vexp(u^T_wv_c)}\\ \frac{\partial{}}{\partial{v_c}}\log \frac{exp(u^T_ov_c)}{\sum_{w=1}^Vexp(u^T_wv_c)}&=\frac{\partial{}}{\partial{v_c}}\log exp(u^T_ov_c) - \frac{\partial{}}{\partial{v_c}}\log \sum_{w=1}^Vexp(u^T_wv_c) \\ &=u_o - \frac{\sum_{x=1}^Vexp(u^T_xv_c)u_x}{\sum_{w=1}^Vexp(u^T_wv_c)} \\ &=u_o - \sum_{x=1}^V\frac{exp(u^T_xv_c)}{\sum_{w=1}^Vexp(u^T_wv_c)}u_x \\ &=u_o - \sum_{x=1}^Vp(x|c)u_x \end{aligned} p(o∣c)∂vc∂log∑w=1Vexp(uwTvc)exp(uoTvc)=∑w=1Vexp(uwTvc)exp(uoTvc)=∂vc∂logexp(uoTvc)−∂vc∂logw=1∑Vexp(uwTvc)=uo−∑w=1Vexp(uwTvc)∑x=1Vexp(uxTvc)ux=uo−x=1∑V∑w=1Vexp(uwTvc)exp(uxTvc)ux=uo−x=1∑Vp(x∣c)ux
式中的 u o u_o uo代表当前值, ∑ x = 1 V p ( x ∣ c ) u x \sum_{x=1}^Vp(x|c)u_x ∑x=1Vp(x∣c)ux是当前所有上下文的平均值 - 还需要对
u
o
u_o
uo求导
之后梯度下降法
θ ′ ← θ − α ∇ J ( θ ) \theta' \leftarrow \theta - \alpha \nabla J(\theta) θ′←θ−α∇J(θ)