提交 23389dfc 编写于 作者: qq_32476413's avatar qq_32476413
......@@ -51,7 +51,7 @@
### 三、提交
+ `fork` Github 项目
+ 将文档放在`docs`中。
+ 将文档**Markdown 格式**放在`docs`中。
+ `push`
+ `pull request`
......
......@@ -8,7 +8,12 @@
+ [ApacheCN 机器学习交流群 629470233](http://shang.qq.com/wpa/qunwpa?idkey=30e5f1123a79867570f665aa3a483ca404b1c3f77737bc01ec520ed5f078ddef)
+ [ApacheCN 学习资源](http://www.apachecn.org/)
+ [贡献指南](CONTRIBUTING.md)
## 贡献指南
笔记整理活动正在进行,请查看[贡献指南](CONTRIBUTING.md),并在[整体进度](https://github.com/apachecn/stanford-cs224n-notes-zh/issues/1)中领取任务。
> 请您勇敢地去翻译和改进翻译。虽然我们追求卓越,但我们并不要求您做到十全十美,因此请不要担心因为翻译上犯错——在大部分情况下,我们的服务器已经记录所有的翻译,因此您不必担心会因为您的失误遭到无法挽回的破坏。(改编自维基百科)
## 联系方式
......
一 NLP深度学习的过去
====================
![](media/cc8b2e483b89e4e7f585053d9ae16901.png)
很多被现在认为非常核心技术的想法在当时是不存在的,如Seq2Seq、注意力机制、大规模问答系统/阅读理解数据集,甚至是TonsorFlow或Pytorch等框架。
**Seq2Seq**
seq2seq 是一个Encoder–Decoder 结构的网络,它的输入是一个序列,输出也是一个序列,
Encoder 中将一个可变长度的信号序列变为固定长度的向量表达,Decoder
将这个固定长度的向量变成可变长度的目标的信号序列。
**Attention**
Attention函数的本质可以被描述为一个查询(query)到一系列(键key-值value)对的映射。
二 NLP深度学习的未来
====================
![](media/b28cc037a458e62e70e28df3da4db868.png)
1、本课程的关键思想:在训练NLP系统时利用未标记的例子。
2、扩大规模的深度学习模型OpenAl和GPT-2
3、NLP的社会影响
4、NLP在未来的研究领域发挥的重要作用
三 深度学习的发展
=================
![](media/5ccf67442a3c6f56f661544b9718d5be.png)
近年来,深度学习发展迅速关键在于其扩展能力的提高,增加模型的大小和相关数据集,其准确性得到极大的提升。在80年代和90年代,就有很多关于神经网络的研究。
![](media/5b6b327867947bbaacf320e8183363b8.png)
![](media/8b074b58ce68a16643e0e3ba231ced83.png)
深度学习在图像识别、机器翻译以及游戏。因此,对于ImageNet,对于图像识别,ImageNet数据集有1400万个图像,机器翻译数据集通常有数百万个例子。对于游戏,实际上可以生成尽可能多的训练数据,只需在游戏中一遍又一遍地运行代理即可。
四 NLP数据集
============
![](media/00594abd6ebca941e5e33b1d1ecf7242.png)
NLP数据存在的原因**只适用于英语**
绝大多数数据是英语,实际上不到世界人口的10%,说英语是他们的第一语言。因此,如果您查看存在的全部语言,那么小数据集的这些问题才会复杂化。
因此,当受到这些数据的限制时,希望利用深度学习规模并训练最大的模型。最近成功的**流行解决方案是使用未标记的数据**。因为与标记数据不同,语言非常容易获取。在某些情况下,甚至可以要求像语言学这样的专家来注释该数据。
五 使用未标记的数据进行翻译
===========================
应用利用未标记数据的想法,将NLP模型改进为机器翻译任务。
![](media/f8a9cc51dd30a1550b288b3304e510a4.png)
机器翻译确实需要相当大的数据集。而这些数据集是NLP研究人员为了训练其模型而注释了文本,训练模型受到标记数据的限制,但我们可以很容易找到未标记的数据,准确地查看一些文本并决定它所使用的语言并训练分类器来做到这一点。
![](media/a45da67f31b5f0894dd05ee257c7a457.png)
![](media/9a8bb5e3c768fa5db9036117cc7f75bb.png)
**预训练**
预训练——通过语言建模来预训练。
将从一种语言翻译为另一种语言,需要为这两种语言收集大型数据集,然后训练两种语言模型,每种语言模型一次,最后使用那些预先训练的语言模型作为机器翻译系统的初始化。
编码器对输入语言进行检测,同时对其语言模型的权重进行初始化,而解码器对目标语言模型的权重进行初始化,这将提高模型的性能。
![](media/70bd9c1c9f1b8aeb64495385072364cf.png)
![](media/0c13b354bd2f25497ff75e7433a8db0b.png)
预训练的问题——预训练中,两个独立的语言模型在未标记的语料库上运行时,两者之间从未真正进行任何交互。
**自我训练**
将原始的单语句和机器提供的翻译视为人为提供的翻译,并在此示例中正常训练机器学习模型。
**反向翻译**
![](media/49490589f03b3454efff6aceed677d59.png)
翻译系统从源语言到目标语言,还将训练从目标语言到源语言的模型。
![](media/a963ae4807b619f2b301b9566069f4bc.png)
这是来自Facebook的英语到德语的翻译,他们使用了500万个带标签的句子对,也使用了230个没有翻译的单语句子。你可以看到,与以前的技术水平相比,如果你将它与之前的研究和机器转机翻译进行比较,它们可以获得6个BLEU点改进。
一 双语数据
===========
![](media/d976819e250653f03cf7a4a9439cac96.png)
这里的目标是用一种语言给出一个单词,找到它的翻译,但不使用任何标记数据。
尝试解决此任务的方法称为**跨语言嵌入**
目标是学习两种语言中单词的单词向量,希望这些单词向量具有已经学过的有关单词向量的所有好的属性,同时也希望特定语言的单词向量能够接近到它的翻译的单词矢量。
![](media/bfa990c95fe70d27430257291a8e5793.png)
解决这个问题的关键方法:**word2vec**
**嵌入空间的结构具有很多规律性,利用这种规律性来帮助找到那些嵌入空间之间的对齐**
![](media/5e21808db8af3416351121f745477256.png)
![](media/7d41ff65016bd11b9fbeb32918f13b0b.png)
这是两组字嵌入的图片,红色有英文单词,蓝色有意大利语单词。虽然现在的矢量空间看起来彼此非常不同,但是看到它们有一个非常相似的结构。尝试将转换的英语嵌入集旋转,以便它们与意大利嵌入相匹配。
从数学上来说,这意味着需要一个学习矩阵W,用英语中的cat表示矢量,我们将它乘以W,最终得到西班牙语或意大利语的gatto矢量。将W约束为正交,这意味着几何上W只会对X中的向量进行旋转。
二 如何学习W
============
![](media/22fd011d4ca155b84b651df09e7aa675.png)
实际上有很多技术可以用来学习这个W矩阵,其中一个就是称为**对抗训练**
它的工作方式如下:
除了试图学习W矩阵之外,还将尝试学习一个被称为鉴别器的模型。采用一个向量,预测该向量最初是英文单词嵌入还是原来是意大利语嵌入。
如果没有W矩阵,这对于鉴别器来说是一个非常简单的任务,清楚地分开英语和意大利语的嵌入字。如果学习W矩阵成功地将所有这些嵌入对齐,那么鉴别器将永远不会做得很好。
在训练期间,首先要稍微训练一下鉴别器,这意味着确保它在区分英语和意大利语单词时尽可能好,然后训练W,而训练W的目标是将鉴别器混淆为尽可能多。
![](media/d8b5c15ef6c09b4e5e6221c08a77a117.png)
**seq2seq模型**
对标准的seq2srq模型进行了一处更改,即我们将使用相同的编码器和编码器,无论输入和输出语言如何。它将具有英语单词和法语单词的向量表示。
对于解码器,我们需要给它一些关于它应该生成什么语言的信息。这样做的方法是输入一个特殊的标记,这个标记在括号中表示告诉模型的语法。在底部,它输入法语句子作为输入,它只是生成法语作为输出,这意味着只是再现原始输入序列。
![](media/29d3c9fa71562a0d68ed4568cfa3b8fc.png)
三 如何训练seq2seq模型
======================
去噪自动编码器
它被扰乱之前重新生成句子实际上是什么。也许有一个想法为什么这将是一个有用的训练目标,是因为有一个没有注意的编码器-解码器。编码器正在将整个源句子转换成单个向量,自动编码器做的是确保向量包含有关句子的所有信息,以便能够从编码器产生的向量中恢复原始句子的内容。
![](media/36429d6dd9868d07d9d92cc712d26690.png)
用没有标签的句子,不提供任何人工翻译,假设一个英语句子或者说一个法语句子,给出一个法语句子,可以将它翻译成英语,使用模型的当前状态,然后要求该模型从英语翻译或将该英语翻译回法语。
![](media/16d1c888725fe434f06485e4b8a0a47e.png)
使用这些跨语言嵌入来初始化机器翻译模型使用共享编码器。在顶部,只有一个自动编码目标,由于嵌入看起来非常相似,并且因为编码器是相同的,所以模型对这个法语句子的表示实际上应该与英语句子的表示非常相似。因此,当这种表示传递到解码器时,我们希望获得与以前相同的输出。
![](media/ed979ece44c470f0e90d399c89168997.png)
另一种思考方式是希望我们的模型能够对句子进行编码,这样表达式就像是一种通用的国际语言。我们的自动编码器和我们的反向翻译示例中,这里的目标序列是相同的。
![](media/87ba75b9ceeb74f88f5d92abbec5c1fb.png)
毫无疑问,在给定大量监督数据的情况下,受监督的机器翻译模型比无监督的机器翻译模型工作得更好。但是无监督的机器翻译模型实际上仍然做得很好。
![](media/aa7868f8bd9dd5d3f8ebdd08e413d78c.png)
使用无监督机器翻译模型可以做的另一件好事是**属性转移**
![](media/94d73800652ad75fbe429812a903ebab.png)
因此,如果你看一个不同的语言对,让我们说英语到土耳其语,这两种语言的语言学是完全不同的,这些方法在某种程度上仍然有效,所以他们可以说五个BLEU点,但他们不会几乎和其他设置一样工作。
纯粹的监督学习仍然存在巨大差距。
一 BERT
=======
![](media/1fc8b424ade235725a60af4f056558b7.png)
这是常规BERT,使用英语一些句子(其中某些单词被删除),要求使用BERT模型来填补空白并预测这些单词。
谷歌实际上已经完成了多语言BERT训练。采用的是连接一大堆不同语言的语料库,然后训练一个模型在所有语言上使用模型。最近,由Facebook提出的这种新的扩展,实际上是将LM培训目标与翻译相结合。
在这种情况下,给这个模型一个英文序列和一个法语序列,删除一些单词,要求模型填写它,更好地使模型理解两种语言之间的关系。
![](media/863d03b91f0a5659e4f8e2a054936e45.png)
因此像BERT用于NLP中的其他任务一样,基本上都采用这种跨语言BERT,将其用作无监督机器翻译系统的初始化,并获得了大约10个BLEU点的增益,这样就可以实现无人监督的机器翻译。
二 Huge Models and GPT-2
========================
![](media/707177c98672fbd53c9be53ac13cd78c.png)
首先,这是一些不同大小的NLP模型,也许几年前标准的LSTM中型模型大约有1000万个参数。在OpenAl论文之前,这个GPT-2大约是它的10倍,大约相当于另一个数量级。当然,、神经网络中的突触和权重是完全不同的。
![](media/7429800d68f22424891570eaecd970b3.png)
该图显示了x轴是时间,y轴是用日志来衡量用于训练该模型的petaFLOPS的数量。这意味着至少目前的趋势是机器学习模型的计算能力呈现出指数增长。
![](media/3017ff5e27e32edc63d73a563f988a25.png)
这结果来自一个视觉的生成性对抗网络,它已经在很多数据上进行了训练,并且已经在大规模上进行了训练,这是ELMo和BERT之间的大型模型。如果你感兴趣的是https://thispersondoesnotexist.com/。
![](media/883a1f598728ca6deb4101b097107b21.png)
这是谷歌最近的工作,他们训练了一个有5亿个参数的图像网络模型。这里的图表显示x轴上的日志缩放参数数量,然后ImageNet在y轴上的准确性,这种大型模型表现得更好。并且似乎成为一种趋势,其精度随着模型尺寸的对数而增加。
![](media/49a12531f44200f697663ba7da938af0.png)
硬件在很大程度上扩展模型和训练模型。特别是,越来越多的公司正在开发深度学习的硬件。实际上另一种扩展模型的方法是利用并行性。
一种是数据并行性。在这种情况下,GPU将拥有该模型的数据副本,将正在训练的数据分成小批量到这些模型中,这样就可以更快地训练模型。
另一种并行性是模型并行性。在这种情况下,您实际上需要将模型拆分为多个计算单元。
![](media/1e5d555592b54279f9571143f2a1bc1a.png)
![](media/4698fa83c1a4f0c5fdde96eccea1648b.png)
拥有像GPT-2这样超级庞大的语言模型,可以用它进行语言建模。并在基准测试上运行这种语言模型。如果想评估语言模型,首先在Penn
Treebank上训练,然后评估这个组合。在这种情况下,GPT-2只是因为看过这么多的文字并且是如此大的模型,优于其他的先前,即使它没有那些数据也能在不同的语言基准中测试。
![](media/52313442e024b1d78d8f7fe85bb1c83c.png)
零射击学习只是尝试完成一项任务,而不需要对它进行训练。通过设计一个提示需要输入的语言模型,然后让它从那里生成,希望它生成与你想要解决的任务相关的语言。
![](media/24daaa12a59b6f4adf3446cc556c055c.png)
x轴是对数缩放的模型大小,y轴是精确度,虚线基本上对应于这些任务的现有工作。
![](media/b3d54f5f91d45e47215ce3a4a8219dbd.png)
通常在NLP的历史中,如果想将一种世界知识带入一个NLP系统,你需要一个类似于事实的大数据库,它仍然可以通过阅读大量文本而无需明确地获取一些世界知识将这些知识付诸于模型。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册