Stanford / Winter 2020 CS224n 课程学习笔记03-04

引言

命名实体识别(Named Entity Recognition,简称NER),又称作“专名识别”,是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。
通常包括两部分:(1)实体边界识别;(2) 确定实体类别(人名、地名、机构名或其他)。
英语中的命名实体具有比较明显的形式标志(即实体中的每个词的第一个字母要大写),所以实体边界识别相对容易,任务的重点是确定实体的类别。和英语相比,汉语命名实体识别任务更加复杂,而且相对于实体类别标注子任务,实体边界的识别更加困难。

在做推荐系统或者智能音箱等应用时,NER的作用显得尤为重要,某些词的歧义可能会导致意想不到的后果。如下图,你可能会问:两辆面包车捐献给史密斯堡的是未来的学校还是叫“未来”的学校呢?

图 1

为了解决这个问题,Word-Window classification分类方法被提出,主要思想是从中心词附近的单词来进行判断,中心词是不是实体。和Skip-grim算法相似,也有一个窗口。

Word-Window classification

在进行分类训练时,上一课训练的词向量在这里派上用场了。假设现在中心词为Paris,窗口为5,每个词的词向量维度为,将一个窗口内所有的单词进行拼接后,得到拼接矩阵作为训练输入。

图 2 对Paris进行分类

然后利用神经网络进行训练。随机初始化一个矩阵,定义神经元的激活函数为sigmoid。

这张图的顶点的计算结果,即为Paris在这段窗口中心的得分。

图 3 一个简单的三层神经网络示意图

注:为神经元激活函数,z为第一层神经元计算后的输出结果。为了方便简写为。

Maximum Margin Objective Function

如果令S为“真”标签窗口的得分
(Museums in Paris are amazing)
令 为“假”标签窗口的得分
(Not all museums in Paris)
最后,定义在所有训练窗口上的优化目标函数为:

为什么用此优化函数的详细讲解
当损失函数变化值大于时,更新权重,否则停止更新。为了更新权重,利用神经网络的反向传播来完成。

神经网络计算过程:

即当矩阵输入模型后,计算过程动画展示如图所示。

图 4 Neural Network

具体的计算细节可以移步这里Neural Networks: Foundations

重点:反向传播

如图三所示。各层计算公式如下

为激活函数,在这里为sigmoid:

最后的输出为:

将神经网络简化为图的形式表达:

简化的神经网络图

假如现在对权重矩阵进行更新,按照反向传播的计算,
计算细节及示例Computation Graphs and Backpropagation

\frac{\partial s}{\partial h} = u, \quad \frac{\partial s}{\partial z} = \frac{\partial f(z)}{\partial z} \frac{\partial s}{\partial h} = \frac{\partial h}{\partial z} \frac{\partial s}{\partial h} \because(f(z) = h)\quad \frac{\partial s}{\partial b} = \frac{\partial s}{\partial z} 经过层层迭代后,发现它其实就是一个链式求导的过程。

根据链式求导法则对求偏导:

即对其拆分,分别求的导数。

tips:在求时,会用到如下计算
\begin{aligned}& f(x) = f(x_{1} ,x_{2} , ... x_{n}) \\& \frac{\partial f}{\partial x} = [\frac{\partial f}{\partial x_{1}},\frac{\partial f }{\partial x_{2}},...,\frac{\partial f}{\partial x_{n}}] \end{aligned}

\frac{\partial f}{\partial x} = \begin{bmatrix} \frac{\partial f_{1}}{\partial x_{1} } & \cdots & \frac{\partial f_{1}}{\partial x_{n}} \\ \vdots & \ddots & \vdots \\ \frac{\partial f_{m}}{\partial x_{1}} & \cdots & \frac{\partial f_{m}}{\partial x_{n}} \end{bmatrix}

,

计算

\begin{aligned}& \frac{\partial h}{\partial z} = \frac{\partial h_{i}} {\partial z_{j}} = \frac{\partial } {\partial z_{j}}(z_{i}) \\& =\left\{\begin{matrix} f'(z_{i}) \quad if \quad i = j\\0 \quad if \quad othewise \end{matrix}\right. \end{aligned}
即:

的导数的计算结果如下:

\begin{aligned} & \frac{\partial s}{\partial h} = \frac{\partial}{\partial h} (u^{T}h) = u \\& \frac{\partial h}{\partial z} = \frac{\partial}{\partial h} (f(z)) = diag(f'(z)) \\& \frac{\partial z}{\partial b} = \frac{\partial}{\partial h} (Wx + b) = I \end{aligned}

所以的更新梯度结果为:

同样用链式法则对求偏导,

不难发现,链式求导的前两项是一样的,令 ,接下来仅需计算就行了:

tips:

的更新梯度结果为:

\begin{aligned} & \frac{\partial s}{\partial W} = \frac{\partial s}{\partial h } \frac{\partial h}{\partial z} \frac{\partial z}{\partial W} \\& = \delta \frac{\partial z}{\partial W } \\& = \delta \frac{\partial}{\partial W} (Wx + b) \\& = \frac{\partial}{\partial W} (\delta Wx) \\& = \delta^Tx^T \end{aligned}

利用梯度下降更新方法对权重矩阵进行更新

关于学习率,正则化,激活函数,优化器等等的细节,建议看看吴恩达机器学习,应该会有收获。

若有错误或者表达不明确,欢迎大家批评指正!

[1]Stanford / Winter 2020 CS224n
[2]CS224n-2019 学习笔记(looperxx)

你可能感兴趣的:(Stanford / Winter 2020 CS224n 课程学习笔记03-04)