史上最小白之TextCNN 中文文本分类实战

虽然现在已经有了异常强大的bert,效果也是非常好,但是bert啊,实在是太消耗计算资源了,本穷小子又买不起GPU服务器,只能使用colab进行学习,经常出现内存不够地情况,所以如果你也跟我一样没有比较好的GPU服务器,那么在做分类任务时,可以尝试选择TextCNN,而且目前在文本分类任务上TextCNN也取得了不错的效果。

上一篇文章:史上最小白之CNN 以及 TextCNN详解已经介绍了TextCNN的原理,这里就不再赘述了,不太明白地可以先去复习一下

为了一步一步的详细直观的解释TextCNN中文文本分类流程,以下代码均是在colab中一步一步运行,封装后的源码可以在我的github里下载:https://github.com/Stink1995/TextCNN/tree/master/TextCNN_Chinese

废话不多说,开始实战,奥利给!!!

1.数据源

1.1下载数据源

采用了清华NLP组提供的THUCNews新闻文本分类数据集的子集

数据下载链接:

THUCNews数据子集:https://pan.baidu.com/s/1NheROpFnwVJdd8GZoYfTzA 密码:i416

1.2 数据源分析

读取数据:

import pandas as pd
train_data = pd.read_csv('./drive/My Drive/TextCNN/cnews/train.tsv',sep='\t',names=['label','content'])
test_data = pd.read_csv('./drive/My Drive/TextCNN/cnews/test.tsv',sep='\t',names=['label','content'])
dev_data = pd.read_csv('./drive/My Drive/TextCNN/cnews/dev.tsv',sep='\t',names=['label','content'])

查看源数据有多少条数据、是否存在缺失值、是否存在数据分布不平衡现象

train_data.head()

train_data.info

(img-Wjl9tU3h-1583527921349)(/Users/liyehong/Library/Application Support/typora-user-images/image-20200227052203044.png)]

可以看到总共有50000条中文数据,不存在空值

from collections import Counter
Counter(list(train_data.label))

在这里插入图片描述

发现每种类别的数据都是5000条,并不存在数据分布不均衡的现象。简单查看了一下数据源的情况后,接下来就可以进行数据预处理了。

1.3 数据源预处理

首先获取停用词

stopwords_path = './drive/My Drive/TextCNN/cnews/哈工大停用词表.txt'
stopwords = open(stopwords_path).read().split('\n')

然后建立分词函数,分词采用jieba分词。

import jieba 
def cut(sentence):
  return [token for token in jieba.lcut(sentence) if token not in stopwords]

之后就是建立词表,什么是词表?

词表就是包含数据集中的文本经过分词和去除停用词之后的所有词语的一张表,为了构建数据集中所有词语的词向量矩阵而准备。

建立两个字典,一个是{word:index},一个是{index:word},目的是为了能够把word和词向量矩阵对应起来。可以自己写,推荐使用Torchtext包,接下来介绍一下Torchtext的基本用法,更多详细的内容可以查看Torchtext的官方文档。

import torchtext
import torch
#声明一个Field对象,对象里面填的就是需要对文本进行哪些操作,比如这里lower=True英文大写转小写,tokenize=cut对于文本分词采用之前定义好的cut函数,sequence=True表示输入的是一个sequence类型的数据,还有其他更多操作可以参考文档
TEXT = torchtext.data.Field(sequential=True,lower=True,tokenize=cut)
#声明一个标签的LabelField对象,sequential=False表示标签不是sequence,dtype=torch.int64标签转化成整形
LABEL = torchtext.data.LabelField(sequential=False, dtype=torch.int64)
#这里主要是告诉torchtext需要处理哪些数据,这些数据存放在哪里,TabularDataset是一个处理scv/tsv的常用类
train_dataset,dev_dataset,test_dataset = torchtext.data.TabularDataset.splits(
      path='./drive/My Drive/TextCNN/cnews',  #文件存放路径
      format='tsv',   #文件格式
      skip_header=False,  #是否跳过表头,我这里数据集中没有表头,所以不跳过
      train=
ResNet(残差网络)是一种深度学习模型,重要的特点是通过引入残差跳跃连接来解决训练深层神经网络时的梯度消失和表达能力不足的问题。这种网络结构的代码实现被称为ResNet代码。 ResNet代码注释为代码添加了人类可读的解释,帮助阅读者理解代码的功能和实现细节。ResNet代码注释通常会包括以下信息: 1. 模型结构:注释会说明网络的层次结构、层之间的连接方式以及每个层的功能。例如,每个卷积层、池化层和全连接层的目的和参数设置等。 2. 数据预处理:注释会说明对输入数据的预处理步骤。例如,是否对图像进行归一化、裁剪或旋转等预处理操作,并解释其目的。 3. 训练过程:注释会说明模型的训练过程,包括使用的优化器、学习率的调整策略以及损失函数的定义等。 4. 残差连接:注释会详细说明如何实现残差连接,包括哪些层之间加入了跳跃连接、如何计算残差等。 5. 参数设置:注释会解释模型中的各种参数的设置,例如卷积核大小、池化窗口大小、批量归一化的momentum值等。 通过这些注释,即使是对深度学习和ResNet不太熟悉的开发者也能够理解ResNet代码的实现细节和逻辑。注释还有助于提高代码的可读性和可维护性,便于后续修改和扩展。总的来说,ResNet代码注释是为了让人们更好地理解和使用这种强大的深度学习模型。
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值