斯坦福大学CS224N-深度学习与自然语言处理:课程1-笔记
课程1-笔记
大纲:
- 讨论课程
- 语言和语意
- Word2Vec介绍
- Word2Vec目标函数梯度
- 优化函数
- Word2Vec的作用
关键:词义的结果可以用一个很大的实数向量很好地表示。
课程
学习目标:
- 将深度学习应用于自然语言处理的基础并有效的方法;
- 基础知识
- NLP中的关键方法:词向量、前向传播神经网络、递归神经网络、注意力机制、编码器-解码器模型、transformers等
- 深入理解人类语言的复杂以及如何通过计算机处理
- 理解并且有能力通过PyTorch解决NLP中一些关键问题
- 语义理解
- 语法分析
- 机器翻译
- 问答系统
语言和语意
Word2Vec介绍
通过离散符号表示单词
传统的NLP将单词视为离散的符号,因为在统计机器学习系统中,这些符号是稀疏的,表示这些符号的标准方法例如统计模型就将其整理成向量,OneHot就是其中一种。
OneHot编码:对应位置值为1,其它位置值为0。假如中文只有三个字:我是谁,那么“我”就表示为[1, 0, 0],“是”就表示为[0, 1, 0],“谁”就表示为[0, 0, 1]。
一个显然的问题就是需要建立一个跟文字库一样大的向量,比如《新华字典》中有13000个汉字,那么相应的OneHot编码向量的长度就是13000。
另外一个问题就是这种向量没有办法表示单词之间的相关性和相似性。OneHot编码向量在数学中是相互正交的,也就是说任何两个词向量之间都不相关,显然跟实际的语意不符。
通过上下文表示单词
分布语意:一个单词的含义是由经常出现在该单词附近的单词决定的。
通过上下文来表示单词的语意是一个重大成功,应用在很多深度学习NLP方法中。
当一个词出现在文本中时,一般是有一个上下文的语境的,而它的含义也由上下文的语境决定。
一般一个单词有两种表示,一种是这个单词作为核心的时候,由它的上下文得到的词向量,另一种是这个单词作为其它单词的上下文时,用于计算其它单词词向量的表示。
词向量(词嵌入)
Word2Vec为每个单词建立一个密集向量,这样语意相近的单词词向量也相近,可以通过向量点积来衡量两个单词的相似性。
Word2Vec
Word2Vec是一种学习词向量的框架。
思想:
- 有一个巨大的语料库
- 每个单词有一个固定长度表达的向量
- 对于每个位置t,都有一个中心单词c和窗口单词组o
- 基于当前词向量可以计算上下文单词出现的概率,也可以基于上下文单词计算当前词向量出现的概率
- 不断调整词向量,最大化出现概率
Word2Vec
目标函数
对于每一个位置 t = 1, …, T,预测固定窗口大小m的上下文单词
给定中心词wtw_{t}wt,数据可能性为:L(θ)=∏⊂t=1T∏⊂m≤j≤mj≠0P(wt+j∣wt;θ)L(\theta)=\prod_{\sub{t=1}}^{T} \prod_{\sub{m \leq j \leq m \\ j \neq 0}} P\left(w_{t+j} \mid w_{t} ; \theta\right)L(θ)=∏⊂t=1T∏⊂m≤j≤mj=0P(wt+j∣wt;θ),θ\thetaθ是要优化的模型参数。
目标函数是负的平均对谁似然:J(θ)=−1TlogL(θ)=−1T∑t=1T∑⊂−m≤j≤mj≠0logP(wt+j∣wt;θ)J(\theta)=-\frac{1}{T} \log L(\theta)=-\frac{1}{T} \sum_{t=1}^{T} \sum_{\sub{-m \leq j \leq m \\ j \neq 0}} \log P\left(w_{t+j} \mid w_{t} ; \theta\right)J(θ)=−T1logL(θ)=−T1∑t=1T∑⊂−m≤j≤mj=0logP(wt+j∣wt;θ)。
之所以做对数转换是因为对于计算机来说加法计算处理起来比乘法计算更容易,最小化目标函数即可最大化预测概率。
那怎么计算在给定中心词wtw_{t}wt时预测上下文的概率P(wt+j∣wt;θ)P\left(w_{t+j} \mid w_{t} ; \theta\right)P(wt+j∣wt;θ)呢?
对于每个单词w都有两种表示向量:
- 当w为中心单词时:vwv_{w}vw
- 当w为上下文单词时:uwu_{w}uw
训练两组词向量是为了计算梯度的时候求导更方便,如果只用一个词向量v,那么softmax计算的概率公式里就会出现平方项,求导会很麻烦,如果用两个词向量,求导会很干净。
事实上窗口移动的时候,先前窗口的中心词会变成当前窗口的上下文词,先前窗口的某一个上下文词会变成当前窗口的中心词。所以这两组词向量用来训练的词对其实很相近,训练结果也会很相近。一般做法是取两组向量的平均值作为最后的词向量。
然后对于中心单词c和上下文单词o:P(o∣c)=exp(uoTvc)∑w∈Vexp(uwTvc)P(o \mid c)=\frac{\exp \left(u_{o}^{T} v_{c}\right)}{\sum_{w \in V} \exp \left(u_{w}^{T} v_{c}\right)}P(o∣c)=∑w∈Vexp(uwTvc)exp(uoTvc)
- 点乘uTv=u.v=∑i=1nuiviu^{T} v=u . v=\sum_{i=1}^{n} u_{i} v_{i}uTv=u.v=∑i=1nuivi衡量了单词o和单词c的相似性,点乘结果越大,两个单词越相似
- 幂运算可以保证分子为正数
- 分母对于给定概率分布可以标准化整个词汇表
这是Softmax函数的一个样例,softmax(xi)=exp(xi)∑j=1nexp(xj)=pi\operatorname{softmax}\left(x_{i}\right)=\frac{\exp \left(x_{i}\right)}{\sum_{j=1}^{n} \exp \left(x_{j}\right)}=p_{i}softmax(xi)=∑j=1nexp(xj)exp(xi)=pi,Softmax函数可以将任意给定值xix_{i}xi映射为概率分布pip_{i}pi。
- soft:对于比较小的xix_{i}xi也会给一个概率
- max:对于最大的xix_{i}xi给予最大的概率
怎么训练词向量
为了训练模型,我们逐步调整参数,使损失最小化。θ\thetaθ是一个表示我们模型的所有参数的长向量,也就是词向量,每个单词都有两种表示,并且拥有相同的维度。
接下来就是通过梯度下降算法计算所有向量的梯度
以上只是对中心单词参数进行求导,还需要对上下文单词参数进行求导,然后才能进行最小化。
优化:梯度下降
我们有一个损失函数J(θ)J(\theta)J(θ),想要最小化它,可以采用梯度下降算法,对于当前参数θi\theta_{i}θi,计算J(θ)J(\theta)J(θ)的梯度,然后朝着负梯度的方向重复缓步更新。
梯度更新公式:θnew =θold−α∇θJ(θ)\theta^{\text {new }}=\theta^{o l d}-\alpha \nabla_{\theta} J(\theta)θnew =θold−α∇θJ(θ)
随机梯度下降
J(θ)J(\theta)J(θ)是语料库中所有窗口的函数(可能有数十亿!),所以∇θJ(θ)\nabla_{\theta} J(\theta)∇θJ(θ)计算成本很高,可以通过随机梯度下降解决,重复采样窗口并更新。
Word2Vec的效果
https://colab.research.google.com/drive/19qBGayk3pVBqsG0RMHz0CduVCdvAj8dw?usp=sharing
斯坦福大学CS224N-深度学习与自然语言处理:课程1-笔记相关推荐
- 斯坦福cs224d(深度学习在自然语言处理上的应用)Lecture 2
原文作者:Rohit Mundra, Richard Socher 原文翻译:@熊杰(jie.xiong.cs@gmail.com) && @王昱森 内容调整与校对:寒小阳 & ...
- 资源 | 斯坦福大学Tensorflow深度学习课程表
导读 | 孟岩 现在学习 AI,特别是上手深度学习,已经清楚的出现了两条路子. 一条以理论为中心,扎扎实实从数学基础开始,把数据科学.机器学习大基础夯实,然后顺势向上学习Deep Learning,再 ...
- Yann LeCun主讲,纽约大学《深度学习》2021春季课程放出,免费可看
关注公众号,发现CV技术之美 本文转载自机器之心,编辑陈萍. Yann LeCun 主讲的<深度学习>课程现已全部在线可看! 深度学习课程在网上一直有许多教学资源,比较出名的有吴恩达老师的 ...
- 全球名校AI课程库(6)| Stanford斯坦福 · 深度学习与自然语言处理课程『Natural Language Processing with Deep Learning』
- 深度学习与自然语言处理教程(8) - NLP中的卷积神经网络(NLP通关指南·完结)
作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://www.showmeai.tech/article-d ...
- 深度学习与自然语言处理教程(4) - 句法分析与依存解析(NLP通关指南·完结)
作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://www.showmeai.tech/article-d ...
- 深度学习与自然语言处理教程(5) - 语言模型、RNN、GRU与LSTM(NLP通关指南·完结)
作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://www.showmeai.tech/article-d ...
- 深度学习与自然语言处理教程(3) - 神经网络与反向传播(NLP通关指南·完结)
作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://www.showmeai.tech/article-d ...
- 深度学习与自然语言处理教程(7) - 问答系统(NLP通关指南·完结)
作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://www.showmeai.tech/article-d ...
- 深度学习与自然语言处理教程(6) - 神经机器翻译、seq2seq与注意力机制(NLP通关指南·完结)
作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://www.showmeai.tech/article-d ...
最新文章
- ionic开发中页面跳转隐藏底部Ttab
- MySQL的datetime日期格式化,和Oracle的datetime日期格式化
- MySQL Administrator
- IDEA基于kotlin开发android程序配置小结
- 畅享10e会有鸿蒙吗,功能虽小作用很大 华为畅享10e隐藏功能大揭秘
- php调用shell脚本安全,从PHP调用的shell脚本问题
- 不知道工作组名称怎样加入_第一次穿汉服不知道该怎样选择!一招教你用体型选汉服!...
- LVS/NAT的配置和应用
- 用 python 画散点图与气泡图
- 智能电气阀门定位器原理
- python机械臂仿真_如何用ROS+Rviz+Arbotix控制器仿真为六自由度机械臂建模-工业电子-与非网...
- 设计模式篇(六)——观察者模式
- 用IDM怎么批量下载视频
- 从明源动力到创新工场这一路走来
- vivado和modelsim联合仿真,提示giving up waiting on lock,error:verilog compiler exiting解决方法
- python生成热力图_pyHeatMap生成热力图
- Python下通过PR曲线值计算AP
- 网络攻防 横向移动_网络安全101的数据分析:检测横向移动
- Win10使用Geth搭建本地开发私有链(2021版)
- 自己在VB编程过程中遇到的--不能加载MSCOMCTL.OCX提示
热门文章
- ppt计算机实验报告册,PPT实验报告模板
- 仿站源码上传服务器,仿爱站站长查询工具网源码带后台完整版
- 鸿蒙系统操作界面跟苹果很像,华为鸿蒙系统的操作界面可能长这样 和安卓全完不同而且图标也太酷了...
- 国开大学计算机应用基础形考作业三答案,国开学习指南形考作业答案
- 有手就行:零基础渗透网站步骤
- 一点点矩阵知识1:由一个矩阵理论题目展开的关于矩阵的核(kernel)与像(Image)的讲解。
- win7系统可以禁止的服务器,win7旗舰版怎么禁用不必要的系统服务项
- C++fseek函数
- 八人抢答器讲解_八人智力竞赛抢答器课程设计报告
- 指数加权移动平均法(EWMA)