【自然语言处理NLP】DPCNN模型论文精读笔记

本文涉及的产品
NLP自然语言处理_高级版,每接口累计50万次
NLP自然语言处理_基础版,每接口每天50万次
NLP 自学习平台,3个模型定制额度 1个月
简介: 【自然语言处理NLP】DPCNN模型论文精读笔记

论文链接:Deep Pyramid Convolutional Neural Networks for Text Categorization

介绍得比较详细的一篇笔记:https://www.cnblogs.com/zjuhaohaoxuexi/p/15196408.html

1.深化网络的作用

“At the same time, as described later, the ‘pyramid’enables efficient discovery of long-range associations in the text (and so more global information),as the network is deepened”

DPCNN模型中,为什么网络被深化了就能够有效地发现文本中的长距离关系?

在DPCNN(Deep Pyramid Convolutional Neural Network)模型中,通过加深网络的层数,可以有效地发现文本中的长距离关系。这是由于DPCNN中采用的"pyramid"结构所导致的。

在DPCNN中,"pyramid"结构通过多个层级的卷积操作和池化操作构建,形成了一种分层的结构。每个层级的卷积和池化操作都可以捕捉不同尺度的语义信息。较早的层级捕捉到更局部的信息,而随着网络的深化,较深层级可以捕捉到更全局的信息。

通过加深网络,DPCNN能够在每个层级中不断传递和整合局部和全局的语义信息。这种逐层的信息传递使得网络能够有效地发现文本中的长距离关系,即远距离的语义关联。网络在较早的层级学习到的局部信息随着层级的增加逐渐整合并传递给后续层级,从而能够捕捉到更全局的关系和上下文信息。

因此,通过深化网络并使用"pyramid"结构,DPCNN能够利用不同层级的卷积和池化操作,以一种分层的方式有效地发现文本中的长距离关系,并从中获得更全局的信息。这有助于提高DPCNN模型在文本分类和相关任务中的性能。

2.下采样

“It is followed by stacking of convolution blocks (two convolution layers and a shortcut) interleaved with pooling layerswith stride 2 for downsampling.”

这里的下采样是什么意思?

在上述描述中,"下采样"指的是在DPCNN模型中使用池化层进行降采样操作。具体来说,DPCNN在卷积块之间插入了池化层,并使用步幅为2的池化操作进行下采样。

下采样的目的是减小特征图的尺寸,从而降低模型的计算复杂度并提高效率。在每个池化层中,输入特征图会被划分为不重叠的小块,并且只选择每个小块中的最大值作为输出。这样就减少了特征图的维度,并且保留了最显著的特征。

通过使用步幅为2的池化操作,DPCNN模型在每个池化层之后将特征图的尺寸减半。这种降采样操作有助于缩小特征图的空间范围,提取更高级别的语义信息,并促使模型在更高层次的卷积块中学习到更全局的特征和上下文关系。

因此,在DPCNN中的下采样操作通过池化层和步幅为2的池化操作,降低特征图的尺寸,减少计算复杂度,并帮助模型学习到更全局的语义信息。

模型源代码:

class  DPCNN(nn.Module):
    def __init__(self, config):
        super( DPCNN, self).__init__()
        if config.embedding_pretrained is not None:
            self.embedding = nn.Embedding.from_pretrained(config.embedding_pretrained, freeze=False)
        else:
            self.embedding = nn.Embedding(config.n_vocab, config.embeding_size, padding_idx=config.n_vocab - 1)
        self.conv_region = nn.Conv2d(1, config.num_filters, (3, config.embeding_size), stride=1)
        self.conv = nn.Conv2d(config.num_filters, config.num_filters, (3, 1), stride=1)
        self.max_pool = nn.MaxPool2d(kernel_size=(3, 1), stride=2)
        self.padding1 = nn.ZeroPad2d((0, 0, 1, 1))  # top bottom
        self.padding2 = nn.ZeroPad2d((0, 0, 0, 1))  # bottom
        self.relu = nn.ReLU()
        self.fc = nn.Linear(config.num_filters, config.num_classes)
    def forward(self, x):
        x = self.embedding(x) # [batch_size,seq_len,embeding_size]
        x = x.unsqueeze(1)  # [batch_size, 1, seq_len, embeding_size]
        x = self.conv_region(x)  # [batch_size, 250, seq_len-3+1, 1]
        x = self.padding1(x)  # [batch_size, 250, seq_len, 1]
        x = self.relu(x)
        x = self.conv(x)  # [batch_size, 250, seq_len-3+1, 1]
    
        x = self.padding1(x)  # [batch_size, 250, seq_len, 1]
        x = self.relu(x)
        x = self.conv(x)  # [batch_size, 250, seq_len-3+1, 1]
        while x.size()[2] > 2:
            x = self._block(x)
        x = x.squeeze()  # [batch_size, num_filters(250)]
        x = self.fc(x)
        return x
        def _block(self, x):    #输入形状:[batch_size, 250, seq_len-3+1, 1]
        x = self.padding2(x)    # 底部填充,[batch_size, 250, seq_len-3+1+1, 1]
        px = self.max_pool(x)   # 最大池化,[batch_size, 250, (seq_len-3+1+1)//2, 1]
        
        x = self.padding1(px)   # 顶部和底部填充,[batch_size, 250, (seq_len-3+1+1)//2+2, 1]
        x = F.relu(x)           # ReLU激活函数,形状不变[batch_size, 250, (seq_len-3+1+1)//2+2, 1]
        x = self.conv(x)        # 卷积,[batch_size, 250, (seq_len-3+1+1)//2, 1]
        
        x = self.padding1(x)    # 顶部和底部填充,[batch_size, 250, (seq_len-3+1+1)//2+2, 1]
        x = F.relu(x)           # ReLU激活函数,形状不变[batch_size, 250, (seq_len-3+1+1)//2+2, 1]
        x = self.conv(x)        # 卷积,[batch_size, 250, (seq_len-3+1+1)//2, 1]
        x = x + px              # 残差连接,将上一步的输出张量与最大池化操作的结果相加,形状不变[batch_size, 250, (seq_len-3+1+1)//2, 1]
        return x    # 输出形状[batch_size, 250, (seq_len-3+1+1)//2, 1]


