Skip to content
This repository has been archived by the owner on Oct 11, 2023. It is now read-only.

Commit

Permalink
2021-01-04 14:32:31
Browse files Browse the repository at this point in the history
  • Loading branch information
wizardforcel committed Jan 4, 2021
1 parent 8dd4480 commit 6afa72a
Show file tree
Hide file tree
Showing 7 changed files with 110 additions and 26 deletions.
12 changes: 9 additions & 3 deletions docs/1.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@

## The Supervised Learning Paradigm

机器学习中的监督,或者简单的监督学习,是指将目标(被预测的内容)的真实情况用于观察(输入)的情况。例如,在文档分类中,目标是一个分类标签,观察(输入)是一个文档。例如,在机器翻译中,观察(输入)是一种语言的句子,目标是另一种语言的句子。通过对输入数据的理解,我们在图 1-1 中演示了监督学习范式。 ![nlpp_0101](img/58c13549534aa235ea3328c43765c9f9.jpg)
机器学习中的监督,或者简单的监督学习,是指将目标(被预测的内容)的真实情况用于观察(输入)的情况。例如,在文档分类中,目标是一个分类标签,观察(输入)是一个文档。例如,在机器翻译中,观察(输入)是一种语言的句子,目标是另一种语言的句子。通过对输入数据的理解,我们在图 1-1 中演示了监督学习范式。

![nlpp_0101](img/58c13549534aa235ea3328c43765c9f9.jpg)

我们可以将监督学习范式分解为六个主要概念,如图 1-1 所示: 观察: 观察是我们想要预测的东西。我们用 x 表示观察值。我们有时把观察值称为“输入”。 目标: 目标是与观察相对应的标签。它通常是被预言的事情。按照机器学习/深度学习中的标准符号,我们用`y`表示这些。有时,这被称为真实情况。 模型: 模型是一个数学表达式或函数,它接受一个观察值`x`,并预测其目标标签的值。 参数: 有时也称为权重,这些参数化模型。标准使用的符号`w`(权重)或`w_hat`。 预测: 预测,也称为估计,是模型在给定观测值的情况下所猜测目标的值。我们用一个`hat`表示这些。所以,目标`y`的预测用`y_hat`来表示。 损失函数: 损失函数是比较预测与训练数据中观测目标之间的距离的函数。给定一个目标及其预测,损失函数将分配一个称为损失的标量实值。损失值越低,模型对目标的预测效果越好。我们用`L`表示损失函数。

Expand All @@ -47,7 +49,9 @@

## Observation and Target Encoding

我们需要用数字表示观测值(文本),以便与机器学习算法一起使用。图 1-2 给出了一个可视化的描述。 ![nlpp_0102](img/a63991e391610b511b1fcd8202f6cb8c.jpg)
我们需要用数字表示观测值(文本),以便与机器学习算法一起使用。图 1-2 给出了一个可视化的描述。

![nlpp_0102](img/a63991e391610b511b1fcd8202f6cb8c.jpg)

表示文本的一种简单方法是用数字向量表示。有无数种方法可以执行这种映射/表示。事实上,本书的大部分内容都致力于从数据中学习此类任务表示。然而,我们从基于启发式的一些简单的基于计数的表示开始。虽然简单,但是它们非常强大,或者可以作为更丰富的表示学习的起点。所有这些基于计数的表示都是从一个固定维数的向量开始的。

