「PyTorch自然语言处理系列」4. 自然语言处理的前馈网络(下)

本文介绍了使用多层感知机和卷积神经网络对姓氏进行国籍分类的任务。重点讲解了CNN的架构特点,如池化操作、批量规范化等,并通过实例展示了如何利用CNN捕获文本中的子结构信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来源 |  Natural Language Processing with PyTorch

作者 | Rao,McMahan

译者 | Liangchu

校对 | gongyouliu

编辑 | auroral-L

全文共4790字,预计阅读时间30分钟。

上下拉动翻看这个书签

4.1 多层感知机
  4.1.1 一个简单示例:XOR
  4.1.2 在 PyTorch 中实现多层感知机
 4.2 示例:使用多层感知机对姓氏进行分类
  4.2.1 姓氏数据集
  4.2.2 Vocabulary,Vectorizer和DataLoader
   4.2.2.1 Vocabulary类
   4.2.2.2 SurnameVectorizer
  4.2.3 SurnameClassifier模型
  4.2.4 训练例程
   4.2.4.1 训练循环(training loop)
  4.2.5 模型评估和预测
   4.2.5.1 在测试集上评估
   4.2.5.2 分类一个新姓氏
   4.2.5.3 获取新姓氏的前k个预测
  4.2.6 MLPs正则化:权重正则化和结构正则化(或Dropout)
 4.3 卷积神经网络
  4.3.1 CNN 超参数
   4.3.1.1 卷积操作的维度
   4.3.1.2 通道
   4.3.1.3 核大小
   4.3.1.4 Stride
   4.3.1.5 Padding
   4.3.1.6 Dilation
  4.3.2 在 PyTorch 实现 CNNs
 4.4 示例:使用 CNN 对姓氏进行分类
  4.4.1 SurnameDataset类
  4.4.2 Vocabulary,Vectorizer和DataLoader
  4.4.3 使用 CNN 重新实现SurnameClassifier
  4.4.4 训练例程
  4.4.5 模型评估和预测
   4.4.5.1 在测试集上评估
   4.4.5.2 为新的姓氏分类或获取最佳预测
 4.5 CNN 中的其他话题
  4.5.1 池化操作
  4.5.2 批量规范化(BatchNorm)
  4.5.3 网络中的网络连接(1x1卷积)
  4.5.4 残差连接/残差块
 4.6 总结

4.4 示例:使用 CNN 对姓氏进行分类

为了证明 CNN 的有效性,让我们使用一个简单的CNN模型来分类姓氏。这项任务的许多细节与前面多层感知机的示例相同,但是模型的构造和向量化过程发生了变化。模型的输入将是一个独热矩阵,而非我们在上一个例子中看到的压缩的独热向量。这种设计使得 CNN 更好地“查看”字符的排列,并对在“示例:使用多层感知机对姓氏进行分类”一节中使用的压缩的独热编码中丢失的序列信息进行编码。

4.4.1 SurnameDataset类

我们已经在“姓氏数据集”一节中介绍过姓氏数据集。本例中,我们会使用相同的数据集,然而在实现上有一个不同之处:数据集由独热向量矩阵而非一个压缩的独热向量组成。为了实现这一点,我们实现了一个数据集类,它跟踪最长的姓氏,并将其作为矩阵中包含的行数提供给向量化器。列的数量是独热向量的大小(Vocabulary的大小)。下例(4-17)展示对SurnameDataset.__getitem__()所做的更改,我们会在下一小节显示对SurnameVectorizer.vectorize()的更改。

示例 4-17:为传递最大姓氏长度而修改的SurnameDataset

class SurnameDataset(Dataset):
    # ... existing implementation from Section 4.2


    def __getitem__(self, index):
        row = self._target_df.iloc[index]


        surname_matrix = \
            self._vectorizer.vectorize(row.surname, self._max_seq_length)


        nationality_index = \
             self._vectorizer.nationality_vocab.lookup_token(row.nationality)


        return {'x_surname': surname_matrix,
                'y_nationality': nationality_index}

我们使用数据集中最长的姓氏来控制独热矩阵的大小,有两个原因:首先,将每个minibatch的姓氏矩阵组合成一个三维张量,要求它们的大小相同;其次,使用数据集中最长的姓氏意味着可以以相同的方式处理每个minibatch。

4.4.2 Vocabulary,Vectorizer和DataLoader

在本例中,尽管Vocabulary和DataLoader的实现方式与前面“ Vocabulary,Vectorizer和DataLoader”一节中的示例相同&

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据与智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值