卷积神经网络实现THUCNews新闻文本分类(Pytorch实现)

本文介绍了使用CNN模型对THUCNews新闻文本进行10分类任务的详细过程,包括数据预处理、构建词典、模型定义、训练与验证,最终在测试集上达到90.39%的高精度。

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

代码结构

整体代码结构如下图所示:
在这里插入图片描述
点击run.py文件,直接运行。可以手动调节参数以及更换模型

1数据集

本文采用的数据集属于清华NLP组提供的THUCNews新闻文本分类数据集的一个子集(原始的数据集大约74万篇文档,训练起来需要花较长的时间)。数据集请自行到THUCTC:一个高效的中文文本分类工具包下载,请遵循数据提供方的开源协议。

下载的数据放入THUCNews/data目录中。本次训练使用了其中的10个分类,每个分类6500条,总共65000条新闻数据。
类别如下:

体育, 财经, 房产, 家居, 教育, 科技, 时尚, 时政, 游戏, 娱乐

数据集划分如下:

  • 训练集:5000*10
  • 验证集:500*10
  • 测试集:1000*10

从原始数据集生成子集的过程请参看helper下的两个脚本。其中copy_data.sh用于从每个分类拷贝6500个文件,cnews_group.py用于将多个文件整合到一个文件中。执行该文件后,得到三个数据文件:

  • train.txt: 训练集(50000条)
  • dev.txt: 验证集(5000条)
  • test.txt: 测试集(10000条)
    测试集示例:
    在这里插入图片描述

2预处理

调用加载数据的函数返回预处理的数据

def build_vocab(file_path, tokenizer, max_size, min_freq):
    vocab_dic = {
   }
    with open(file_path, 'r', encoding='UTF-8') as f:
        for line in tqdm(f):
            lin = line.strip()
            if not lin:
                continue
            content = lin.split('\t')[0]
            for word in tokenizer(content):
                vocab_dic[word] = vocab_dic.get(word, 0) + 1
        vocab_list = sorted([_ for _ in vocab_dic.items() if _[1] >= min_freq], key=lambda x: x[1], reverse=True)[:max_size]
        vocab_dic = {
   word_count[0]: idx for idx, word_count in enumerate(vocab_list)}
        vocab_dic.update({
   UNK: len(vocab_dic), PAD: len(vocab_dic) + 1})
    return vocab_dic
def build_dataset(config, ues_word):
    if ues_word:
        tokenizer = lambda x: x.split(' ')  # 以空格隔开,word-level
    else:
        tokenizer = lambda x: [y for y in x]  # char-level
    if os.path.exists(config.vocab_path):
        vocab = pkl.load(open(config.vocab_path, 'rb'))
    else:
        vocab = build_vocab(config.train_path, tokenizer=tokenizer, max_size=MAX_VOCAB_SIZE, min_freq=1)
        pkl.dump(vocab, open(config.vocab_path
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值