【总结】文本分类网络总结
🍊
一、DPCNN
DPNN
:deep pyramid convolutional Neural Networks
原文发表于2017年ACL
论文
DPCNN
:深度金字塔卷积神经网络;
1)摘要
单从网络深度出发,不考虑参数量,运行速度以及训练难度,梯度爆炸等问题;深度更深的网络能取得更好的性能,深度挖掘数据特征;这在图像领域已经证实了,不过在NLP领域,我们的主角不再是CNN而是Attention;随着elmo
、gpt-2
、bert
、xlNet
等出现,说明深度神经网络在自然语言处理领域也是很有必要的;
2)dpcnn
结构
3)dpcnn
特点
1)参考ResNet
思路,采取近路连接(shortcut);避免因深度导致的梯度消失问题;
2)固定CNN特征核数量,确保下采样过程中,特征维度不断减小;构成一个下采样的金字塔(倒置的金字塔);这样能增加提取的特征对原文的覆盖长度,从而提取长距离的文本特征;
4)代码
dpcnn.py
# coding: UTF-8
import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np
# 参数设置
parameters = {
}
parameters['voc_size'] = 30000
parameters['num_class'] = 2
parameters['embedding_dim'] = 300
"""DPCNN"""
class Model(nn.Module):
def __init__(self):
super(Model, self).__init__()
voc_size = parameters['voc_size']
embedding_dim = parameters['embedding_dim']
self.num_filters = 250
num_class = parameters['num_class']
# embedding
self.embedding = nn.Embedding(voc_size, embedding_dim, padding_idx=voc_size - 1)
self.conv_region = nn.Conv2d(1, self.num_filters, (3, embedding_dim), stride=1)
self.conv = nn.Conv2d(self.num_filters, self.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<