提交 ac6c5443 编写于 作者: W wizardforcel

2021-01-21 16:24:54

上级 a322cec7
......@@ -2,7 +2,7 @@
在互联网时代,每天从社交媒体和其他平台生成越来越多的文本数据,因此能够理解这些数据是一项至关重要的技能。 本书将帮助您为**自然语言处理****NLP**)任务建立深度学习模型,这将帮助您从文本中提取有价值的见解。
我们将从了解如何安装 PyTorch 以及使用 CUDA 加快处理速度开始。 然后,您将通过实际示例探索 NLP 架构的工作方式。 后面的章节将指导您完成重要的原则,例如 PyTorch 中的单词嵌入,CBOW 和标记化。 然后,您将学习一些用于处理文本数据的技术,以及如何将深度学习用于 NLP 任务。 接下来,我们将演示如何实现深度学习和神经网络架构来构建模型,以使您能够对文本进行分类和翻译以及执行情感分析。 最后,您将学习如何构建高级 NLP 模型,例如会话聊天机器人。
我们将从了解如何安装 PyTorch 以及使用 CUDA 加快处理速度开始。 然后,您将通过实际示例探索 NLP 架构的工作方式。 后面的章节将指导您完成重要的原则,例如 PyTorch 中的单词嵌入,CBOW 和分词。 然后,您将学习一些用于处理文本数据的技术,以及如何将深度学习用于 NLP 任务。 接下来,我们将演示如何实现深度学习和神经网络架构来构建模型,以使您能够对文本进行分类和翻译以及执行情感分析。 最后,您将学习如何构建高级 NLP 模型,例如会话聊天机器人。
到本书结尾,您将了解使用 PyTorch 进行深度学习如何解决不同的 NLP 问题,以及如何构建模型来解决这些问题。
......
......@@ -2,14 +2,14 @@
在深度学习中,有许多种表示文本的方式。 虽然我们已经介绍了基本的**词袋****BoW**)表示形式,但不足为奇的是,还有一种更为复杂的表示文本数据的方式称为嵌入。 BoW 向量仅充当句子中单词的计数,而嵌入有助于从数字上定义某些单词的实际含义。
在本章中,我们将探讨文本嵌入,并学习如何使用连续 BoW 模型创建嵌入。 然后,我们将继续讨论 n 元语法以及如何在模型中使用它们。 我们还将介绍标记,分块和标记化可用于将 NLP 分成其各个组成部分的各种方式。 最后,我们将研究 TF-IDF 语言模型,以及它们如何对不经常出现的单词加权我们的模型。
在本章中,我们将探讨文本嵌入,并学习如何使用连续 BoW 模型创建嵌入。 然后,我们将继续讨论 n 元语法以及如何在模型中使用它们。 我们还将介绍标记,分块和分词可用于将 NLP 分成其各个组成部分的各种方式。 最后,我们将研究 TF-IDF 语言模型,以及它们如何对不经常出现的单词加权我们的模型。
本章将涵盖以下主题:
* 词嵌入
* 探索 CBOW
* 探索 N 元组
* 标记化
* 分词
* 对词性进行标记和分块
* 特遣部队
......@@ -414,7 +414,7 @@ My favourite language is ___
# 分词
接下来,我们将学习 NLP 的分词化,这是一种预处理文本的方式,可以输入到模型中。 标记化将我们的句子分成较小的部分。 这可能涉及将一个句子拆分成单个单词,或者将整个文档分解成单个句子。 这是 NLP 必不可少的预处理步骤,可以在 Python 中相当简单地完成:
接下来,我们将学习 NLP 的分词化,这是一种预处理文本的方式,可以输入到模型中。 分词将我们的句子分成较小的部分。 这可能涉及将一个句子拆分成单个单词,或者将整个文档分解成单个句子。 这是 NLP 必不可少的预处理步骤,可以在 Python 中相当简单地完成:
1. 我们先接收一个基本的句子,用 NLTK 中的**分词器**把这个句子分割成各个词。
......@@ -470,7 +470,7 @@ My favourite language is ___
图 3.21 –将多个句子分解为单词
5.标记化的过程中,还有一个可选的步骤,那就是去除停顿词。歇后语是非常常见的词,对句子的整体意思没有帮助。这些词包括`a``I``or`等。我们可以使用下面的代码从 NLTK 中打印出一个完整的列表。
5.分词的过程中,还有一个可选的步骤,那就是去除停顿词。歇后语是非常常见的词,对句子的整体意思没有帮助。这些词包括`a``I``or`等。我们可以使用下面的代码从 NLTK 中打印出一个完整的列表。
```py
stop_words = stopwords.words('english')
......
......@@ -2,7 +2,7 @@
文本数据可以从许多不同的来源收集,并采用许多不同的形式。 文本可以整洁,可读或原始且混乱,也可以采用许多不同的样式和格式。 能够对这些数据进行预处理,以便可以在将其转换为 NLP 模型之前将其转换为标准格式,这就是我们将在本章中介绍的内容。
标记化相似,词干提取和词形还原是 NLP 预处理的其他形式。 但是,与将文档简化成单个单词的标记化不同,词干提取和词形还原试图将这些单词进一步缩小到其词根。 例如,几乎所有英语动词都有许多不同的变体,具体取决于时态:
分词相似,词干提取和词形还原是 NLP 预处理的其他形式。 但是,与将文档简化成单个单词的分词不同,词干提取和词形还原试图将这些单词进一步缩小到其词根。 例如,几乎所有英语动词都有许多不同的变体,具体取决于时态:
```py
He jumped
......
......@@ -196,7 +196,7 @@ reviews[0]
![Figure 5.12 – Output of NTLK tokenization ](img/B12365_05_12.jpg)
图 5.12 – NTLK 标记化的输出
图 5.12 – NTLK 分词的输出
我们返回评论本身,以及所有评论中的所有单词集(即词汇/语料库),我们将使用它们来创建词汇表。
......@@ -518,7 +518,7 @@ def preprocess_review(review):
    return final
