关于自然语言处理:斯坦福NLP课程-第9讲-cs224n课程大项目实用技巧与经验

34次阅读

共计 7576 个字符,预计需要花费 19 分钟才能阅读完成。

作者:韩信子 @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

  • https://catalog.ldc.upenn.edu/
  • https://linguistics.stanford….

3.3 机器翻译

  • http://statmt.org
  • 特地要留神各种 WMT 共享工作

3.4 依存解析

  • https://universaldependencies…

3.5 其余

当初网上有很多其余的数据集能够用于各种各样的目标

  • 看 Kaggle
  • 看钻研论文
  • 看数据集列表

    • https://machinelearningmaster…
    • https://github.com/niderhoff/…

4. 门控神经序列模型回顾

4.1 再回顾一下 GRU 和机器翻译

4.2 BPTT 反向流传

  • 梯度隐没问题非常重大
  • 当梯度趋近于 \(0\) 时,咱们无奈判断

    • 数据中 \(t\) 和 \(t+n\) 之间不再存在依赖关系
    • 参数设置谬误(梯度隐没条件)

  • 这是原始转换函数的问题吗?

$$
f(h_{t-1}, x_t) = \tanh(W[x_t] + U h_{t-1} + b)
$$

  • 有了它,工夫导数就会隐没

$$
\frac{\partial h_{t+1}}{\partial h_{t}}=U^{\top} \frac{\partial \tanh (a)}{\partial a}
$$

4.3 GRU 模型

  • 这意味着谬误必须通过所有两头节点反向流传
  • 或者咱们能够创立快捷连贯

咱们能够创立自适应的快捷连贯

$$
f\left(h_{t-1}, x_{t}\right)=u_{t} \odot \tilde{h}_{t}+\left(1-u_{t}\right) \odot h_{t-1}
$$

  • 候选更新 \(\tilde{h}_{t}=\tanh \left(W\left[x_{t}\right]+U h_{t-1}+b\right)\)
  • 更新门 \(u_{t}=\sigma\left(W_{u}\left[x_{t}\right]+U_{u} h_{t-1}+b_{u}\right)\)
  • \(\odot\) 示意逐元素的乘法

让网络自适应地修剪不必要的连贯

$$
f\left(h_{t-1}, x_{t}\right)=u_{t} \odot \tilde{h}_{t}+\left(1-u_{t}\right) \odot h_{t-1}
$$

  • 候选更新 \(\tilde{h}_{t}=\tanh \left(W\left[x_{t}\right]+U\left(r_{t} \odot h_{t-1}\right)+b\right)\)
  • 重置门 \(r_{t}=\sigma\left(W_{r}\left[x_{t}\right]+U_{r} h_{t-1}+b_{r}\right)\)
  • 更新门 \(u_{t}=\sigma\left(W_{u}\left[x_{t}\right]+U_{u} h_{t-1}+b_{u}\right)\)

  • 门控循环单位更事实
  • 留神,在思维和注意力上有一些重叠

  • 两个最宽泛应用的门控循环单位:GRU 和 LSTM

4.4 LSTM 模型

  • (绿色)LSTM 门的所有操作都能够被忘记 / 疏忽,而不是把所有的货色都塞到其余所有货色下面
  • (橙色)下一步的非线性更新就像一个 RNN
  • (紫色)这部分是外围(ResNets 也是如此)不是乘,而是将非线性的货色和 \(c_{t−1}\) 相加失去 \(c_t\)。\(c_t\),\(c_{t−1}\)之间存在线性联系

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 与深度学习的将来

正文完
 0