提交 c5578f48 编写于 作者: W wizardforcel

2021-01-21 16:31:02

上级 ac6c5443
......@@ -122,7 +122,7 @@ random.set_seed(seed)
您还可以使用 Anaconda 发行版安装 Python。 [请遵循此链接中给出的说明以获取更多详细信息](https://www.anaconda.com/products/individual)。
## 安装 pip
## 安装 Pip
Python 3.7 的安装默认包含`pip`。 但是,可能是没有安装的情况。 要检查它是否已安装,请在终端或命令提示符下执行以下命令:
......
......@@ -222,7 +222,7 @@ example_2 = torch.randint(low=0, high=2, \
在下一节中,我们将讨论使用 PyTorch 的优缺点。
## 使用 PyTorch 的优
## 使用 PyTorch 的优
如今有几个库可用于开发深度学习解决方案,那么为什么要使用 PyTorch? 答案是 PyTorch 是一个动态库,它允许用户极大的灵活性来开发可适应特定数据问题的复杂架构。
......
......@@ -213,7 +213,7 @@ ReLU 是非常简单的非线性函数,当`x <= 0`,返回`y = 0`;当`x > 0
当我们讨论机器学习基础知识时,您可能已经注意到损失函数都处理数值数据,以便能够最大程度地减少损失。 因此,我们希望以数字格式表示文本,这可以构成我们向神经网络输入的基础。 在这里,我们将介绍几种数值表示数据的基本方法。
## 口碑
## 词袋
表示文本的第一种也是最简单的方法是使用**词袋**表示。 此方法只对给定句子或文档中的单词进行计数,然后对所有单词进行计数。 然后将这些计数转换为向量,其中向量的每个元素都是**语料库**中每个单词出现在句子中的次数计数。 语料库是,只是出现在所有要分析的句子/文档中的所有单词。 采取以下两个句子:
......@@ -239,7 +239,7 @@ The dog sat on the cat -> [2,1,1,1,1,0]
然后,该数字表示形式可用作特征向量为![](img/Formula_01_034.png)的机器学习模型的输入特征。
## 顺序表示
## 序列表示
我们将在本书的后面看到,更复杂的神经网络模型,包括 RNN 和 LSTM,不仅将一个向量作为输入,而且可以采用矩阵形式的整个向量序列。 因此,为了更好地捕获单词的顺序,从而更好地捕获任何句子的含义,我们能够以一键编码的向量序列的形式来表示它:
......
......@@ -250,7 +250,7 @@ self.dropout = nn.Dropout(p=0.2)
丢弃是一种规范化我们的神经网络以防止过拟合的方法。 在每个训练纪元上,对于已应用丢包的层中的每个节点,都有可能(此处定义为`p`= 20%)该层内的每个节点将不用于训练/反向传播 。 这意味着,在训练时,我们的网络会针对过拟合变得健壮,因为在训练过程的每次迭代中都不会使用每个节点。 这可以防止我们的网络过于依赖网络中特定节点的预测。
## 定义前向通行证
## 定义正向传递
接下来,我们在分类器中定义正向传递:
......
......@@ -172,7 +172,7 @@ X = ["is", "a", "learning", "framework"]; y = "deep"
我们的模型从本质上要学习的是,目标词的组合嵌入表示在语义上与目标词相似。 如果我们在足够大的单词语料库上重复此操作,我们会发现我们的单词嵌入开始类似于我们以前看到的 GLoVe 嵌入,在语义上相似的单词在嵌入空间中彼此出现。
## 建筑物 CBOW
## 构建 CBOW
现在,我们将贯穿,从头开始构建 CBOW 模型,从而说明如何学习嵌入向量:
......
......@@ -103,7 +103,7 @@ LSTM 与 RNN 的结构非常相似。 虽然 LSTM 的各个步骤之间存在一
图 5.5 – LSTM 单元
## LSTM 细胞
## LSTM 单元
尽管 RNN 单元仅采用之前的隐藏状态和新的输入步骤,并使用一些学习到的参数来计算下一个隐藏状态,但 LSTM 单元的内部工作却要复杂得多:
......@@ -570,7 +570,7 @@ predict("It was not good")
现在,我们已经在本地计算机上训练了模型,我们可以使用它来进行预测。 但是,如果您希望其他人能够使用您的模型进行预测,则不一定有好处。 如果我们将模型托管在基于云的平台(例如 Heroku)上并创建基本的 API,其他人将能够调用该 API 以使用我们的模型进行预测。
## 介绍 Heroku
## Heroku 介绍
**Heroku** 是基于云的平台,您可以在其中托管自己的基本程序。 虽然 Heroku 的免费层最大上传大小为 500 MB,并且处理能力有限,但这足以让我们托管模型并创建基本 API,以便使用模型进行预测。
......
......@@ -107,7 +107,7 @@ CNN 背后的基本概念是卷积。 **卷积**本质上是一个滑动窗口
既然我们了解了 CNN 的基础知识,我们就可以从头开始构建。 在上一章中,我们建立了情感预测模型,其中情感是二分类器;`1`表示正,`0`表示负。 但是,在此示例中,我们的目标是为**多类文本分类**构建 CNN。 在多类别问题中,特定示例只能分类为几种类别之一。 如果一个示例可以分类为许多不同的类别,则这就是多标签分类。 由于我们的模型是多类的,因此这意味着我们的模型将旨在预测我们的输入句子被归为几类中的哪一类。 尽管此问题比二分类任务要困难得多(因为我们的句子现在可以属于许多类别之一,而不是两个类别之一),但我们将证明 CNN 可以在此任务上提供良好的性能。 首先,我们将定义数据。
## 定义多类分类数据集
## 定义多类分类数据集
在上一章中,我们查看了评论的选择,并根据评论是肯定的还是负面的,学习了二分类。 对于此任务,我们将查看来自 [TREC](https://trec.nist.gov/data/qa.html) 数据集的数据,这是用于评估性能的通用数据集 模型的文本分类任务。 数据集由一系列问题组成,每个问题都属于我们训练有素的模型将要学习分类的六大语义类别之一。 这六个类别如下:
......@@ -127,7 +127,7 @@ CNN 背后的基本概念是卷积。 **卷积**本质上是一个滑动窗口
现在我们已经定义了多类分类问题,我们需要加载数据以训练模型。
## 创建迭代器加载数据
## 创建迭代器加载数据
在上一章的 LSTM 模型中,我们仅使用了`.csv`文件,其中包含用于训练模型的所有数据。 然后,我们将这些数据手动转换为输入张量,并将它们一张一张地输入到我们的网络中以进行训练。 尽管这种方法是完全可以接受的,但它并不是最有效的方法。
......@@ -252,7 +252,7 @@ train_iterator, valid_iterator = data.BucketIterator.splits(
)
```
## 建构 CNN 模型
## 构建 CNN 模型
现在我们已经加载了数据,现在可以创建模型了。 我们将使用以下步骤进行操作:
......
......@@ -404,7 +404,7 @@ def forward(self, input, h, cell):
在完全定义了 Seq2Seq 模型之后,我们现在就可以开始对其进行训练了。
## 训练进行模型
## 训练模型
我们的模型将以在模型的所有部分中权重为 0 的初始化。 尽管理论上该模型应该能够在没有(零)权重的情况下进行学习,但事实表明,使用随机权重进行初始化可以帮助模型更快地学习。 让我们开始吧:
......
......@@ -83,7 +83,7 @@ I will be traveling to Paris, the capital city of France, on the 2nd of March. M
与所有其他 NLP 模型一样,我们的第一步是获取并处理数据集以用于训练我们的模型。
## 正在获取我们的数据集
## 获取我们的数据集
要训​​练我们的聊天机器人,我们需要一个会话数据集,模型可以通过该数据集学习如何响应。 我们的聊天机器人将接受一系列人工输入,并使用生成的句子对其进行响应。 因此,理想的数据集将由多行对话和适当的响应组成。 诸如此类任务的理想数据集将是来自两个人类用户之间的对话的实际聊天记录。 不幸的是,这些数据由私人信息组成,很难在公共领域获得,因此对于此任务,我们将使用电影脚本的数据集。
......@@ -130,7 +130,7 @@ for line in lines[:3]:
第一步是创建一个词汇表或语料库,其中包含我们数据集中的所有唯一单词。
## 创建词汇
## 创建词汇
过去,我们的语料库由几个词典组成,这些词典由我们的语料库中的唯一单词以及在单词和索引之间的查找组成。 但是,我们可以通过创建一个包含所有必需元素的词汇表类,以一种更为优雅的方式来实现此目的:
......@@ -454,7 +454,7 @@ for line in lines[:3]:
与其他序列到序列模型一样,我们通过创建编码器开始。 这会将输入句子的初始张量表示转换为隐藏状态。
### 构编码器
### 构编码器
现在,我们将通过以下步骤创建编码器:
......@@ -547,7 +547,7 @@ for line in lines[:3]:
接下来,我们可以在解码器中使用此关注模块来创建关注焦点的解码器。
### 构解码器
### 构解码器
我们现在将构造解码器,如下所示:
......@@ -1043,7 +1043,7 @@ print('Response:', ' '.join(output_words))
### 评估模型
### 既然我们已经成功创建并训练了我们的模型,那么现在该评估其性能了。 我们将通过以下步骤进行操作:
既然我们已经成功创建并训练了我们的模型,那么现在该评估其性能了。 我们将通过以下步骤进行操作:
1. 为了开始评估,我们首先将模型切换到评估模式。与所有其他 PyTorch 模型一样,这样做是为了防止在评估过程中发生任何进一步的参数更新。
......
......@@ -29,7 +29,7 @@ BERT 是作为预训练的模型发布的,这意味着用户可以下载和实
### 嵌入
传统的嵌入层(例如 GLoVe)形成一个单词的单个表示形式,该表示形式与句子中该单词的含义无关,而双向 BERT 模型则尝试根据其上下文来形成表示形式。 例如,在这两个句子中,单词 *bat* 具有两种不同的含义。
传统的嵌入层(例如 GLoVe)形成一个单词的单个表示形式,该表示形式与句子中该单词的含义无关,而双向 BERT 模型则尝试根据其上下文来形成表示形式。 例如,在这两个句子中,单词`bat`具有两种不同的含义。
```py
"The bat flew past my window"
......@@ -53,9 +53,9 @@ BERT 是作为预训练的模型发布的,这意味着用户可以下载和实
但是,重要的是要了解模型如何到达这些初始的上下文相关的令牌嵌入。
### 掩盖语言建模
### 遮罩语言建模
为了创建这种双向语言表示,BERT 使用了两种不同的技术,第一种是屏蔽语言建模。 这种方法通过用掩蔽标记代替输入句子,从而有效地隐藏了 15% 的单词。 然后,模型基于句子中其他单词的上下文,尝试预测被屏蔽单词的真实值。 双向进行此预测是为了在两个方向上捕获句子的上下文:
为了创建这种双向语言表示,BERT 使用了两种不同的技术,第一种是遮罩语言建模。 这种方法通过用掩蔽标记代替输入句子,从而有效地隐藏了 15% 的单词。 然后,模型基于句子中其他单词的上下文,尝试预测被屏蔽单词的真实值。 双向进行此预测是为了在两个方向上捕获句子的上下文:
**输入**`We [MASK_1] hide some of the [MASK_2] in the sentence`
......@@ -81,9 +81,9 @@ BERT 用于学习语言表示的另一种技术是下一句预测。 在这种
通过像这样传递我们的模型句子对,它可以学习确定是否有两个句子是相关的并且彼此遵循,或者它们仅仅是两个随机的,不相关的句子。 学习这些句子关系在语言模型中很有用,因为许多与 NLP 相关的任务(例如,问答)都需要模型理解两个句子之间的关系。 在下一句预测上训练模型可以使模型识别一对句子之间的某种关系,即使该关系是非常基本的。
BERT 使用这两种方法(屏蔽语言建模和下一句预测)进行了训练,并且两种技术的组合损失函数都已最小化。 通过使用两种不同的训练方法,我们的语言表示能力足够强大,并且可以学习句子的形成和结构方式以及不同句子之间的相互关系。
BERT 使用这两种方法(遮罩语言建模和下一句预测)进行了训练,并且两种技术的组合损失函数都已最小化。 通过使用两种不同的训练方法,我们的语言表示能力足够强大,并且可以学习句子的形成和结构方式以及不同句子之间的相互关系。
## BERT –建筑
## BERT – 架构
模型架构建立在前几章中看到的许多原理的基础上,以使用双向编码提供复杂的语言表示。 BERT 有两种不同的变体,每种变体由不同数量的层和关注头组成:
......@@ -94,7 +94,7 @@ BERT 使用这两种方法(屏蔽语言建模和下一句预测)进行了训
BERT 是按照**转换器**的原理构建的,现在将对其进行详细说明。
### 变形金刚
### 转换器
模型架构建立在我们迄今为止在本书中看到的许多原理的基础上。 到目前为止,您应该熟悉编码器和解码器的概念,其中我们的模型学习编码器以形成输入句子的表示形式,然后学习解码器将该表示形式解码为最终输出,无论是分类还是分类。 翻译任务:
......@@ -297,7 +297,7 @@ GPT-2 与 BERT 类似,但在一些细微的方面有所不同。 虽然这两
就 BERT 和 GPT-2 之间的性能而言,这是关键的权衡之一。 BERT 被双向训练的事实意味着这种单令牌生成是不可能的。 但是,GPT-2 不是双向的,因此在进行预测时只考虑句子中的先前单词,这就是为什么 BERT 在预测句子中缺少的单词时胜过 GPT-2 的原因。
## 比较自我注意和蒙蔽的自我注意
## 比较自我注意和遮罩的自我注意
这种差异在两个不同模型实现注意力的方式上也很明显。 由于 BERT 是双向的,因此它的注意力机制能够考虑整个输入句子的上下文,并确定输入句子中确切的位置:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册