未验证 提交 7558c177 编写于 作者: 飞龙 提交者: GitHub

Merge pull request #10 from cx123cx456/master

Lecture1,3
**CS224N笔记(一):自然语言处理(NLP)简介**
**WordNet(分类词典)的缺点:**
不能准确识别同义词之间的细微差别。
对词语的理解不够精确(单词的词义不能及时更新,WordNet资源也不完整)。
主观性太强(只有固定的离散同义词集)。
耗费大量的人力资源进行标注,来构建 。
难以准确计算字词之间的相似性。
One-hot vectors:
![](media/d3737e074d0d735dae202cbddb31623f.png)
列如:
[猫,狗,鸡,鸭,汽车旅馆,鸟,骆驼,酒店],对这个数组进行编码之后;
Motel(汽车旅馆)对应的编码应是:
Motel=[0,0,0,0,1,0,0,0];
同理,Hotel(酒店)对应的编码应是:
Hotel=[0,0,0,0,0,0,0,1];
在上面汽车旅馆和酒店的意思是相似,但是对Motel=[0,0,0,0,1,0,0,0]与Hotel=[0,0,0,0,0,0,0,1]内积为0,也就是完全不相关;所以这种方式并不能表示出这种关系。
![](media/26cef4d801bc54c1939a7e0cc8f734aa.png)
由于ONE-Hot满足不了相关性,(J.R.Firth)提出了Distributional
semantics(分布式语义):单词的意思,应该结合它的上下文来确定的;现代统计NLP成功的理念之一。
e:
用‘banking’许多的上下文来构建它的意思:
![](media/d2b95dae5dedcbc90fad260cbc1da976.png)
**词向量:**
将选择的每个单词构建了密集的向量,为了更好的预测上下文的意思:
![](media/40677ebb4b091966d2f8e550b4ca6d30.png)
‘banking’对应的维度是8;每一个单词都有一个向量维度,所有单词在一起将会有一个向量空间。
![](media/90138e84ea3b961732b0d5e70e032f4a.png)
向量中的每个单词具有不同的基础;
Word2vec:是一个学习单词向量的框架。
![](media/756020be8c51e4f89a721f20dca825bd.png)
想法;
我们有大量的文本。
固定词汇表中的每一个单词都由一个向量表示
遍历文本中每一个位置,其中有一个中心词C与外部词O。
用单词的向量的相似性来计算O与C的相同(或想反)的概率。
不断的调整单词向量,使概率值最大化。
用迭代来实现这个算法,要确定一个单词的意思,要结合上下文的意思来确定,我们要遍历文本中的每个位置,通过移动单词向量来实现;重复10亿次之后,得到了好的结果;
计算过程:
![](media/4275e279e6d646246334a84434ebf9dd.png)
目标函数(损失函数或成本函数):
![](media/939133082e8b9ec6e39ac058a84e8cdd.png)
对于给定的数据集T,固定了窗口的大小(每个面几个字),给定中心单词Wj;
模型的概率
![](media/1ed8e2c6f59f03f227a0a96783bee07c.png)
最小化目标函数==最大化概率值;
![](media/86f7fdf808b1a7958f0fa3c15c413ab1.png)
这个模型中,唯一的一个参数就是我们给定的一个变量;
![](media/f6ee3acc5c552202abf5a7bd033cbbe2.png)
最小化损失函数;
将每个单词使用俩个向量:当W是中心词是,当W是上下文词时;
然后是中心词C与上下文词O;
e:
定义一个某个单词的上下文模型:
> P(context\|Wt)=.....
定义损失函数:
> J=1-P(Wt+j\|Wt)(Wt+j与Wt为上下文)
如果预测结果正确,目标函数为0;
在词料库中的不同位置来训练,调整词向量,最小化目标函数:
比如:我喜欢打篮球,也喜欢打羽毛球。
当出现“打篮球”时,预测出现“打羽毛球”的可能性;概率模型为:
> P(打羽毛球\|打篮球)(也就是在“打篮球”的条件下“打羽毛球”的概率)
目标函数:
> J=1-p(W\|打篮球)
如果w=“打羽毛球”,概率为1,目标函数为0。
![](media/2f999b6467c4c018c0306069f60b3625.png)
分子是:通过点积来计算O与C的相似性;分母是对整个词汇表进行标准化后给出的概率分布;
这是一个SOFEMAX函数R\^N——R\^n的例子:
![](media/a1d0273bc4309db805739d88a64fbc92.png)
在SOFTMAX函数中:
“max”是将一些大的概率表示为最大的概率Xi;
“soft”是将一些小的概率表示为更小的概率Xj;
经常用于深度学习;
**通过优化训练参数训练模型:**
为了更好的训练模型,调整参数使目标函数最小化;
也就是用梯度下降来找到最优点;
![](media/8b5e9d716ea43a7b82695a73ad497674.png)
**计算所有向量维度:**
在D维向量与V维向量中,有许多单词:
![](media/0f678a32a897d8a7cbdd958b5e73047a.png)
每个单词都有俩个向量;沿着这个梯度进行优化;
**CS224N(第三节):**
**Word Window Classification, Neural Nets and Calculus**
**Classification setup and notation:**
![](media/9c3f64b3061eb3db00d7b7562ca13fee.png)
通常我们有一个由样本组成的训练数据集:
![](media/105645bb8bfaa51181b72ae1b079eb50.png)
xi 是输入,例如单词(索引或是向量),句子,文档等等,维度为 d
yi是我们将要尝试预测的标签(C个类别中的一个),例如:
类别:情绪,命名实体,买入/卖出的决策
其他单词
之后:多词序列的
**Classification intuition:**
![](media/6343eafbf305f43451e50461459a36fb.png)
训练数据:
![](media/84ed44ccba0edbe63db9a571b4226915.png)
简单的说明案例:
固定的二维单词向量分类
使用softmax/logistic回归
线性决策边界
(单词向量是二维的,使用逻辑回归来进行分类,最后找到线性的决策边界)
传统的ML/统计学方法:假设xi是固定的,训练somtmax/logistic回归的权重W来确定边界。
方法:对于每个X,预测:
![](media/4d31a5484902aead763880a4abe72a1f.png)
Softmax分类器的详细信息:
![](media/eaea194ebe26bf2a8e69d68cd01e1a78.png)
将预测函数分为两个步骤:
1.将W的y行与x中对应行相乘(权重矩阵的某一行乘输入向量的点积):
![](media/c5b21293bcd8cccae6a7ed922e0240e8.png)
计算所有的fc, c = 1,………,c
2.使用softmax函数得到归一化概率:
![](media/035f4ab4e1518d2cae60fd4323acab2b.png)
Training with soft and cross-entropy loss(使用softmax与交叉熵损失进行训练)
对于每个训练样本(x,y),我们的目标是最大化正确类y的概率,或是最小化这个类的对数概率:
![](media/160ae1c3f9d59caacfced0221cdee4d9.png)
Corss entropy loss/error(交叉熵的损失/误差)
交叉熵”的概念来源于信息论,衡量两个分布之间的差异
令真实概率分布为 p
令我们计算的模型概率为 q
交叉熵为:
![](media/67d49eeec459f53e6c9d5fb11bcf1010.png)
假设 groud truth (or true or gold or
target)的概率分布在正确的类上为1,在其他任何地方为0:p=[0,…,0,1,0,…0]
因为 p 是one-hot向量,所以唯一剩下的项是真实类的负对数概率。
**Classification over a full dataset:**
在整个数据集上的交叉熵损失函数,是所有样本的交叉熵的均值:
![](media/a284ec7c020044950833d2e8a9d9d367.png)
我们不使用
![](media/38ac5c9ea7ad5634312929dbd417434a.png)
我们使用矩阵来表示f
![](media/30aabfb3b1eea5c2c04e77eb1b7b4758.png)
**Traditional ML optimization:**
一般机器学习的参数 θ 通常只由W的列组成
![](media/d612c5fc03f9f90f6d9c1f2f65561f4e.png)
用以下方法来更新决策边界:
![](media/c83e92b3bf2cbe6098224880124ec1f4.png)
Neural Network Classifiers
![](media/750c7b5f8979dc080c7ff2298fcd8d12.png)
单独使用Softmax(≈logistic回归)并不十分强大
Softmax只给出线性决策边界
Neural Nets for the Win!
![](media/715eb662e8e68f5a583ba39839eedc92.png)
右图为神经网络分类的结果(神经网络可以学习更复杂的函数和非线性决策边界)
**更高级的分类需求**
1.词向量
2.更深层次的深度神经网络
**Classification difference with word vectors:**
一般在NLP深度学习中
1.我们学习了矩阵 W 和词向量 x
2.我们学习传统参数和表示
3.词向量是对独热向量的重新表示——在中间层向量空间中移动它们—以便使用(线性)softmax分类器通过
x = Le
层进行分类,即将词向量理解为一层神经网络,输入单词的独热向量并获得单词的词向量表示,并且我们需要对其进行更新。其中,Vd (非常多的参数)
![](media/cc97acf5ea5e08357a191bcc967acd06.png)
**Neural computation**
![](media/13540962cd8157f7281f048a7ad46455.png)
**An artificial neuron:**
神经网络有自己的术语包
但如果你了解 softmax 模型是如何工作的,那么你就可以很容易地理解神经元的操作
![](media/87772a5c28cfd59c44dc0ef8d34961db.png)
X为输入值,wi为来自各个神经元的权重值,经过激活函数的处理之后,输出传向下一级神经元。
**A neuron can be a binary logistic regression unit:**
![](media/0f73073a689e8fab9468665a1a6e246c.png)
W为权重值,b为偏置,h为隐藏层,x为输入
![](media/6878311d9fdbde542222229b4b4ac7c5.png)
b为:我们可以有一个“总是打开”的特性,它给出一个先验类,或者将它作为一个偏向项分离出来。
![](media/eed5783c39bf1a3512f1d22f0032a5f3.png)
上图为softmax图像
![](media/9ecab7c5a5ba7aabcc70f7a43d69a381.png)
W,b是这个神经元的参数
**A neural network** **= running several logistic regressions at the same
time:**
![](media/1e538630d605e2f089c9d524d5acee3b.png)
输入一个向量,经过一系列逻辑回归函数,会得到一个输出变量。但是我们不需要提前决定这些函数在预测的变量是什么。
![](media/c067e3fbb58837d28b58111da022f4de.png)
我们只需要把预测结果传递给下一层网络中,由损失函数自动决定它们预测什么,从而传向下一层。
![](media/c4f930a4361aeb4a372c653153079ae8.png)
**Matrix notation for a layer:**
![](media/8cc04c52651e08dcc01451e47d42de0e.png)
![](media/866df69980cdccd0ce8bc940d3bd2054.png)
![](media/b78effc9001b7923749a983618b495cc.png)
![](media/1923af5f08d15eeb5de0fbc3dd5b2bd5.png)
**Non-linearities (aka “f ”): Why they’re needed:**
非线性函数可以更好的捕捉很复杂的数据:
![](media/c1af263b21867990ab8ae486e0617f3c.png)
![](media/bdc31f98a8404cd2e8fe291faa3c38f9.png)
![](media/98312cf7f6090bff1993a77d45e6ccb0.png)
例如:函数近似,如回归或分类
没有非线性,深度神经网络只能做线性变换
多个线性变换可以组成一个的线性变换 W1W2x=Wx
因为线性变换是以某种方式旋转和拉伸空间,多次的旋转和拉伸可以融合为一次线性变换
对于非线性函数而言,使用更多的层,他们可以近似更复杂的函数**Named Entity
Recognition (NER):**
任务:例如,查找和分类文本中的名称
![](media/0702867eeabce64498a5fa2e63b1d477.png)
可能的用途
跟踪文档中提到的特定实体(组织、个人、地点、歌曲名、电影名等)
对于问题回答,答案通常是命名实体
许多需要的信息实际上是命名实体之间的关联
同样的技术可以扩展到其他 slot-filling 槽填充 分类
通常后面是命名实体链接/规范化到知识库
**Named Entity Recognition on word sequences**
通过结合上下文中对单词进行分类,然后提取实体单词的子序列来预测。
![](media/319ea145bf96365b0515dd9be7c1c334.png)
**Window classification**
思想:在\*\*相邻词的上下文窗口\*\*中对一个词进行分类
例如,上下文中一个单词的命名实体分类
人、地点、组织、没有
在上下文中对单词进行分类的一个简单方法可能是对窗口中的单词向量进行\*\*平均\*\*,并对平均向量进行分类
问题:**这会丢失位置信息**
**Window classification: Softmax**
训练softmax分类器对中心词进行分类,方法是在一个窗口内\*\*将中心词周围的词向量串联起来\*\*
例子:在这句话的上下文中对“Paris”进行分类,窗口长度为2
![](media/a3c41b35f66c5d446e684795c3270c8d.png)
**Simplest window classifier: Softmax**
![](media/7e254490edee480daef55bc5303a7d57.png)
使用softmax分类器
**Binary classification with unnormalized scores**
![](media/8a0f8c21c2507b4ae62dafd6a4c71b67.png)
假设我们要对中心词是否为一个地点,进行分类
与word2vec类似,我们将遍历语料库中的所有位置。但这一次,它将受到监督,只有一些位置能够得到高分。
例如,在他们的中心有一个实际的NER Location的位置是“真实的”位置会获得高分。
**Neural Network Feed-forward Computation:**
使用神经激活 aa 简单地给出一个非标准化的分数 :
![](media/c08bad74522c73d821815c841a9e1194.png)
三层神经网络计算窗口得分:
![](media/4f37bd2361d0dee284462c8e0d6e4fdf.png)
![](media/4202f10e49f3cc0db6498e1b5b89d0cd.png)
![](media/00926e51622c73d0563cc3cc060dd73e.png)
a是激活函数:
![](media/c6b3a588fcfd667ea0cae9eae3adc841.png)
**The max-margin loss:**
最小化损失函数,让真实的窗口得分更高,破坏窗口得分更低:
![](media/54a21854bef6f355d126bc656cd3dd22.png)
最小化:
![](media/c47e0f819d26ba99a8b5640c9dd2d769.png)
使用SGD更新参数:
![](media/110bc0fa8979ea058cf287f81eef7d5e.png)
每个中心有NER位置的窗口的得分应该比中心没有位置的窗口高1分:
![](media/96a122e9da19cfc6bc97efeda03ece9c.png)
**Jacobian Matrix: Generalization of the Gradient:**
给定一个函数,有m个输出与n个输入:
![](media/054c5b4d2dd02c55bc1f2d47cdd70e42.png)
雅可比矩阵可以等效为一个m\*n 的偏导矩阵:
![](media/7b7ff896cd8e7d2d064d3a97e9b02270.png)
**Chain Rule:**
对于单变量函数:乘以导数:
![](media/b67da1c942280ddc8081ed9dc2751504.png)
对于一次处理多个变量:乘以雅可比矩阵:
![](media/d75aa946ba69c5e99840a82583970f2e.png)
**Example Jacobian: Elementwise activation Function:**
使用element-wise:
函数有n个输入与n个输出=n\*n 的雅可比矩阵
![](media/f11058bd5fbe80a556f19100c22c7635.png)
**Other Jacobians:**
![](media/0281e3d94efe17bfc2de3fa5105d2361.png)
上图是正确的雅可比公式,答案为h
**Back to our Neural Net!**
![](media/44e5ecedcf7a99b323f502acaf360c7e.png)
![](media/2efef90c3b837a85886132f237d76bc7.png)
计算分数的梯度
**Break up equations into simple pieces:**
![](media/976134334aab52a94ea54d0c4cc767af.png)
**Apply the chain rule:**
![](media/f6801d8f4f478bc7a7d87c3248cf603c.png)
![](media/22df0c2f3a3d9a274aca272e9cf0408f.png)
![](media/5939769736ba68cd97dcdc7f0d1391c0.png)
计算过程:
![](media/5f6c3b7cf264b3c4c586f975cf4ceab4.png)
δ是局部误差符号。
**Derivative with respect to Matrix:Output shape:**
∂s/∂W输出形状是
![](media/f2111a572741c3c6c6c96e352991e4ce.png)
1个输出,n\*m 个输入:1 × n\*m 的雅可比矩阵?
不方便更新参数 
而是遵循惯例:导数的形状是参数的形状 (形状约定)
形状是n\*m
![](media/856c6c04b2d3649150d76bb37d22d4a9.png)
**Derivative with respect to Matrix:**
![](media/1ec77f45e7be8c6d9f2ba23f8eb1fa23.png)
![](media/0f505c06650ee3043870614c3105a838.png)
得到:
![](media/d1ec37f9eb213c0879dcbd0ec2775fe1.png)
δ是局部误差信号;
X是局部输入信号;
**Why the Transposes?**
![](media/99b519d629888f23581e060eedd63f46.png)
粗糙的回答是:这样就可以解决尺寸问题了
检查工作的有用技巧
课堂讲稿中有完整的解释
每个输入到每个输出——你得到的是外部积
![](media/da33062ab60813d3c73930b9c96ca721.png)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册