最近学习了基于Pytorch框架下的MLP、CNN、RNN网络模型,利用在GitHub上获取的商品评论数据进行文本分类实验。本文介绍了如何在Pytorch框架下建立MLP对数据进行二分类,数据集大致如下:
1、导入模块
import pandas as pd
import numpy as np
import jieba
import keras
import re
import spacy
from keras.preprocessing.text import Tokenizer
import gensim
from gensim import models
from torch.nn.utils.rnn import pad_sequence
import torch
2、导入数据
data = pd.read_csv('./data.tsv',sep='\t',index_col=0).astype(str)
data.head()
3、文本数据预处理
3.1 数据清洗
首先需要对数据集进行常规的清洗处理,在实际电商平台中,有时会存在用户购买后没有评论,也会存在商家为了“刷单”自动对产品发布好评,所以需要分别对该文本数据进行缺失值检查、重复值检查并进行删除,减少对研究目的不必要的影响。同时,因为过短评论的研究价值不大,所以筛选掉了评论文本小于等于5的数据,上述清洗过程统一自定义打包成clean函数如下:
def clean(data):
#去除缺失值
Nan = data.dropna()
print("去除缺失值后:",Nan.shape)
#去除重复值
dup = Nan.drop_duplicates()
print("去除重复值后:",dup.shape)
#筛选评论文本数大于5的评论
clean_data = dup[dup['text'].str.len() > 5]
print("筛选掉评论文本数大于5的评论后:",clean_data.shape)
clean_data.reset_index(inplace=True)
return clean_data
运行后发现该数据不存在缺失值,但存在10条重复值,删除小于等于5的文本数据后剩余9702条评论。
3.2 分词并去除停用词
首先,需要排除文本中的数字、字母等不是中文字符的文本,利用re模块定义find_chinese函数如下:
#排除数字、字母等不是中文字符的数据
def find_chinese(file):
pattern = re.compile(r'[^\u4e00-\u9fa5]')
chinese = re.sub(pattern, '', file)
return chinese
for number in range(len(newdata)):
newdata[number]=find_chinese(newdata[number])
然后利用jieba模块对文本进行分词并把结果存入列表中,传入存有中文停用词数据的xlsx文件,用if判断语句来去除停用词(比spacy快多了…),这两步可以包装成函数如下:
#去除停用词
def del_stop(texts