- 作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI
- 教程地址:http://www.showmeai.tech/tutorials/36
- 本文地址:http://www.showmeai.tech/article-detail/258
- 声明:版权所有,转载请联系平台与作者并注明出处
- 收藏ShowMeAI查看更多精彩内容
ShowMeAI为斯坦福CS224n《自然语言处理与深度学习(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了GIF动图!视频和课件等资料的获取方式见文末。
1.NLP和深度学习的未来
5年前的深度学习和NLP
- No Seq2Seq
- No Attention
- No large-scale QA / reading comprehension datasets
- No TensorFlow or Pytorch
利用无标签数据
- Back-translation 和无监督机器翻译
- 提高预训练和 GPT-2
接下来呢?
- NLP 技术的风险和社会影响
- 未来的研究方向
1.1 为什么深度学习最近如此成功?
- 扩展能力 (模型和数据大小) 是深度学习近些年来成功的原因
- 过去受到计算资源和数据资源的规模限制
1.2 三个使用大量数据获得成功的范例
图像识别:被 Google, Facebook 等广泛使用
- ImageNet:14 million examples
机器翻译:谷歌翻译等
- WMT:Millions of sentence pairs
打游戏:Atari Games, AlphaGo, and more
- 10s of millions of frames for Atari AI
- 10s of millions of self-play games for AlphaZero
1.3 NLP 数据集
- 即使是英语,大部分任务也只有 \(100k\) 或更少的有标签样本
其他语言的可用数据就更少了
- 有成千上万的语言,其中有成百上千的语言的母语使用者是大于一百万的
- 只有 \(10\%\) 的人将英语作为他们的第一语言
- 越来越多的解决方案是使用 无标签 数据
2.使用未标记数据进行翻译
2.1 机器翻译数据
获得翻译需要人类的专业知识
- 限制数据的大小和领域
- 语言文本更容易获得
2.2 预训练
- ① 分别将两个预训练好的语言模型作为 Encoder 和 Decoder
- ② 然后使用双语数据共同训练
- English -> German Results:2+ BLEU point improvement
- 英语到德语的翻译结果,BLEU 有 \(2\) 个点的提升
2.3 自训练
- 预训练的问题:预训练中两个语言之间没有交互
- 自训练:标记未标记的数据以获得有噪声的训练样本
- 自训练技术没有被广泛使用,因为其训练的来源是其之前的产出
2.4 Back-Translation
- 有两种方向相反的机器翻译模型 en→fr 和 fr→en
- 不再循环
- 模型再也看不到
坏
翻译,只有坏输入
补充讲解
- 模型训练时会加入一些标记数据,确保 en→fr 模型的输出,即 fr→en 模型的输入,从而保证模型的正常
- 如何协调对标记数据与未标记数据的训练呢?
- 先在标记数据上训练两个模型
- 然后在未标记数据上标记一些数据
- 再在未标记数据上进行反向翻译的训练
- 重复如上的过程
- 4.5M English-German sentence pairs and 226M monolingual sentences
2.5 如果没有双语数据呢?
补充讲解
- 当我们只有未标记的句子时,我们使用一种比完全的翻译更简单的任务
- 不是做句子翻译
- 而是做单词翻译
- 我们想要找到某种语言的翻译但不使用任何标记数据
2.6 无监督单词翻译
跨语言文字嵌入 cross-lingual word embeddings
- 两种语言共享嵌入空间
- 保持词嵌入的正常的好属性
- 但也要接近他们的翻译
- 想从单语语料库中学习
补充讲解
- 如上图所示,在共享的嵌入空间中,每个英文单词都有其对应的德语单词,并且距离很近
- 我们在使用时,只需选取英文单词在嵌入空间中距离最近的德语单词,就可以获得对应的翻译
- 词嵌入有很多结构
- 假设:不同语言之间的结构应该相似
补充讲解
- 即使是运行两次 word2vec 会获得不同的词嵌入,嵌入空间的结构有很多规律性
- 如上图所示,是英语与意大利语的词嵌入,矢量空间看上去彼此十分不同,但是结构是十分相似的
- 可以理解为,在英语词嵌入空间中的 cat 与 feline 的距离与意大利语词典如空间中的 gatto 和 felino 之间的距离是相似的
- 我们在跨语言的词嵌入中想要学习不同种语言的词嵌入之间的对齐方式
- 首先在单语语料库上运行 word2vec 以得到单词嵌入 \(X\) 和 \(Y\)
- 学习一个 (正交) 矩阵 \(W\) 使得 \(WX \sim Y\)
- 使用对抗训练来学习 \(W\)
- 鉴别器:预测一个嵌入是来自于 \(Y\) 的还是来自于 \(X\) 并使用 \(W\) 转换后的嵌入
- 训练 \(W\) 使得鉴别器难以区分这两者
- 其他可以被用来进一步提升效果的方法参见 Word Translation without Parallel Data
- 正交性来约束词嵌入的原因是为了防止过拟合
- 我们假设我们的嵌入空间是类似的,只是需要对英语的词向量和意大利语的词向量进行旋转
模型:不考虑不同输入和输出语言,使用相同的(共享的) encoder-decoder (没有使用注意力)
- 使用 cross-lingual 的词嵌入来初始化,即其中的英语和法语单词应该看起来完全相同
补充讲解
- 可以喂给 encoder 一个英文句子,也可以喂一个法语句子,从而获得 cross-lingual embeddings ,即英文句子和法语句子中各个单词的词嵌入,这意味着 encoder 可以处理任何输入
- 对于 decoder,我们需要喂一个特殊的标记
来告诉模型应该生成什么语言的输出 - 可以用做一个 auto-encoder,完成 en→en ,即再现输入序列
2.7 无监督神经机器翻译
- Training objective 1:降噪自编码器
Training objective 2:back translation (只有无标签的数据)
- 首先翻译 fr→en
- 然后使用一个监督样本来训练 en→fr
补充讲解
- 注意,这里的 fr→en 输出的句子,是 en→fr 输入的句子,这个句子是有些混乱的,不完美的,例如这里的
I am student
,丢失了a
- 我们需要训练模型,即使是有这样糟糕的输入,也能够还原出原始的法语句子
2.8 为什么无监督会有效
- 跨语言嵌入和共享编码器为模型提供了一个起点
- 使用 cross-lingual 的词嵌入来初始化,即其中的英语和法语单词应该看起来完全相同
补充解释
- 共享编码器
- 例如我们以一个法语句子作为模型的输入
- 由于嵌入看起来非常相似,并且我们使用的是相同的 encoder
- 因此 encoder 得到的法语句子的 representation 应该和英语句子的 representation 非常相似
- 所以希望能够获得和原始的英语句子相同的输出
- 训练目标鼓励语言无关(language-agnostic)的表示
- 获得与语言类型无关的 encoder vector
2.9 无监督机器翻译
补充讲解
- 水平线是无监督模型,其余的都是有监督的
- 在一定的监督数据规模下,无监督模型能够取得和监督模型类似的效果
- 当然,随着数据规模的增大,监督模型的效果会提升,超过无监督模型
2.10 属性迁移
- 还可以使用无监督的机器翻译模型完成属性转移
2.11 一些缺点
- 英语,法语和德语是相当类似的语言
在非常不同的语言上 (例如英语和土耳其语)
完全的无监督的词翻译并不十分有效。需要种子字典可能的翻译
- 简单的技巧:使用相同的字符串从词汇
- UNMT 几乎不工作
2.12 跨语言BERT
- 常规的 BERT ,有一系列的英语句子,并且会 mask 一部分单词
- 谷歌实际上已经完成的是训练好的多语言的 BERT
- 基本上是连接一大堆不同语言的语料库,然后训练一个模型
- masked LM training objective
- 由Facebook 提出的
- 联合了 masked LM training objective 和翻译
- 给定一个英语句子和法语句子,并分别 mask 一部分单词,并期望模型填补
3.大模型和GPT-2
3.1 训练大模型
3.2 机器学习大趋势
补充说明
- peta:用于计量单位,表示10的15次方,表示千万亿次
- FLOPS = FLoating-point Operations Per Second,每秒浮点运算次数
3.3 计算机视觉中的大模型
- 使用无监督技术的大规模计算机视觉模型
3.4 训练大模型
- 更好的硬件
- 数据和模型的并行化
3.5 GPT-2
- 只是一个非常大的 Transformer LM
40 GB的训练文本
- 投入相当多的努力去确保数据质量
- 使用 reddit 中获得高投票的网页 link
3.6 那么,GPT-2能做什么呢?
mg20-37.png 那么,GPT-2能做什么呢?
- 显然,语言模型建模(效果非常好)
- 在其没有训练过的数据上,都可以得到最先进的困惑度(perplexity)
Zero-Shot Learning:no supervised training data! 在没有接受过训练的情况下尝试完成任务
- Ask LM to generate from a prompt
3.7 GPT-2 结果
- GPT2在阅读理解、翻译、摘要生成、问答里的表现
3.8 GPT-2如何进行翻译?
- 它有一个很大的语料库,里面几乎全是英语
补充说明
- 由于数据集中存在一些翻译的例子
- 法语习语及其翻译
- 法语引用及其翻译
3.9 GPT-2 问答
- Simple baseline:1% accuracy
- GPT-2:~4% accuracy
- Cherry-picked most confident results 精选出最自信的结果
3.10 当模型变得更大时会发生什么?
- 对于一些任务,性能似乎随着 log (模型大小) 的增加而增加
- 但如下图所示趋势并不明朗
3.11 GPT-2相关事件
- 关于GPT2是否应该开源的一些争端
- 对于GPT2是否应该开源的一些说法
NLP专家应该做这些决定吗?
- 计算机安全专家?
- 技术和社会专家?
- 道德专家?
- 需要更多的跨学科科学
- 许多NLP具有较大社会影响的例子,尤其是对于偏见/公平
3.12 影响程度大的决策
越来越感兴趣用 NLP 帮助高影响力的决策
- 司法判决
- 招聘
- 等级测试
- 一方面,可以快速评估机器学习系统某些偏见
然而,机器学习反映了训练数据
- 甚至放大偏见…这可能导致更偏向数据的创建
- AI模型
偏见
- 在男女平等和法律领域
3.13 聊天机器人
4.BERT解决了什么?接下来做什么?
4.1 GLUE基线结果
- 逐年提升的GLUE结果
4.2 再也不用在神经网络模型设计技巧上反复琢磨?
- 往年会有很多不同的神经网络结构构建思路
- 在
attention is all you need
之下,这些结构不再热门
- 花费六个月来研究 体系结构的设计,得到了1个点 F1 的提升
- 只是让 BERT 扩大3倍,得到了 5个点 F1 的提升
- SQuAD 的 TOP20 参赛者都是用了 BERT
4.3 更难的自然语言理解
阅读理解
- 在长文档或多个文档
- 需要多跳推理
- 在对话中定位问答
许多现有阅读理解数据集的关键问题:人们写问题时看着上下文
- 不现实的
- 鼓励简单的问题
4.4 QuAC:基于上下文的问答
学生问问题,老师回答的对话
- 教师看到维基百科文章主题,学生不喜欢
- 仍然和人类水平有很大差距
4.5 HotPotQA
- 设计要求多跳推理
- 问题在多个文档
4.6 多任务学习
- NLP的另一个前沿是让一个模型执行许多任务。GLUE 和 DecaNLP是最近的例子
- 在BERT的基础上,多任务学习产生了改进
4.7 低资源支撑的场景
不需要很多计算能力的模型(不能使用BERT)
- 为移动设备尤其重要
- 低资源语言
低数据环境(few shot learning 小样本学习)
- ML 中的元学习越来越受欢迎
4.8 模型理解/可解释性
- 我们能得到模型预测的解释吗?
- 我们能理解模型,例如BERT知道什么和他们为什么工作这么好?
- NLP中快速增长的地区
- 对于某些应用程序非常重要(如医疗保健)
4.9 Diagnostic/Probing Classifiers
- 看看模型知道什么语言的信息
- 诊断分类器需要表示一个模型(例如BERT)作为输入,并做一些任务
- 只有诊断分类器被训练
- 诊断分类器通常非常简单(例如,单个softmax)
- 否则他们不通过模型表示来自省会学会完成任务
- 一些诊断任务
Results / 结果
- BERT 的低层表示在基础(低层次)任务中表现更好
4.10 NLP行业应用与发展
- NLP是快速增长的行业。尤其是两大领域:
对话
- 聊天机器人
- 客户服务
健康
- 理解健康记录
- 理解生物医学文献
4.11 结论
- 在过去的5年里,由于深度学习,进步很快
随着有能力训练更大的模型和更好地使用无监督数据,在去年有了更大的进展
- 是在NLP领域的激动人心的时刻
- NLP是正逐渐对社会产生巨大影响力,使偏差和安全等问题越来越重要
5.视频教程
可以点击 B站 查看视频的【双语字幕】版本
[video(video-1ccwQkLb-1652089877902)(type-bilibili)(url-https://player.bilibili.com/p...)(image-https://img-blog.csdnimg.cn/i...)(title-【双语字幕+资料下载】斯坦福CS224n | 深度学习与自然语言处理(2019·全20讲))]
6.参考资料
- 本讲带学的在线阅翻页本
- 《斯坦福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与深度学习的未来