Expand Down Expand Up @@ -120,7 +124,9 @@ sns.heatmap(tfidf, annot=True, cbar=False, xticklabels=vocab,

```

![nlpp_01_tfidf](img/2fdbe9e5e1ab207ed4555c3ffd873753.jpg) 在深度学习中,很少看到使用像 TF-IDF 这样的启发式表示对输入进行编码,因为目标是学习一种表示。通常,我们从一个使用整数索引的单热编码和一个特殊的“嵌入查找”层开始构建神经网络的输入。在后面的章节中,我们将给出几个这样做的例子。
![nlpp_01_tfidf](img/2fdbe9e5e1ab207ed4555c3ffd873753.jpg)

在深度学习中,很少看到使用像 TF-IDF 这样的启发式表示对输入进行编码,因为目标是学习一种表示。通常,我们从一个使用整数索引的单热编码和一个特殊的“嵌入查找”层开始构建神经网络的输入。在后面的章节中,我们将给出几个这样做的例子。

### Target Encoding

Expand Down
36 changes: 30 additions & 6 deletions docs/2.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,15 @@

![metadata_1](img/c35eca55ae92dbc6325e2ba9ac2b7710.jpg)

将文本分解为标记(Tokens)的过程称为分词(tokenization)。世界语的句子,`Maria frapis la verda sorĉistino`有六个标记。分词可能比简单地基于非字母数字字符拆分文本更加复杂,如图 2-2 所示。对于像土耳其语这样的粘合语言来说,分隔空格和标点符号可能是不够的,因此可能需要更专业的技术。正如您将在第 4 章和第 6 章中看到的,通过将文本表示为字节流,我们可能能够在某些神经网络模型中完全规避分词问题;这对于粘合语言来说变得非常重要。 ![Tokenization](img/2a941f4b722f7fb4031402398e5c0882.jpg) 最后,看看下面这条推文: ![Tweet](img/3529b4f55a52c83aaf242bd51bf5ca3a.jpg) 分词 tweets 涉及到保存话题标签和`@handle`,将表情符号(如:-)和 urls 分割为一个单元。`#MakeAMovieCold`标签应该是 1 个标记还是 4 个?虽然大多数研究论文对这一问题并没有给予太多的关注,而且事实上,许多分词决策往往是任意的,但是这些决策在实践中对准确性的影响要比公认的要大得多。通常被认为是预处理的繁琐工作,大多数开放源码 NLP 包为分词提供了合理的支持。示例 2-1 展示了来自 NLTK 和 SpaCy 的示例,这是两个用于文本处理的常用包。
将文本分解为标记(Tokens)的过程称为分词(tokenization)。世界语的句子,`Maria frapis la verda sorĉistino`有六个标记。分词可能比简单地基于非字母数字字符拆分文本更加复杂,如图 2-2 所示。对于像土耳其语这样的粘合语言来说,分隔空格和标点符号可能是不够的,因此可能需要更专业的技术。正如您将在第 4 章和第 6 章中看到的,通过将文本表示为字节流,我们可能能够在某些神经网络模型中完全规避分词问题;这对于粘合语言来说变得非常重要。

![Tokenization](img/2a941f4b722f7fb4031402398e5c0882.jpg)

最后,看看下面这条推文:

![Tweet](img/3529b4f55a52c83aaf242bd51bf5ca3a.jpg)

分词 tweets 涉及到保存话题标签和`@handle`,将表情符号(如:-)和 urls 分割为一个单元。`#MakeAMovieCold`标签应该是 1 个标记还是 4 个?虽然大多数研究论文对这一问题并没有给予太多的关注,而且事实上,许多分词决策往往是任意的,但是这些决策在实践中对准确性的影响要比公认的要大得多。通常被认为是预处理的繁琐工作,大多数开放源码 NLP 包为分词提供了合理的支持。示例 2-1 展示了来自 NLTK 和 SpaCy 的示例,这是两个用于文本处理的常用包。

Example 2-1\. Tokenizing text

Expand Down Expand Up @@ -140,7 +148,11 @@ witch - NOUN

## Categorizing Spans: Chunking and Named Entity Recognition

通常,我们需要标记文本的范围;即,一个连续的多标记边界。例如,`Mary slapped the green witch.`我们可能需要识别其中的名词短语(NP)和动词短语(VP),如下图所示: ![Sentence_1](img/77ada2c4a9a2bcb1ad37475522db4edc.jpg) 这称为分块(Chunking)或浅解析(Shallow parsing)。浅解析的目的是推导出由名词、动词、形容词等语法原子组成的高阶单位。如果没有训练浅解析模型的数据,可以在词性标记上编写正则表达式来近似浅解析。幸运的是,对于英语和最广泛使用的语言来说,这样的数据和预先训练的模型是存在的。示例 2-5 给出了一个使用 SpaCy 的浅解析示例。
通常,我们需要标记文本的范围;即,一个连续的多标记边界。例如,`Mary slapped the green witch.`我们可能需要识别其中的名词短语(NP)和动词短语(VP),如下图所示:

![Sentence_1](img/77ada2c4a9a2bcb1ad37475522db4edc.jpg)

这称为分块(Chunking)或浅解析(Shallow parsing)。浅解析的目的是推导出由名词、动词、形容词等语法原子组成的高阶单位。如果没有训练浅解析模型的数据,可以在词性标记上编写正则表达式来近似浅解析。幸运的是,对于英语和最广泛使用的语言来说,这样的数据和预先训练的模型是存在的。示例 2-5 给出了一个使用 SpaCy 的浅解析示例。

Example 2-5\. Noun chunks

Expand All @@ -157,17 +169,29 @@ the green witch - NP

```

另一种有用的短语类型是命名实体。命名实体是一个字符串,它提到了一个真实世界的概念,如人员、位置、组织、药品名称等等。这里有一个例子: ![Nameentity](img/f01ca7a7f18a64f876482e91e9fcb5e0.jpg)
另一种有用的短语类型是命名实体。命名实体是一个字符串,它提到了一个真实世界的概念,如人员、位置、组织、药品名称等等。这里有一个例子:

![Nameentity](img/f01ca7a7f18a64f876482e91e9fcb5e0.jpg)

## Structure of Sentences

浅层解析识别短语单位,而识别它们之间关系的任务称为解析(parsing)。您可能还记得,在初级英语课上,用图表表示句子,如图 2-6 所示。 ![Parase_1](img/2f1511a2b2c9bf499667cb6649dbda15.jpg)
浅层解析识别短语单位,而识别它们之间关系的任务称为解析(parsing)。您可能还记得,在初级英语课上,用图表表示句子,如图 2-6 所示。

![Parase_1](img/2f1511a2b2c9bf499667cb6649dbda15.jpg)

解析树(Parse tree)表示句子中不同的语法单元在层次上是如何相关的。图 2-6 中的解析树显示了所谓的成分解析。另一种可能更有用的显示关系的方法是使用依赖项解析(dependency parsing),如图 2-7 所示。

解析树(Parse tree)表示句子中不同的语法单元在层次上是如何相关的。图 2-6 中的解析树显示了所谓的成分解析。另一种可能更有用的显示关系的方法是使用依赖项解析(dependency parsing),如图 2-7 所示。 ![Parase_2](img/b4d0b914345a17162773e581f0ee08f9.jpg) 要了解更多关于传统解析的信息,请参阅本章末尾的参考资料部分。
![Parase_2](img/b4d0b914345a17162773e581f0ee08f9.jpg)

要了解更多关于传统解析的信息,请参阅本章末尾的参考资料部分。

## Word Senses and Semantics

单词有意义,而且通常不止一个。一个词的不同含义称为它的意义(senses)。WordNet 是一个长期运行的词汇资源项目,它来自普林斯顿大学,旨在对所有英语单词(嗯,大部分)的含义以及其他词汇关系进行分类。例如,考虑像`plane`这样的单词。图 2-8 显示了`plane`一词的不同用法。 ![Plane](img/f756e802f10adc3bacf2e61e4b5f160e.jpg)") 在 WordNet 这样的项目中数十年的努力是值得的,即使是在有现代方法的情况下。本书后面的章节给出了在神经网络和深度学习方法的背景下使用现有语言资源的例子。词的意义也可以从上下文中归纳出来。从文本中自动发现词义实际上是半监督学习在自然语言处理中的第一个应用。尽管我们在本书中没有涉及到这一点,但我们鼓励您阅读 Jurasky and Martin(2014),第 17 章,Manning and Schutze(1999),第 7 章。
单词有意义,而且通常不止一个。一个词的不同含义称为它的意义(senses)。WordNet 是一个长期运行的词汇资源项目,它来自普林斯顿大学,旨在对所有英语单词(嗯,大部分)的含义以及其他词汇关系进行分类。例如,考虑像`plane`这样的单词。图 2-8 显示了`plane`一词的不同用法。

![Plane](img/f756e802f10adc3bacf2e61e4b5f160e.jpg)

") 在 WordNet 这样的项目中数十年的努力是值得的,即使是在有现代方法的情况下。本书后面的章节给出了在神经网络和深度学习方法的背景下使用现有语言资源的例子。词的意义也可以从上下文中归纳出来。从文本中自动发现词义实际上是半监督学习在自然语言处理中的第一个应用。尽管我们在本书中没有涉及到这一点,但我们鼓励您阅读 Jurasky and Martin(2014),第 17 章,Manning and Schutze(1999),第 7 章。

## 总结

Expand Down
16 changes: 13 additions & 3 deletions docs/3.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@

## Perceptron: The Simplest Neural Network

最简单的神经网络单元是感知器。感知器在历史上是非常松散地模仿生物神经元的。就像生物神经元一样,有输入和输出,“信号”从输入流向输出,如图 3-1 所示。 ![neural](img/58bd03f5bc961bd29d7f05203ba2e97f.jpg) 每个感知器单元有一个输入(`x`),一个输出(`y`),和三个“旋钮”(knobs):一组权重(`w`),偏量(`b`),和一个激活函数(`f`)。权重和偏量都从数据学习,激活函数是精心挑选的取决于网络的网络设计师的直觉和目标输出。数学上,我们可以这样表示:
最简单的神经网络单元是感知器。感知器在历史上是非常松散地模仿生物神经元的。就像生物神经元一样,有输入和输出,“信号”从输入流向输出,如图 3-1 所示。

![neural](img/58bd03f5bc961bd29d7f05203ba2e97f.jpg)

每个感知器单元有一个输入(`x`),一个输出(`y`),和三个“旋钮”(knobs):一组权重(`w`),偏量(`b`),和一个激活函数(`f`)。权重和偏量都从数据学习,激活函数是精心挑选的取决于网络的网络设计师的直觉和目标输出。数学上,我们可以这样表示:

通常情况下感知器有不止一个输入。我们可以用向量表示这个一般情况;即,`x``w`是向量,`w``x`的乘积替换为点积:

Expand Down Expand Up @@ -245,7 +249,9 @@ tensor(0.9003)

### Constructing Toy Data

在机器学习中,当试图理解一个算法时,创建具有易于理解的属性的合成数据是一种常见的实践。在本节中,我们使用“玩具”任务的合成数据——将二维点分类为两个类中的一个。为了构建数据,我们从 xy 平面的两个不同部分采样点,为模型创建了一个易于学习的环境。示例如图 3-2 所示。模型的目标是将星星(``)作为一个类,圆圈(``)作为另一个类。这可以在图的右边看到,线上面的东西和线下面的东西分类不同。生成数据的代码位于本章附带的 Python 笔记本中名为`get_toy_data()`的函数中。 ![data](img/0d6e80407f2dd1f5de804ffdfc65fc53.jpg)
在机器学习中,当试图理解一个算法时,创建具有易于理解的属性的合成数据是一种常见的实践。在本节中,我们使用“玩具”任务的合成数据——将二维点分类为两个类中的一个。为了构建数据,我们从 xy 平面的两个不同部分采样点,为模型创建了一个易于学习的环境。示例如图 3-2 所示。模型的目标是将星星(``)作为一个类,圆圈(``)作为另一个类。这可以在图的右边看到,线上面的东西和线下面的东西分类不同。生成数据的代码位于本章附带的 Python 笔记本中名为`get_toy_data()`的函数中。

![data](img/0d6e80407f2dd1f5de804ffdfc65fc53.jpg)

### 选择模型

Expand Down Expand Up @@ -345,7 +351,11 @@ for epoch_i in range(n_epochs):

### Regularization

深度学习(以及机器学习)中最重要的概念之一是正则化。正则化的概念来源于数值优化理论。回想一下,大多数机器学习算法都在优化损失函数,以找到最可能解释观测结果(即,产生的损失最少)。对于大多数数据集和任务,这个优化问题可能有多个解决方案(可能的模型)。那么我们(或优化器)应该选择哪一个呢?为了形成直观的理解,请考虑图 3-3 通过一组点拟合曲线的任务。 ![regularize](img/041220e3a08190537249ac65e19e948a.jpg)")
深度学习(以及机器学习)中最重要的概念之一是正则化。正则化的概念来源于数值优化理论。回想一下,大多数机器学习算法都在优化损失函数,以找到最可能解释观测结果(即,产生的损失最少)。对于大多数数据集和任务,这个优化问题可能有多个解决方案(可能的模型)。那么我们(或优化器)应该选择哪一个呢?为了形成直观的理解,请考虑图 3-3 通过一组点拟合曲线的任务。

![regularize](img/041220e3a08190537249ac65e19e948a.jpg)

")

两条曲线都“拟合”这些点,但哪一条是不太可能的解释呢?通过求助于奥卡姆剃刀,我们凭直觉知道一个简单的解释比复杂的解释更好。这种机器学习中的平滑约束称为 L2 正则化。在 PyTorch 中,您可以通过在优化器中设置`weight_decay`参数来控制这一点。`weight_decay`值越大,优化器选择的解释就越流畅;也就是说,L2 正则化越强。

Expand Down
8 changes: 6 additions & 2 deletions docs/4.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@
>
> 许可协议: [署名-非商业性使用-禁止演绎 4.0 国际](https://creativecommons.org/licenses/by-nc-nd/4.0/) 转载请保留原文链接及作者。
在第 3 章中,我们通过观察感知器来介绍神经网络的基础,感知器是现存最简单的神经网络。感知器的一个历史性的缺点是它不能学习数据中存在的一些非常重要的模式。例如,查看图 4-1 中绘制的数据点。这相当于非此即彼(XOR)的情况,在这种情况下,决策边界不能是一条直线(也称为线性可分)。在这个例子中,感知器失败了。 ![classifier](img/8dc539599dfa8638d1c07a77f68a8ed6.jpg)
在第 3 章中,我们通过观察感知器来介绍神经网络的基础,感知器是现存最简单的神经网络。感知器的一个历史性的缺点是它不能学习数据中存在的一些非常重要的模式。例如,查看图 4-1 中绘制的数据点。这相当于非此即彼(XOR)的情况,在这种情况下,决策边界不能是一条直线(也称为线性可分)。在这个例子中,感知器失败了。

![classifier](img/8dc539599dfa8638d1c07a77f68a8ed6.jpg)

在这一章中,我们将探索传统上称为前馈网络的神经网络模型,以及两种前馈神经网络:多层感知器和卷积神经网络。多层感知器在结构上扩展了我们在第 3 章中研究的简单感知器,将多个感知器分组在一个单层,并将多个层叠加在一起。我们稍后将介绍多层感知器,并在“示例:带有多层感知器的姓氏分类”中展示它们在多层分类中的应用。

Expand Down Expand Up @@ -40,7 +42,9 @@ mlp 的力量来自于添加第二个线性层和允许模型学习一个线性

虽然在图中显示 MLP 有两个决策边界,这是它的优点,但它实际上只是一个决策边界!决策边界就是这样出现的,因为中间表示法改变了空间,使一个超平面同时出现在这两个位置上。在图 4-4 中,我们可以看到 MLP 计算的中间值。这些点的形状表示类(星形或圆形)。我们所看到的是,神经网络(本例中为 MLP)已经学会了“扭曲”数据所处的空间,以便在数据通过最后一层时,用一线来分割它们。 MLP 的输入和中间表示是可视化的。从左到右:(1)网络的输入,(2)第一个线性模块的输出,(3)第一个非线性模块的输出,(4)第二个线性模块的输出。如您所见,第一个线性模块的输出将圆和星分组,而第二个线性模块的输出将数据点重新组织为线性可分的。”)

相反,如图 4-5 所示,感知器没有额外的一层来处理数据的形状,直到数据变成线性可分的。 ![MLP_3](img/a0cec65c8e77beeb01f46f5fef1a61ad.jpg)
相反,如图 4-5 所示,感知器没有额外的一层来处理数据的形状,直到数据变成线性可分的。

![MLP_3](img/a0cec65c8e77beeb01f46f5fef1a61ad.jpg)

### Implementing MLPs in PyTorch

Expand Down
Loading

0 comments on commit 6afa72a

Please sign in to comment.