1、TextCNN模型流程是什么
TextCNN的网络结构比较简单,流程就是将一句话转化为一张二维数据,二维数据的形状类似于图像特征图,图像的特征图的行列为图像的像素值,二维数据的列是个词,行是该词的向量(可以认为是好多个值代表了这个词),二维数据由编码获得。通过卷积的形式对句子进行卷积,提取句子特征,再将特征放入到全连接网络进行预测。
2、数据编码
1、读取数据(txt,csv,xlsx形式)
import pandas as pd
fp = pd.read_excel('data.xlsx')
text = fp.iloc[:,:-1]
label = fp.iloc[:,-1]
3、数据处理(分词->词汇表->编码)
1. 首先对文本进行分词,使用jieba库(为了将文本数据(str)变成训练数据(tensor),分词后才能转)
import jieba
train=[list(jieba.cut(i)) for i in train]
test=[list(jieba.cut(i)) for i in test]
2. 利用分词好的数据集构造词汇表(为了将文本数据(str)变成训练数据(tensor))
dataset=train+test
voc = []
for i in dataset:
voc = voc + list(i)
vocab = list(set(voc))
vocab_size=len(vocab)
3. 利用词汇表将文本数据变为数字数据
#词汇表
word2idx = {w: i for i, w in enumerate(vocab)}
#类别
num_classes = len(set(labels))
#词汇量
vocab_size = len(vocab)
# 文本数据转数据
input, labels=make_data(xx_train,labels,word2idx)
def make_data(sentences, labels,word2idx):
inputs = []
#文本转数据
for sen in sentences:
inputs.append([word2idx[n] for n in sen])
# 清楚重复的数据
# inputs.append(list(set([word2idx[n] for n in sen])))
# 将数据设置成等长数据 不够的数据补0
#使用最长的文本作为矩阵的列数 不够的长的补0
k=[len(i) for i in inputs]
k=max(k)
for i in inputs:
if len(i)<k:
for _ in range(k-len(i)):
i.append(0)
return inputs, labels
4、构造数据
将数据转为可以用于训练的数据
batch_size = 16
inputs = torch.tensor(input)
labels = torch.tensor(labels)
dataset = Data.TensorDataset(inputs, labels)
loader = Data.DataLoader(dataset, batch_size, True)