目录
相关文章
|
1月前
|
机器学习/深度学习 自然语言处理 PyTorch
PyTorch与Hugging Face Transformers:快速构建先进的NLP模型
【8月更文第27天】随着自然语言处理(NLP)技术的快速发展,深度学习模型已经成为了构建高质量NLP应用程序的关键。PyTorch 作为一种强大的深度学习框架,提供了灵活的 API 和高效的性能,非常适合于构建复杂的 NLP 模型。Hugging Face Transformers 库则是目前最流行的预训练模型库之一,它为 PyTorch 提供了大量的预训练模型和工具,极大地简化了模型训练和部署的过程。
67 2
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
【深度学习】探讨最新的深度学习算法、模型创新以及在图像识别、自然语言处理等领域的应用进展
深度学习作为人工智能领域的重要分支,近年来在算法、模型以及应用领域都取得了显著的进展。以下将探讨最新的深度学习算法与模型创新,以及它们在图像识别、自然语言处理(NLP)等领域的应用进展。
87 6
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
【自然语言处理】自然语言处理NLP概述及应用
自然语言处理(Natural Language Processing,简称NLP)是一门集计算机科学、人工智能以及语言学于一体的交叉学科,致力于让计算机能够理解、解析、生成和处理人类的自然语言。它是人工智能领域的一个关键分支,旨在缩小人与机器之间的交流障碍,使得机器能够更有效地识别并响应人类的自然语言指令或内容。
32 4
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
【自然语言处理】GPT-5技术突破预测:引领自然语言处理革新的里程碑
随着科技的飞速发展,人工智能(AI)领域正迎来一场前所未有的革命。近日,OpenAI首席技术官米拉·穆拉蒂在采访中透露,新一代大语言模型GPT-5将在一年半后发布,这一消息无疑在科技界掀起了巨大的波澜。GPT-5的即将登场,预示着AI技术将迈入一个新的时代,我们的工作和日常生活也将随之发生深刻的变化。 GPT-5的发布,将为我们带来前所未有的智能体验。穆拉蒂将其与高中生到博士生的成长相比,可见其在智能水平上的巨大飞跃。GPT-5将具备更高的智能水平,能够处理更为复杂、精细的任务,如高级数据分析、自动化编程、智能内容生成等。这将极大地提高各行各业的工作效率,推动社会生产力的快速发展。
42 4
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
【人工智能】自然语言处理(NLP)的突破,关注NLP在机器翻译、情感分析、聊天机器人等方面的最新研究成果和应用案例。
自然语言处理(NLP)作为人工智能的一个重要分支,近年来取得了显著的突破,特别在机器翻译、情感分析、聊天机器人等领域取得了显著的研究成果和广泛的应用。以下是对这些领域最新研究成果和应用案例的概述,并附带相应的代码实例。
58 1
|
1月前
|
机器学习/深度学习 自然语言处理 数据处理
|
1月前
|
机器学习/深度学习 自然语言处理 并行计算
|
1月前
|
机器学习/深度学习 自然语言处理 搜索推荐
自然语言处理 Paddle NLP - 预训练模型产业实践课-理论
自然语言处理 Paddle NLP - 预训练模型产业实践课-理论
26 0
|
1月前
|
机器学习/深度学习 自然语言处理 区块链
自然语言处理 Paddle NLP - 开放域对话系统-理论
自然语言处理 Paddle NLP - 开放域对话系统-理论
13 0
|
1月前
|
机器学习/深度学习 自然语言处理
自然语言处理 Paddle NLP - 任务式对话系统-理论
自然语言处理 Paddle NLP - 任务式对话系统-理论
41 0

热门文章

最新文章