```
我们删除标点符号和尾随空格,将字母转换为小写,并像以前一样对输入句子进行标记化。 我们将句子填充到长度为`50`的序列上,然后使用我们的预先计算的字典将的标记转换为数值。 请注意,我们的输入内容可能包含我们的网络从未见过的新词。 在这种情况下,我们的函数会将它们视为空令牌。
我们删除标点符号和尾随空格,将字母转换为小写,并像以前一样对输入句子进行分词。 我们将句子填充到长度为`50`的序列上,然后使用我们的预先计算的字典将的标记转换为数值。 请注意,我们的输入内容可能包含我们的网络从未见过的新词。 在这种情况下,我们的函数会将它们视为空令牌。
接下来,我们创建实际的`predict()`函数。 我们预处理输入检查,将其转换为张量,然后将其传递给数据加载器。 然后,我们遍历该数据加载器(即使它仅包含一个句子),并通过我们的网络进行审查以获得预测。 最后,我们评估我们的预测并打印出正面还是负面的评价:
......
......@@ -133,7 +133,7 @@ CNN 背后的基本概念是卷积。 **卷积**本质上是一个滑动窗口
在我们的 CNN 模型中,我们将改为根据数据创建数据迭代器。 这些迭代器对象使我们能够轻松地从输入数据中生成小批数据,从而使我们能够使用小批数据来训练模型,而不是将输入数据一一输入到网络中。 这意味着我们网络中的梯度是针对整批数据计算的,并且参数调整是在每批数据之后进行的,而不是在每行数据通过网络传递之后进行的。
对于我们的数据,我们将从`torchtext`包中获取数据集。 这样的优势不仅在于包含许多用于模型训练的数据集,而且还使我们能够使用内置函数轻松地对句子进行标记化和向量化。
对于我们的数据,我们将从`torchtext`包中获取数据集。 这样的优势不仅在于包含许多用于模型训练的数据集,而且还使我们能够使用内置函数轻松地对句子进行分词和向量化。
按着这些次序:
......@@ -151,7 +151,7 @@ CNN 背后的基本概念是卷积。 **卷积**本质上是一个滑动窗口
labels = data.LabelField(dtype = torch.float)
```
在这里,我们将标记化设置为等于`spacy`,以设置输入句子的标记化方式。 `TorchText`然后使用`spacy`包自动标记输入的句子。 `spacy`由英语索引组成,因此任何单词都会自动转换为相关标记。 为了使此功能有效,您可能需要安装`spacy`。 可以在命令行中通过键入以下命令来完成:
在这里,我们将分词设置为等于`spacy`,以设置输入句子的分词方式。 `TorchText`然后使用`spacy`包自动标记输入的句子。 `spacy`由英语索引组成,因此任何单词都会自动转换为相关标记。 为了使此功能有效,您可能需要安装`spacy`。 可以在命令行中通过键入以下命令来完成:
```py
pip3 install spacy
......@@ -203,7 +203,7 @@ train_data.examples[0].label
图 6.12 –数据集对象的标签
因此,我们可以看到输入的数据由一个标记化的句子组成,而我们的标签则由我们希望分类的类别组成。 我们还可以检查训练和验证集的大小,如下所示:
因此,我们可以看到输入的数据由一个分词的句子组成,而我们的标签则由我们希望分类的类别组成。 我们还可以检查训练和验证集的大小,如下所示:
```py
print(len(train_data))
......@@ -216,7 +216,7 @@ print(len(valid_data))
图 6.13 –训练和验证集的大小
这表明我们的训练验证率约为 70% 至 30%。 值得注意的是,我们的输入句子是如何被标记化的,即标点符号被当作它们自己的标记。
这表明我们的训练验证率约为 70% 至 30%。 值得注意的是,我们的输入句子是如何被分词的,即标点符号被当作它们自己的标记。
现在我们知道我们的神经网络不会将原始文本作为输入,我们必须找到某种方法将其转换为某种形式的嵌入表示。 虽然我们可以训练自己的嵌入层,但可以改用我们在 “第 3 章” 中讨论过的预先计算的 **GLOVE** 向量来转换数据并执行文本嵌入。 这还具有使模型更快地训练的额外好处,因为我们将不需要从头开始手动训练嵌入层:
......
# 第 2 部分:自然语言处理基础
在本节中,您将学习构建**自然语言处理****NLP**)应用的基础知识。 您还将在本节中学习如何在 PyTorch 中使用各种 NLP 技术,例如单词嵌入,CBOW 和标记化
在本节中,您将学习构建**自然语言处理****NLP**)应用的基础知识。 您还将在本节中学习如何在 PyTorch 中使用各种 NLP 技术,例如单词嵌入,CBOW 和分词
本节包含以下章节:
......
......@@ -4,7 +4,7 @@
在本章中,我们将介绍以下秘籍:
* 标记化
* 分词
* 创建字段
* 开发数据集
* 开发迭代器
......@@ -13,7 +13,7 @@
* 多层 LSTM
* 双向 LSTM
# 介绍 RNN
# RNN 介绍
这是 RNN 的示意图:
......@@ -67,9 +67,9 @@ pip install torchtext
至此,我们完成了本章所需的设置。
# 标记化
# 分词
在处理自然语言处理任务时,我们采用文本语料库并将其分解为较小的单元。 在本秘籍中,我们将句子分解为单个单词,其中每个单词代表一个意思,其他单词与它附近的其他单词一起表达一个句子的意图。 计算机只能理解数字,因此为这些单词分配了唯一的整数值来表示单词。 将句子分解为标记的过程称为标记化。 在本秘籍中,我们将执行单词标记化
在处理自然语言处理任务时,我们采用文本语料库并将其分解为较小的单元。 在本秘籍中,我们将句子分解为单个单词,其中每个单词代表一个意思,其他单词与它附近的其他单词一起表达一个句子的意图。 计算机只能理解数字,因此为这些单词分配了唯一的整数值来表示单词。 将句子分解为标记的过程称为分词。 在本秘籍中,我们将执行单词分词
# 操作步骤
......@@ -88,7 +88,7 @@ pip install torchtext
['This', 'is', 'a', 'test', 'for', 'tokenizer']
```
在此秘籍中,我们成功实现了单词标记化
在此秘籍中,我们成功实现了单词分词
# 工作原理
......@@ -96,7 +96,7 @@ pip install torchtext
# 更多
我们还可以使用`nltk`库对句子进行标记化
我们还可以使用`nltk`库对句子进行分词
```py
>>from nltk.tokenize import word_tokenize
......@@ -104,11 +104,11 @@ pip install torchtext
['This', 'is', 'a', 'test', 'for', 'tokenizer']
```
此外,还有其他类型的标记化,例如字符串标记化,其中涉及将字符串标记化为子字符串。
此外,还有其他类型的分词,例如字符串分词,其中涉及将字符串分词为子字符串。
# 另见
可以在[这个页面](https://www.nltk.org/api/nltk.tokenize.html)上探索使用`nltk`对字符串进行的各种标记化
可以在[这个页面](https://www.nltk.org/api/nltk.tokenize.html)上探索使用`nltk`对字符串进行的各种分词
# 创建字段
......@@ -168,13 +168,13 @@ pip install torchtext
在此秘籍中,我们根据手头的特定任务,使用`field`类对给定的输入文本执行了各种文本处理任务。 在审阅分类的示例中,在`review`字段中,我们将`sequential`参数设置为`True`,因为它是顺序数据。 对于标签字段,我们将其设置为`False`,因为它们不是顺序的。 我们可以将文本设置为小写,这样就不会根据标记的大小写为相同的单词分配单独的标记 ID。 在评论分类的情况下,这不会影响含义; 这可以通过将`lower`设置为`True`来实现。
对于数字字段,我们将`use_vocab`设置为`False`,这是我们为审阅标签所做的,因为我们假设标签的负数值为`0`,正数的值为`1`。 我们从标记化部分传递了`tokenizer`函数作为`tokenize`参数; 我们甚至可以通过设置`tokenize="spacy"`使用`spacy`的标记器。 对于某些任务,例如,使用`Sequence`对模型进行排序,我们可能需要特殊的标记来指示序列的开始和结束。 可以通过设置`init_token``eos_token`参数轻松完成。 这对于序列到序列的模型是正确的,并且如果在模型评估期间用于训练模型的词汇表中不存在令牌(词汇表外),则可以使用自定义令牌来替换这些令牌, 设置`unk_token`参数。
对于数字字段,我们将`use_vocab`设置为`False`,这是我们为审阅标签所做的,因为我们假设标签的负数值为`0`,正数的值为`1`。 我们从分词部分传递了`tokenizer`函数作为`tokenize`参数; 我们甚至可以通过设置`tokenize="spacy"`使用`spacy`的标记器。 对于某些任务,例如,使用`Sequence`对模型进行排序,我们可能需要特殊的标记来指示序列的开始和结束。 可以通过设置`init_token``eos_token`参数轻松完成。 这对于序列到序列的模型是正确的,并且如果在模型评估期间用于训练模型的词汇表中不存在令牌(词汇表外),则可以使用自定义令牌来替换这些令牌, 设置`unk_token`参数。
然后,将`batch_first`设置为`True`,以使输出张量的第一维为批量维,如果`fix_length`参数设置为整​​数值,则将对输入设置固定长度 使用此字段。
# 更多
我们可以为特定于某种语言的分词设置用于分词的语言,该语言支持 spacy 支持的语言。 我们可以使用`pad_token`参数设置自定义填充令牌。 我们可以在标记化之后但在数字化之前使用该字段定义将应用于示例的处理管道,在数字化之后但使用`preprocessing``postprocessing`参数将数字转换为张量之前,我们可以执行相同的操作。 `stop_words`参数可用于删除在预处理时需要删除的令牌。 此外,还有一种专门用于标签字段的字段类型`LabelField`,它可以代替普通字段使用。
我们可以为特定于某种语言的分词设置用于分词的语言,该语言支持 spacy 支持的语言。 我们可以使用`pad_token`参数设置自定义填充令牌。 我们可以在分词之后但在数字化之前使用该字段定义将应用于示例的处理管道,在数字化之后但使用`preprocessing``postprocessing`参数将数字转换为张量之前,我们可以执行相同的操作。 `stop_words`参数可用于删除在预处理时需要删除的令牌。 此外,还有一种专门用于标签字段的字段类型`LabelField`,它可以代替普通字段使用。
# 另见
......
......@@ -339,7 +339,7 @@ return model
我们还使用`DataLoader`为我们的训练,测试和验证数据集创建了迭代器。 然后,我们创建了一个`LABEL`常量,这是一个字典,将分类器输出索引映射到类名。
# 定义 TensorBoard 作者
# 定义 TensorBoard 编写器
在此秘籍中,我们将创建一个写入 TensorBoard 的对象。 我们使用`SummaryWriter`对象写入 TensorBoard。 我们可以使用 TensorBoard 编写标量值,绘图图和绘图图像以及其他功能。 我们将定义一个返回 TensorBoard `SummaryWriter`对象以记录我们的模型指标的函数。
......
......@@ -26,7 +26,7 @@ GAN 中的两个模型称为生成器和判别器,其中生成器负责创建
* 创建 DCGAN 判别器
* 训练 DCGAN 模型
* 可视化 DCGAN 结果
* 使用 PyTorch 集线器运行 PGGAN
* 使用 PyTorch Hub 运行 PGGAN
# 技术要求
......@@ -654,7 +654,7 @@ pip install numpy
您可以在[这个页面](https://pytorch.org/tutorials/beginner/dcgan_faces_tutorial.html#results)上看到 DCGAN 的可视化效果和动画。
# 使用 PyTorch 集线器运行 PGGAN
# 使用 PyTorch Hub 运行 PGGAN
在本秘籍中,我们将研究**渐进 GAN**(**PGGAN**),与 DCGAN 相比它们是高级 GAN,并且能够生成逼真的图像。 PGGAN 分多个阶段训练 GAN 网络。 它具有`z`的潜在特征,并使用两个反卷积层生成`4×4`图像。 在判别器方面,网络使用两个卷积层训练生成的`4 x 4`图像。 网络稳定后,它会在判别器中再增加两个卷积层以将图像上采样到`8 x 8`,再增加两个卷积层以对图像下采样。
......@@ -671,7 +671,7 @@ PGGAN 的关键创新可以总结如下:
* **均衡的学习率**:所有权重(`w`)被归一化(`w'`)在某个范围内,以便`w' = w / c`的常数`c`对于每一层来说都是不同的,具体取决于重量矩阵的形状。
* **逐像素特征归一化**:对每个像素中的特征向量进行归一化,因为批量规范最适合大型微型批量,并且占用大量内存。
Nvidia 最初执行 PGGAN 的过程要花一到两个月的时间。 但是,为了让我们看到 PGGAN 的性能,我们将使用 PyTorch 集线器,它是使用 PyTorch 构建的预训练模型的存储库。
Nvidia 最初执行 PGGAN 的过程要花一到两个月的时间。 但是,为了让我们看到 PGGAN 的性能,我们将使用 PyTorch Hub,它是使用 PyTorch 构建的预训练模型的存储库。
# 准备
......
......@@ -6,14 +6,14 @@ RL 是**人工智能**(**AI**)的领域,与我们在前面各章中介绍
在本章中,我们将介绍以下秘籍:
* OpenAI 体育馆简介– CartPole
* OpenAI Gym简介– CartPole
* 引入 DQN
* 实现 DQN 类
* 训练 DQN
* 引入深度 GA
* 生成代理
* 选择代理商
* 突变剂
* 使智能体突变
* 训练深度 GA
# 深入了解 RL
......@@ -28,7 +28,7 @@ RL 解决方案涉及将反复试验的结果存储在查找表中,当环境
深度学习是 RL 最近取得突破的背后。 它们展现了代表性的功能,效率,灵活性,并为眼前的问题提供了简化的解决方案。
# OpenAI 体育馆简介– CartPole
# OpenAI Gym简介 – CartPole
在本秘籍中,我们将实现两种不同的 RL 算法。 我们将需要一个环境来运行我们的算法,以便我们创建的模型将获得最大的回报。
......@@ -36,11 +36,11 @@ RL 解决方案涉及将反复试验的结果存储在查找表中,当环境
杆子是一个倒立的摆锤,其重心高于其枢轴点。 为了控制倒立摆的不稳定位置,我们必须将枢轴点移动到质心下方。 目的是施加适当的力,以使柱杆在枢轴点上保持平衡。
下图显示了 OpenAI 体育馆的 Cartpole:
下图显示了 OpenAI Gym的 Cartpole:
![](img/20943d9b-be6d-4bb1-b4df-0dc04bf896ed.png)
图 1:OpenAI 体育馆– Cartpole
图 1:OpenAI Gym– Cartpole
撑杆通过未激活的接头连接到推车,该接头在水平轨道上自由移动。 摆锤垂直于水平轨道开始。 目的是通过施加力 +1 和 -1 来防止跌落。
......@@ -133,9 +133,9 @@ pip install gym
# 另见
您可以在[这个页面](http://gym.openai.com/docs/)上了解有关 OpenAI 体育馆的更多信息。
您可以在[这个页面](http://gym.openai.com/docs/)上了解有关 OpenAI Gym的更多信息。
# 引入 DQN
# DQN 介绍
在进入下一个秘籍之前,让我们快速看一下 DQN。
......@@ -538,7 +538,7 @@ Rewards: 160.0
您也可以将复杂的网络与卷积层一起使用。 在[这个页面](https://github.com/IBM/distributed-evolutionary-ml/blob/master/nn.py)中显示了一个示例。
# 生成代理
# 生成智能体
在本秘籍中,我们将着眼于创建一组代理以开始我们的进化过程,然后初始化这些代理的权重。 我们将使用这些代理来评估模型的性能并生成下一代代理。
......@@ -596,7 +596,7 @@ agents.append(agent)
您可以在[这个页面](https://pytorch.org/docs/stable/nn.init.html)上找到有关其他初始化方法的信息。
# 选择代理商
# 选择智能体
在本秘籍中,我们将基于适应度函数着眼于代理商选择,在我们的案例中,这意味着在平衡卡特波勒方面得分很高。 这意味着我们将传播得分最高的代理,而忽略其余的代理。 我们将评估给定一代中的每个代理,并多次评估它们,以确保奖励不是偶然的。 最后,我们将使用每个代理商的平均分数来确定表现最佳的代理商。
......@@ -664,9 +664,9 @@ return total_reward
然后,我们使用第二个函数`agent_score()`返回指定数量`runs`之上的平均分数,并返回该平均分数,以确保模型的随机性能不佳。 最后一个函数`all_agent_score()`仅循环遍历一代中的所有代理,并获得一代中所有代理的平均分数。
# 突变剂
# 使智能体突变
在本秘籍中,我们将介绍突变剂。 在从给定的一代中选择性能最佳的模型之后,然后再创建下一代代理,我们将对这些选定代理的权重进行轻微的随机变化,这使代理可以探索更多区域以获得更好的回报,只是 就像生物进化如何运作。
在本秘籍中,我们将介绍使智能体突变。 在从给定的一代中选择性能最佳的模型之后,然后再创建下一代代理,我们将对这些选定代理的权重进行轻微的随机变化,这使代理可以探索更多区域以获得更好的回报,只是 就像生物进化如何运作。
# 操作步骤
......
......@@ -424,7 +424,7 @@ my_cell = MyCell(MyDecisionGate())
[您可以在以下网址找到有关混合跟踪和脚本的更多信息](https://pytorch.org/tutorials/beginner/Intro_to_TorchScript_tutorial.html#mixing-scripting-and-tracing)
# 出至 ONNX
# 出至 ONNX
在本秘籍中,我们将介绍如何将 PyTorch 模型导出到**开放神经网络交换****ONNX**),该模型为深度学习和传统机器学习模型提供了一种开源格式。 它定义了一个可扩展的计算图模型,以及内置的运算符和标准数据类型。
......
......@@ -250,9 +250,9 @@ train, val, test = data.TabularDataset.splits(
上一小节的第一部分在 spaCy 中加载英语,并定义了分词器功能。 下一部分是使用`torchtext.data.Field`定义输入和输出字段的位置。 `Field`类用于定义将数据加载到`DataLoader`之前的预处理步骤。
在所有输入语句之间共享`Field`变量`TEXT`,并且在所有输出标签之间共享`Field`变量`LABEL`。 该示例中的`TEXT`设置为顺序的,这告诉`Field`实例数据是顺序相关的,并且标记化是将其分成较小块的更好选择。 如果`sequential`设置为`False`,则不会对数据应用分词。
在所有输入语句之间共享`Field`变量`TEXT`,并且在所有输出标签之间共享`Field`变量`LABEL`。 该示例中的`TEXT`设置为顺序的,这告诉`Field`实例数据是顺序相关的,并且分词是将其分成较小块的更好选择。 如果`sequential`设置为`False`,则不会对数据应用分词。
由于`sequential``TEXT``True`,因此我们开发的标记化函数设置为`tokenizer`。 该选项默认为 Python 的`str.split`,但是我们需要更智能的分词功能,而 spaCy 的分词功能可以为我们提供帮助。
由于`sequential``TEXT``True`,因此我们开发的分词函数设置为`tokenizer`。 该选项默认为 Python 的`str.split`,但是我们需要更智能的分词功能,而 spaCy 的分词功能可以为我们提供帮助。
常规 NLP 管道所做的另一个重要修改是将所有数据转换为相同的情况。 将`lower`设置为`True`会发生这种情况,但是默认情况下是`False`。 除了示例中给出的三个参数外,`Field`类还接受许多其他参数,其中包括`fix_length`以固定序列的长度; `pad_token`,默认为`<pad>`,用于填充序列以匹配`fixed_length`或批量中最长序列的长度; 和`unk_token`(默认为`<unk>`),用于替换没有词汇向量的标记。
......
......@@ -12,7 +12,7 @@
`torchtext`具有实用程序,可用于创建可以轻松迭代的数据集,以创建语言翻译模型。 在此示例中,我们展示了如何对原始文本句子进行标记,构建词汇表以及将标记数字化为张量。
注意:本教程中的标记化需要 [Spacy](https://spacy.io) 我们使用 Spacy 是因为它为英语以外的其他语言的标记化提供了强大的支持。 `torchtext`提供了`basic_english`标记器,并支持其他英语标记器(例如 [Moses](https://bitbucket.org/luismsgomes/mosestokenizer/src/default/)),但对于语言翻译(需要多种语言),Spacy 是您的最佳选择。
注意:本教程中的分词需要 [Spacy](https://spacy.io) 我们使用 Spacy 是因为它为英语以外的其他语言的分词提供了强大的支持。 `torchtext`提供了`basic_english`标记器,并支持其他英语标记器(例如 [Moses](https://bitbucket.org/luismsgomes/mosestokenizer/src/default/)),但对于语言翻译(需要多种语言),Spacy 是您的最佳选择。
要运行本教程,请先使用`pip``conda`安装`spacy`。 接下来,下载英语和德语 Spacy 分词器的原始数据:
......
......@@ -660,7 +660,7 @@ Episode 0 - Step 40 - Epsilon 0.9999900000487484 - Mean Reward 231.0 - Mean Leng
## 结论
在本教程中,我们看到了如何使用 PyTorch 来训练玩游戏的 AI。 您可以使用相同的方法训练 AI 在 [OpenAI 体育馆](https://gym.openai.com/)上玩任何游戏。 希望您喜欢本教程,请随时通过[我们的 Github](https://github.com/yuansongFeng/MadMario/) 与我们联系!
在本教程中,我们看到了如何使用 PyTorch 来训练玩游戏的 AI。 您可以使用相同的方法训练 AI 在 [OpenAI Gym](https://gym.openai.com/)上玩任何游戏。 希望您喜欢本教程,请随时通过[我们的 Github](https://github.com/yuansongFeng/MadMario/) 与我们联系!
**脚本的总运行时间**:(0 分钟 21.485 秒)
......
......@@ -199,9 +199,9 @@ model.to(configs.device)
```
### 2.3 定义标记化和评估函数
### 2.3 定义分词和评估函数
我们重用了 [Huggingface](https://github.com/huggingface/transformers/blob/master/examples/run_glue.py) 中的标记化和评估函数。
我们重用了 [Huggingface](https://github.com/huggingface/transformers/blob/master/examples/run_glue.py) 中的分词和评估函数。
```py
# coding=utf-8
......
......@@ -16,7 +16,7 @@
* Python 和 TensorFlow
* 线性代数是神经网络的前提
* 安装包:Python,TensorFlow 和 OpenAI 体育馆(在第 1 章,“深度学习–架构和框架”和第 2 章中显示)
* 安装包:Python,TensorFlow 和 OpenAI Gym(在第 1 章,“深度学习–架构和框架”和第 2 章中显示)
# 下载示例代码文件
......
......@@ -26,11 +26,11 @@ OpenAI Gym 提供不同类型的环境。 它们如下:
我们将在本章介绍以下主题:
* OpenAI 体育馆环境
* OpenAI Gym环境
* 使用 OpenAI Gym 环境对代理进行编程
* 将 Q 网络用于实际应用
# OpenAI 体育馆
# OpenAI Gym
为了下载并安装 OpenAI Gym,您可以使用以下任一选项:
......
......@@ -430,7 +430,7 @@ POMDP 中的值迭代基本上是从信念 MDP 获得的无限状态空间上的
# 使用 MDP 训练 FrozenLake-v0 环境
这是关于 OpenAI 体育馆中名为 **FrozenLake-v0** 的网格世界环境,在第 2 章“使用 OpenAI 体育馆训练强化学习智能体”中讨论。 我们实现了 Q 学习和 Q 网络(我们将在以后的章节中进行讨论)以了解 OpenAI 体育馆的环境。
这是关于 OpenAI Gym中名为 **FrozenLake-v0** 的网格世界环境,在第 2 章“使用 OpenAI Gym训练强化学习智能体”中讨论。 我们实现了 Q 学习和 Q 网络(我们将在以后的章节中进行讨论)以了解 OpenAI Gym的环境。
现在,让我们尝试使用以下代码实现值迭代,以获取 FrozenLake-v0 环境中每个状态的效用值:
......@@ -592,6 +592,6 @@ After learning completion printing the utilities for each states below from stat
在本章中,我们介绍了网格世界类型的环境的详细信息,并了解了马尔可夫决策过程的基础,即状态,动作,奖励,过渡模型和策略。 此外,我们利用这些信息通过价值迭代和策略迭代方法来计算效用和最优策略。
除此之外,我们对部分可观察的马尔可夫决策过程是什么样子以及解决它们的挑战有了基本的了解。 最后,我们从 OpenAI 体育馆获取了我们最喜欢的 gridworld 环境,即 FrozenLake-v0,并实现了一种值迭代方法,以使我们的代理学会在该环境中导航。
除此之外,我们对部分可观察的马尔可夫决策过程是什么样子以及解决它们的挑战有了基本的了解。 最后,我们从 OpenAI Gym获取了我们最喜欢的 gridworld 环境,即 FrozenLake-v0,并实现了一种值迭代方法,以使我们的代理学会在该环境中导航。
在下一章中,我们将从策略梯度开始,然后从 **FrozenLake** 过渡到其他一些引人入胜的复杂环境。
\ No newline at end of file
......@@ -348,7 +348,7 @@ end for
# 使用策略梯度的智能体学习 Pong
在本节中,我们将创建一个策略网络,该策略网络将使用来自 pong 环境的原始像素(来自 OpenAI 体育馆**pong-v0**)作为输入。 策略网络是一个单独的隐藏层神经网络,它全连接到输入层上 pong 的原始像素,还全连接到包含单个节点的输出层,该单个节点返回了桨上升的可能性。 我要感谢 Andrej Karpathy 提出了一种使代理使用策略梯度进行学习的解决方案。 我们将尝试实现类似的方法。
在本节中,我们将创建一个策略网络,该策略网络将使用来自 pong 环境的原始像素(来自 OpenAI Gym**pong-v0**)作为输入。 策略网络是一个单独的隐藏层神经网络,它全连接到输入层上 pong 的原始像素,还全连接到包含单个节点的输出层,该单个节点返回了桨上升的可能性。 我要感谢 Andrej Karpathy 提出了一种使代理使用策略梯度进行学习的解决方案。 我们将尝试实现类似的方法。
灰度大小为`80 * 80`的像素图像(我们将不使用 RGB,即`80 * 80 * 3`)。 因此,我们有一个`80 * 80`的二进制网格,它告诉我们桨和球的位置,并将其作为输入输入到神经网络。 因此,神经网络将包含以下内容:
......
......@@ -159,7 +159,7 @@ end
因此,难题是 AI 是仅根据当前最佳策略基于动作信任已获悉的 Q 值,还是应该随机尝试其他动作以希望获得更好的回报,从而改善 Q 值,因此, 得出更好的最佳策略。
# OpenAI 体育馆山地车问题的 Q 学习
# OpenAI Gym山地车问题的 Q 学习
**山地车**是强化学习领域的标准测试问题。 它由动力不足的汽车组成,必须将陡峭的山坡驱动到标志点,如下图所示:
......@@ -425,7 +425,7 @@ end
决斗 DQN 具有独立的网络来计算值和优势函数,然后将它们组合回以获取 Q 函数的值。 将价值和优势的计算脱钩的原因在于,对于给定状态下的每个动作,代理不必照顾不必要的价值函数。 因此,将这些计算去耦会导致鲁棒的状态动作 Q 值。
# 适用于 OpenAI 体育馆山地车问题的深度 Q 网络
# 适用于 OpenAI Gym山地车问题的深度 Q 网络
在针对山地车问题实现 Q 学习时,我们已经讨论了环境。 让我们直接深入实现一个深度 Q 网络来解决山地车问题。 首先,我们将使用以下代码导入所需的库:
......@@ -688,9 +688,9 @@ Episode 10 with Reward : 38.7923903502 at epsilon 0.9002 in steps 126
![](img/c662d7ff-84d0-4610-b63d-daec721d3143.png)
接下来,在以下主题中,我们尝试实现一个深度 Q 网络来解决 OpenAI 体育馆中的 Cartpole 问题。
接下来,在以下主题中,我们尝试实现一个深度 Q 网络来解决 OpenAI Gym中的 Cartpole 问题。
# 适用于 OpenAI 体育馆的 Cartpole 问题的深度 Q 网络
# 适用于 OpenAI Gym的 Cartpole 问题的深度 Q 网络
**Cartpole** 是 MDP 环境中最简单的问题之一,如以下屏幕快照所示。 它由一个在水平轴上移动的推车组成,该推车的中心处固定有一根可旋转的杆。 目的是采取行动,使电杆保持接近垂直且不会向下旋转。
......@@ -848,7 +848,7 @@ Mean over last 100 episodes are: 248.72999999999999
由于输出日志太长,因此在这里,我们的输出适合最近六个情节以及最近 100 个情节的每集平均奖励。
# 适用于 OpenAI 体育馆 Atari 突破的深度 Q 网络
# 适用于 OpenAI Gym Atari 突破的深度 Q 网络
**Breakout** 环境是 Atari 的 Nolan Bushnell,Steve Bristow 和 Steve Wozniak 团队开发的。与我们在山地车 Cartpole 中看到的状态相比,Atari Breakout 环境的状态要大得多。 或“冰湖”。 状态空间与我们在 Atari Pong 中看到的范围相似。 因此,学习收敛需要很长时间。 以下屏幕快照说明了 Atari Breakout 环境的初始图像帧:
......@@ -1361,7 +1361,7 @@ For each episode:
end
```
# 适用于 OpenAI 体育馆山地车问题的 SARSA 算法
# 适用于 OpenAI Gym山地车问题的 SARSA 算法
让我们尝试实现先前在山地车问题中解释过的 SARSA 算法。 该程序的初始部分与先前的 Q 学习器具有相似之处。
......@@ -1506,6 +1506,6 @@ Episode 10 completed with total reward 213.212231118 in 786 steps
我们知道强化学习可以优化环境中智能体的回报,**马尔可夫决策过程****MDP**)是一种环境表示和数学框架,用于使用状态对决策进行建模 ,动作和奖励。 在本章中,我们了解到 Q 学习是一种无需任何过渡模型即可为任何 MDP 找到最佳动作选择策略的方法。 另一方面,如果给出了转换模型,则值迭代会为任何 MDP 找到最佳的动作选择策略。
我们还学习了另一个重要的话题,称为深度 Q 网络,这是一种经过改进的 Q 学习方法,它采用深度神经网络作为函数逼近器来在不同环境中进行泛化,这与特定于环境的 Q 表不同。 此外,我们还学会了在 OpenAI 体育馆环境中实现 Q 学习,深度 Q 网络和 SARSA 算法。 先前显示的大多数实现可能在具有更好的超参数值和更多训练集的情况下效果更好。
我们还学习了另一个重要的话题,称为深度 Q 网络,这是一种经过改进的 Q 学习方法,它采用深度神经网络作为函数逼近器来在不同环境中进行泛化,这与特定于环境的 Q 表不同。 此外,我们还学会了在 OpenAI Gym环境中实现 Q 学习,深度 Q 网络和 SARSA 算法。 先前显示的大多数实现可能在具有更好的超参数值和更多训练集的情况下效果更好。
在下一章中,我们将详细介绍著名的异步优势参与者批评算法。
\ No newline at end of file
......@@ -22,7 +22,7 @@
* 异步一步 SARSA
* 异步 N 步 Q 学习
* 异步优势演员评论家
* OpenAI 体育馆中用于 CartPole v0 的 A3C
* OpenAI Gym中用于 CartPole v0 的 A3C
# 为什么使用异步方法?
......@@ -265,9 +265,9 @@ repeat until :
Asynchronous update of using and using
```
# OpenAI 体育馆中 Pong-v0 的 A3C
# OpenAI Gym中 Pong-v0 的 A3C
在第 4 章和“策略梯度”中,我们已经讨论过乒乓环境。 我们将使用以下代码在 OpenAI 体育馆中为 Pong-v0 创建 A3C:
在第 4 章和“策略梯度”中,我们已经讨论过乒乓环境。 我们将使用以下代码在 OpenAI Gym中为 Pong-v0 创建 A3C:
```py
import multiprocessing
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册