文本分类三步走:
一是对数据进行处理
二是模型设计
三是模型训练
四是结果预测
import numpy as np
from tqdm import tqdm #tqdm可以实时输出处理进度
from keras import backend as K #清除GPU内存用
from transformers import AutoTokenizer, TFAutoModel
#导入预训练模型BERT的tokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
#第一步:数据的处理
labels = []
token_list = []
with open("C:/Users/lupo/kg/data/ChnSentiCorp.txt",mode="r",encoding="UTF-8") as emotion_file:
for line in tqdm(emotion_file.readlines()): #读取txt文件
line = line.strip().split(",") #将每行数据以“,”进行分隔
labels.append(int(line[0])) #读取分类label
text = line[1] #获取每行的文本
token = tokenizer.encode(text)
token = token[:80] + [0] * (80 - len(token)) # 以80个字符为长度对句子进行截取
token_list.append(token)
labels = np.array(labels)
token_list = np.array(token_list)
#第二步:模型设计
import tensorflow as tf
#导入训练的bert模型
model = TFAutoModel.from_pretrained("bert-base-chinese")
input_token = tf.keras.Input(shape=(80,),dtype=tf.int32)
#使用bert模型作为特征提取层
#注意model生成的embedding格式
embedding = model(input_token)[0]
embedding = tf.keras.layers.Flatten()(embedding)
output = tf.keras.layers.Dense(2,activation=tf.nn.softmax)(embedding)
model = tf.keras.Model(input_token,output)
model.compile(optimizer=tf.keras.optimizers.Adam(1e-5), loss=tf.keras.losses.sparse_categorical_crossentropy, metrics=['accuracy'])
#第三步:模型训练
# 模型拟合,即训练,需要注意这里的batch_size的设置
model.fit(token_list, labels,batch_size=1,epochs=5)
K.clear_session()
数据集下载提取:
链接:https://pan.baidu.com/s/1FIh2xn1-P8iIbKhwPBg8KA
提取码:1234
不妨试一下