1.分类定义
xi 是输入,例如单词(索引或是向量),句子,文档等等,维度为 d
yi是我们尝试预测的标签( C个类别中的一个),例如:
-
类别:感情,命名实体,购买/售出的决定
-
其他单词
-
之后:多词序列的
2.分类
训练数据:
简单的说明情况
-
固定的二维单词向量分类
-
使用softmax/logistic回归
-
线性决策边界
2.1 传统的机器学习/统计学方法:
假设 是固定的,训练 softmax/logistic 回归的权重 W∈
来决定决定边界(超平面)
方法:对每个 x 预测
可以将预测函数分为两个步骤:
1.将 W的 行和 x 中的对应行相乘得到分数
(计算所有的 fc,for c=1,…,C)
2. 使用softmax函数获得归一化的概率
训练:
使用softmax和交叉熵损失进行训练。对于每个训练样本 (x,y) ,我们的目标是最大化正确类 y 的概率,或者我们可以最小化该类的负对数概率
在整个数据集 {xi,yi}Ni=1 上的交叉熵损失函数,是所有样本的交叉熵的均值:
一般机器学习的参数 θ 通常只由W的列组成
因此,我们只通过以下方式更新决策边界
不足:
- 单独使用Softmax(≈logistic回归)并不十分强大
- Softmax只给出线性决策边界
- 这可能是相当有限的,当问题很复杂时是无用的
2.2 神经网络方法:
神经网络可以学习更复杂的函数和非线性决策边界
更高级的分类需要
- 词向量
- 更深层次的深层神经网络
一般在NLP深度学习中
- 我们学习了矩阵 W和词向量 x
- 我们学习传统参数和表示
- 词向量是对独热向量的重新表示——在中间层向量空间中移动它们——以便使用(线性)softmax分类器进行分类
- 即将词向量理解为一层神经网络,输入单词的独热向量并获得单词的词向量表示,并且我们需要对其进行更新。其中,Vd是数量很大的参数
神经网络由神经元构成,神经元可以是一个二元逻辑回归单元。
b: 我们可以有一个“总是打开”的特性,它给出一个先验类,或者将它作为一个偏向项分离出来
w,b是神经元的参数
如果我们输入一个向量通过一系列逻辑回归函数,那么我们得到一个输出向量,但是我们不需要提前决定这些逻辑回归试图预测的变量是什么。我们可以输入另一个logistic回归函数。损失函数将指导中间隐藏变量应该是什么,以便更好地预测下一层的目标。我们当然可以使用更多层的神经网络。
一层的矩阵表示法
f 函数是非线性**函数
为什么我们需要非线性函数:
- 没有非线性,深度神经网络只能做线性变换
- 多个线性变换可以组成一个的线性变换 W1W2x=Wx
因为线性变换是以某种方式旋转和拉伸空间,多次的旋转和拉伸可以融合为一次线性变换
- 对于非线性函数而言,使用更多的层,他们可以近似更复杂的函数
常见的**函数可见我之前总结的神经网络**函数
3.命名实体识别(NER)
- 任务:例如,查找和分类文本中的名称
- 可能的用途
- 跟踪文档中提到的特定实体(组织、个人、地点、歌曲名、电影名等)
- 对于问题回答,答案通常是命名实体
- 许多需要的信息实际上是命名实体之间的关联
- 同样的技术可以扩展到其他 slot-filling 槽填充 分类
我们通过在上下文中对单词进行分类,然后将实体提取为单词子序列来预测实体
- 为什么NER可能很难?
1.很难计算出实体的边界
2.很难知道某物是否是一个实体
3.很难知道未知/新奇实体的类别
4.实体类是模糊的,依赖于上下文
4. 窗口分类
Window classification
思想:在**相邻词的上下文窗口**中对一个词进行分类
例如,上下文中一个单词的命名实体分类
人、地点、组织、没有
在上下文中对单词进行分类的一个简单方法可能是对窗口中的单词向量进行**平均**,并对平均向量进行分类
问题:这会丢失位置信息
Window classification: Softmax
- 训练softmax分类器对中心词进行分类,方法是在一个窗口内**将中心词周围的词向量串联起来**
- 例子:在这句话的上下文中对“Paris”进行分类,窗口长度为2
- 结果向量
=x∈
是一个列向量
Simplest window classifier: Softmax
对于 x=,我们可以使用与之前相同的softmax分类器
Slightly more complex: Multilayer Perceptron
-
在我们的softmax分类器中引入一个额外的非线性层。
-
mlp是更复杂的神经系统的基本构件!
-
假设我们要对中心词是否为一个地点,进行分类
- 与word2vec类似,我们将遍历语料库中的所有位置。但这一次,它将受到监督,只有一些位置能够得到高分。(例如,在他们的中心有一个实际的NER Location的位置是“真实的”位置会获得高分)
-
例子:Not all museums in Paris are amazing
-
这里:一个真正的窗口,以Paris为中心的窗口和所有其他窗口都“损坏”了,因为它们的中心没有指定的实体位置(此处无地点词)。
- museums in Paris are amazing
-
“未损坏”窗口 (此处Paris为地点词)
- Not all museums in Paris
我们用一个三层神经网络计算一个窗口的得分
中间层学习输入词向量之间的**非线性交互**
例如:只有当“museum”是第一个向量时,“in”放在第二个位置才重要
Alternative: Max-margin loss (no Softmax!)
- 关于训练目标的想法:让真实窗口的得分更高,而破坏窗口的得分更低(直到足够好为止)
- s=score("museums in Paris are amazing”)
- sc=score("Not all museums in Paris)
- 最小化 J=max(0,1−s+sc)
-
这是不可微的,但它是连续的→我们可以用SGD。
-
每个选项都是连续的
-
单窗口的目标函数为
- 要获得完整的目标函数:为每个真窗口采样几个损坏的窗口。对所有培训窗口求和
-
类似于word2vec中的负抽样
-
使用SGD更新参数
a是 步长或是学习率
- 如何计算 ∇θJ(θ)
- 手工计算(本课)
- 算法:反向传播(下一课)