第N6周:中文文本分类-Pytorch实现

  • 本文为365天深度学习训练营 中的学习记录博客
  • 原作者:K同学啊

一、准备工作

  1. 任务说明

本次将使用PyTorch实现中文文本分类。主要代码与N1周基本一致,不同的是本次任务中使用了本地的中文数据,数据示例如下:

第N6周:中文文本分类-Pytorch实现_第1张图片

任务:
●1. 学习如何进行中文本文预处理
●2. 根据文本内容(第1列)预测文本标签(第2列)

进阶任务:
●1.尝试根据第一周的内容独立实现,尽可能的不看本文的代码
●2. 构建更复杂的网络模型,将准确率提升至91%

与上周不同的地方:

●加载的是本地数据
●从英文变为了中文
●文本标签需要进一步预处理

第N6周:中文文本分类-Pytorch实现_第2张图片

  1. 加载数据
import torch
import torch.nn as nn
import torchvision
from torchvision import transforms, datasets
import os,PIL,pathlib,warnings

warnings.filterwarnings("ignore")             #忽略警告信息

# win10系统
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
device

代码输出

device(type='cpu')

运行下面的代码时,发生了pandas与numpy的版本冲突问题,在网上查了不少资料,看pandas的哪个版本与numpy的哪个版本是相对应的。也曾先安装pandas的某个版本,然后再安装numpy,在安装numpy时让其自主选择numpy的版本。或者反过来先安装numpy的某个版本,然后再安装pandas,在安装pandas时让其自主选择numpy的版本。问题还是无法解决,最后是另外建立一个新的虚拟环境,安装numpy、pandas,运行下面的代码就没有再出现pandas与numpy的版本冲突问题了。据此,在原虚拟环境再安装同样版本的pandas与numpy,也同样解决pandas与numpy的版本冲突问题。之所以没有用新的虚拟环境运行代码,是因为其他模块,如torch、torchtext、portalocker、numpy的版本也是要相对应的,我已经在原虚拟环境安装好了这些模块,不想在新的虚拟环境再折腾安装这些模块了。

我的虚拟环境的numpy、pandas版本:

numpy=1.26.4
pandas=2.2.2

第N6周:中文文本分类-Pytorch实现_第3张图片

import pandas as pd

# 加载自定义中文数据
train_data = pd.read_csv('./N6/train.csv', sep='\t', header=None)
train_data.head()

代码输出

0 1
0 还有双鸭山到淮阴的汽车票吗13号的 Travel-Query
1 从这里怎么回家 Travel-Query
2 随便播放一首专辑阁楼里的佛里的歌 Music-Play
3 给看一下墓王之王嘛 FilmTele-Play
4 我想看挑战两把s686打突变团竞的游戏视频 Video-Play
# 构造数据集迭代器
def coustom_data_iter(texts, labels):
    for x, y in zip(texts, labels):
        yield x, y
        
train_iter = coustom_data_iter(train_data[0].values[:], train_data[1].values[:])
train_iter

代码输出


二、数据预处理

  1. 构建词典

需要另外安装jieba分词库

from torchtext.data.utils import get_tokenizer
from torchtext.vocab import build_vocab_from_iterator
import jieba

# 中文分词方法
tokenizer = jieba.lcut

def yield_tokens(data_iter):
    for text,_ in data_iter:
        yield tokenizer(text)

vocab = build_vocab_from_iterator(yield_tokens(train_iter), specials=[""])
vocab.set_default_index(vocab[""]) # 设置默认索引,如果找不到单词,则会选择默认索引

代码输出

Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\Administrator\AppData\Local\Temp\jieba.cache
Loading model cost 0.777 seconds.
Prefix dict has been built successfully.
vocab(['我','想','看','和平','精英','上','战神','必备','技巧','的','游戏','视频'])

代码输出

[2, 10, 13, 973, 1079, 146, 7724, 7574, 7793, 1, 186, 28]
label_name = list(set(train_data[1].values

你可能感兴趣的:(NLP小白入门,分类,pytorch,数据挖掘,机器学习,nlp,语言模型,word2vec)