作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI
教程地址:http://www.showmeai.tech/tutorials/36
本文地址:http://www.showmeai.tech/article-detail/244
声明:版权所有,转载请联系平台与作者并注明出处
收藏ShowMeAI查看更多精彩内容
ShowMeAI为斯坦福CS224n《自然语言处理与深度学习(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了GIF动图!视频和课件等资料的获取方式见文末。
授课计划
- Final project types and details; assessment revisited / 大项目细节
- Finding research topics; a couple of examples / 寻找研究主题
- Finding data / 项目数据
- Review of gated neural sequence models / 门控神经序列模型回顾
- A couple of MT topics / 机器翻译主题
- Doing your research / 研究方式
- Presenting your results and evaluation / 结果呈现和评估
1.大项目细节
1.1 Course work and grading policy
1.2 Mid-quarter feedback survey
1.3 最终项目
1.4 默认最终项目:基于SQuAD的问答系统
1.5 什么情况下选择默认项目
1.6 本节内容是相关的
At a lofty level
- 了解一些关于做研究的知识是有好处的
At a prosaic level
我们将接触到:
- 基线
- 基准
- 评估
- 错误分析
- 论文写作
- 这也是默认最终项目的一大特点
1.7 什么情况下选择Custom Final Project
1.8 项目提议与候选
1.9 项目进度
2.寻找研究主题
2.1 寻找研究主题
所有科学的两个基本出发点
- [钉子]从一个(领域)感兴趣的问题开始,并试图找到比目前已知的/使用的更好的方法来解决它。
- [锤子]从一个感兴趣的技术方法开始,找出扩展或改进它或应用它的好方法
2.2 项目类型
这不是一个详尽的列表,但大多数项目都是其中之一
$$1$$. 找到感兴趣的应用程序/任务,探索如何有效地接近/解决它,通常应用现有的神经网络模型
$$2$$. 实现了一个复杂的神经结构,并在一些数据上展示了它的性能
$$3$$. 提出一种新的或变异的神经网络模型,并探讨其经验上的成功
$$4$$. 分析项目。分析一个模型的行为:它如何表示语言知识,或者它能处理什么样的现象,或者它犯了什么样的错误
$$5$$. 稀有的理论项目:显示模型类型、数据或数据表示的一些有趣的、重要的属性
2.3 示例项目:Deep Poetry-诗歌生成
2.4 项目示例:Implementation and Optimization of Differentiable Neural Computers
2.5 项目示例:Improved Learning through Augmenting the Loss
2.6 项目示例:Word2bits - Quantized Word Vectors
2.7 如何寻找有趣的项目应用点
2.8 如何能够对算法优化突破
2.9 寻找一个主题
2.10 项目注意点
合适的数据
- 通常目标:10000 +标记的例子里程碑
- 可行的任务
- 自动评估指标
- NLP是项目的核心
3.项目数据
3.1 寻找合适的数据
有些人会为一个项目收集他们自己的数据
- 你可能有一个使用“无监督”数据的项目
- 你可以注释少量的数据
- 你可以找到一个网站,有效地提供注释,如喜欢,明星,评级等
有些人使用现有的研究项目或公司的数据
- 如果你可以提供提交、报告等数据样本
大多数人使用现有的,由以前的研究人员建立的数据集
- 你有一个快速的开始,有明显的前期工作和基线
3.2 数据:Linguistic Data Consortium
3.3 机器翻译
- http://statmt.org
- 特别要注意各种 WMT 共享任务
3.4 依存解析
3.5 其他
现在网上有很多其他的数据集可以用于各种各样的目的
- 看Kaggle
- 看研究论文
看数据集列表
4.门控神经序列模型回顾
4.1 再回顾一下GRU和机器翻译
4.2 BPTT反向传播
- 梯度消失问题十分严重
当梯度趋近于 时,我们无法判断
- 数据中 和 之间不再存在依赖关系
- 参数设置错误(梯度消失条件)
- 这是原始转换函数的问题吗?
- 有了它,时间导数就会消失
4.3 GRU模型
- 这意味着错误必须通过所有中间节点反向传播
- 或许我们可以创建快捷连接
我们可以创建自适应的快捷连接
- 候选更新
- 更新门
- 表示逐元素的乘法
让网络自适应地修剪不必要的连接
- 候选更新
- 重置门
- 更新门
- 门控循环单位更现实
- 注意,在思想和注意力上有一些重叠
- 两个最广泛使用的门控循环单位:GRU和LSTM
4.4 LSTM模型
- (绿色)LSTM门的所有操作都可以被遗忘/忽略,而不是把所有的东西都塞到其他所有东西上面
- (橙色)下一步的非线性更新就像一个RNN
- (紫色)这部分是核心(ResNets也是如此)不是乘,而是将非线性的东西和 相加得到 。,之间存在线性联络
5.机器翻译主题
5.1 神经翻译系统的词汇问题
- Softmax 计算代价昂贵
5.2 文本生成问题
词汇生成问题
- 词汇量通常适中:50K
5.3 解决方法
- Hierarchical softmax : tree-structured vocabulary
- Noise-contrastive estimation : binary classification
Train on a subset of the vocabulary at a time; test on a smart on the set of possible translations
- 每次在词汇表的子集上进行训练,测试时自适应的选择词汇表的子集
- Jean, Cho, Memisevic, Bengio. ACL2015
Use attention to work out what you are translating
- You can do something simple like dictionary lookup
- 直接复制原句中的生词: “复制”模型
- More ideas we will get to : Word pieces; char. Models
5.4 机器翻译评估
人工(最好的!?)
- Adequacy and Fluency 充分性和流畅性(5或7尺度)
- 错误分类
- 翻译排名比较(例如人工判断两个翻译哪一个更好)
在使用MT作为子组件的应用程序中进行测试
- 如问答从外语文件
- 无法测试翻译的很多方面(例如,跨语言IR)
自动度量
- BLEU (双语评价替手)
- Others like TER, METEOR, ……
5.5 BLEU评估标准
N-gram 精度(得分在0和1之间)
- 参考译文中机器译文的 N-gram 的百分比是多少?
- 一个n-gram是由n个单词组成的序列
- 在一定的n-gram水平上不允许两次匹配相同的参考译文部分(两个MT单词airport只有在两个参考单词airport时才正确;不能通过输入“the the the the the”来作弊)
- 也要用 unigrams 来计算单位的精度,等等
简洁惩罚 BP
- 不能只输入一个单词“the”(精确度1.0!)
- 人们认为要“玩弄”这个系统是相当困难的。例如找到一种方法来改变机器的输出,使BLEU上升,但质量不会下降。
BLEU是一个加权的几何平均值,加上一个简洁的惩罚因子
- 注意:只在语料库级起作用(0会杀死它);句子级有一个平滑的变体
- 下图是 n-grams 1-4 的BLEU计算公式
5.6 BLEU实战
5.7 多参考翻译-Multiple Reference Translations
5.8 BLEU预估还不错
5.9 机器翻译自动评估
人们开始优化系统最大化BLEU分数
- BLEU分数迅速提高
- BLEU和人类判断质量之间的关系一直下降
- MT BLEU分数接近人类翻译但是他们的真实质量仍然远低于人类翻译
想出自动MT评估已经成为自己的研究领域
- 有许多建议:TER, METEOR, MaxSim, SEPIA,我们自己的RTE-MT
- TERpA 是一个具有代表性的,好处理一些词的选择变化的度量
- MT研究需要一些自动的度量,以允许快速的开发和评估
6.研究方式
6.1 项目研究示例
$$1$$.. 定义任务
- 示例:总结
$$2$$. 定义数据集
a) 搜索学术数据集
- 他们已经有基线
- 例如 Newsroom Summarization Dataset https://summari.es
b) 定义你自己的数据(更难,需要新的基线)
- 允许连接到你的研究
- 新问题提供了新的机会
- 有创意:Twitter、博客、新闻等等。有许多整洁的网站为新任务提供了创造性的机会
$$3$$. 数据集卫生
- 开始的时候,分离devtest and test
- 接下来讨论更多
$$4$$. 定义你的度量(s)
- 在线搜索此任务的已建立的度量
- 摘要: Rouge (Recall-Oriented Understudy for GistingEvaluation) ,它定义了人工摘要的 n-gram重叠
- 人工评价仍然更适合于摘要;你可以做一个小规模的人类计算
$$5$$. 建立基线
- 首先实现最简单的模型(通常对unigrams、bigrams 或平均字向量进行逻辑回归)
- 在训练和开发中计算指标
如果度量令人惊讶且没有错误,那么
- 完成!问题太简单了。需要重启
$$6$$. 实现现有的神经网络模型
- 在训练和开发中计算指标
- 分析输出和错误
- 这门课的最低标准
$$7$$. 永远要接近你的数据(除了最后的测试集)
- 可视化数据集
- 收集汇总统计信息
- 查看错误
- 分析不同的超参数如何影响性能
$$8$$. 通过良好的实验设置,尝试不同的模型和模型变体,达到快速迭代的目的
- Fixed window neural model
- Recurrent neural network
- Recursive neural network
- Convolutional neural network
- Attention-basedmodel
7.结果呈现和评估
7.1 数据集
- 许多公开可用的数据集都是使用train/dev/test结构发布的。我们都在荣誉系统上,只在开发完成时才运行测试集
- 这样的分割假设有一个相当大的数据集
- 如果没有开发集或者你想要一个单独的调优集,那么你可以通过分割训练数据来创建一个调优集,尽管你必须权衡它的大小/有用性与训练集大小的减少
- 拥有一个固定的测试集,确保所有系统都使用相同的黄金数据进行评估。这通常是好的,但是如果测试集具有不寻常的属性,从而扭曲了任务的进度,那么就会出现问题。
7.2 训练模型与训练集
训练时,模型过拟合
- 该模型正确地描述了你所训练的特定数据中发生的情况,但是模式还不够通用,不适合应用于新数据
- 监控和避免问题过度拟合的方法是使用独立的验证和测试集…
- 你在一个训练集上构建(评价/训练)一个模型。
通常,然后在另一个独立的数据集上设置进一步的超参数,即调优集
- 调优集是用来调整超参数的训练集
在开发集(开发测试集或验证集)上度量进度
- 如果你经常这样做,就会过度适应开发集,所以最好有第二个开发集,即dev2set
只有最后,你评估和最终数据在一个测试集
- 非常少地使用最终测试集……理想情况下只使用一次
- 训练、调优、开发和测试集需要完全不同
在训练所使用的数据集上进行测试是无效的
- 你将得到一个错误的良好性能。我们通常训练时会过拟合
你需要一个独立的调优
- 如果调优与train相同,则无法正确设置超参数
如果你一直运行在相同的评价集,你开始在评价集上过拟合
- 实际上,你是在对评估集进行“训练”……你在学习那些对特定的评估集有用和没用的东西,并利用这些信息
- 要获得系统性能的有效度量,你需要另一个未经训练的独立测试集,即 dev2 和最终测试
7.3 训练细节与建议
从积极的态度开始
- 神经网络想要学习
- 如果网络没有学习,你就是在做一些事情来阻止它成功地学习
认清残酷的现实
- 有很多事情会导致神经网络完全不学习或者学习不好
- 找到并修复它们(“调试和调优”)通常需要更多的时间,而不是实现你的模型
很难算出这些东西是什么
- 但是经验、实验和经验法则会有所帮助!
7.4 关于学习率
7.5 关于参数初始化
7.6 训练一个RNN
$$1$$. 使用LSTM或GRU:它使你的生活变得更加简单!
$$2$$. 初始化递归矩阵为正交矩阵
$$3$$. 用一个可感知的(小的)比例初始化其他矩阵
$$4$$. 初始化忘记门偏差为1:默认记住
$$5$$. 使用自适应学习速率算法:Adam, AdaDelta,…
$$6$$. 梯度范数的裁剪:1-5似乎是一个合理的阈值,当与Adam 或 AdaDelta一起使用
$$7$$. 要么只使用 dropout vertically,要么研究使用Bayesian dropout(Gal和gahramani -不在PyTorch中原生支持)
$$8$$. 要有耐心!优化需要时间
7.7 实验策略
- 增量地工作!
- 从一个非常简单的模型开始
- 让它开始工作一个接一个地添加修饰物,让模型使用它们中的每一个(或者放弃它们)
- 最初运行在少量数据上
你会更容易在一个小的数据集中看到bug
- 像8个例子这样的东西很好
- 通常合成数据对这很有用
- 确保你能得到100%的数据
- 否则你的模型肯定要么不够强大,要么是破碎的
在大型数据集中运行
模型优化后的训练数据仍应接近100%
- 否则,你可能想要考虑一种更强大的模式来过拟合训练数据
- 对训练数据的过拟合在进行深度学习时并不可怕
- 这些模型通常善于一般化,因为分布式表示共享统计强度,和对训练数据的过度拟合无关
但是,现在仍然需要良好的泛化性能
对模型进行正则化,直到它不与dev数据过拟合为止
- 像L2正则化这样的策略是有用的
- 但通常Dropout是成功的秘诀
7.8 模型细节
- 查看你的数据,收集汇总统计信息
- 查看你的模型的输出,进行错误分析
- 调优超参数对于神经网络几乎所有的成功都非常重要
7.9 项目总结
7.10 祝你项目顺利
8.视频教程
可以点击 B站 查看视频的【双语字幕】版本
9.参考资料
- 本讲带学的在线阅翻页本
- 《斯坦福CS224n深度学习与自然语言处理》课程学习指南
- 《斯坦福CS224n深度学习与自然语言处理》课程大作业解析
- 【双语字幕视频】斯坦福CS224n | 深度学习与自然语言处理(2019·全20讲)
- Stanford官网 | CS224n: Natural Language Processing with Deep Learning
ShowMeAI 系列教程推荐
- 大厂技术实现 | 推荐与广告计算解决方案
- 大厂技术实现 | 计算机视觉解决方案
- 大厂技术实现 | 自然语言处理行业解决方案
- 图解Python编程:从入门到精通系列教程
- 图解数据分析:从入门到精通系列教程
- 图解AI数学基础:从入门到精通系列教程
- 图解大数据技术:从入门到精通系列教程
- 图解机器学习算法:从入门到精通系列教程
- 机器学习实战:手把手教你玩转机器学习系列
- 深度学习教程 | 吴恩达专项课程 · 全套笔记解读
- 自然语言处理教程 | 斯坦福CS224n课程 · 课程带学与全套笔记解读
自然语言处理(NLP)系列教程
- NLP教程(1)- 词向量、SVD分解与Word2vec
- NLP教程(2)- GloVe及词向量的训练与评估
- NLP教程(3)- 神经网络与反向传播
- NLP教程(4)- 句法分析与依存解析
- NLP教程(5)- 语言模型、RNN、GRU与LSTM
- NLP教程(6)- 神经机器翻译、seq2seq与注意力机制
- NLP教程(7)- 问答系统
- NLP教程(8)- NLP中的卷积神经网络
- NLP教程(9)- 句法分析与树形递归神经网络
斯坦福 CS224n 课程带学详解
- 斯坦福NLP课程 | 第1讲 - NLP介绍与词向量初步
- 斯坦福NLP课程 | 第2讲 - 词向量进阶
- 斯坦福NLP课程 | 第3讲 - 神经网络知识回顾
- 斯坦福NLP课程 | 第4讲 - 神经网络反向传播与计算图
- 斯坦福NLP课程 | 第5讲 - 句法分析与依存解析
- 斯坦福NLP课程 | 第6讲 - 循环神经网络与语言模型
- 斯坦福NLP课程 | 第7讲 - 梯度消失问题与RNN变种
- 斯坦福NLP课程 | 第8讲 - 机器翻译、seq2seq与注意力机制
- 斯坦福NLP课程 | 第9讲 - cs224n课程大项目实用技巧与经验
- 斯坦福NLP课程 | 第10讲 - NLP中的问答系统
- 斯坦福NLP课程 | 第11讲 - NLP中的卷积神经网络
- 斯坦福NLP课程 | 第12讲 - 子词模型
- 斯坦福NLP课程 | 第13讲 - 基于上下文的表征与NLP预训练模型
- 斯坦福NLP课程 | 第14讲 - Transformers自注意力与生成模型
- 斯坦福NLP课程 | 第15讲 - NLP文本生成任务
- 斯坦福NLP课程 | 第16讲 - 指代消解问题与神经网络方法
- 斯坦福NLP课程 | 第17讲 - 多任务学习(以问答系统为例)
- 斯坦福NLP课程 | 第18讲 - 句法分析与树形递归神经网络
- 斯坦福NLP课程 | 第19讲 - AI安全偏见与公平
- 斯坦福NLP课程 | 第20讲 - NLP与深度学习的未来