BERT模型实战:外卖评论情感分类项目详解
创作时间:
作者:
@小白创作中心
BERT模型实战:外卖评论情感分类项目详解
引用
CSDN
1.
https://m.blog.csdn.net/qq_52482640/article/details/146169296
本文将介绍如何使用BERT模型进行文本情感分类的实战项目。具体来说,我们将使用一个外卖评论数据集,通过BERT模型对评论的情感进行分类。与之前的实战不同,本次实战将对数据处理、模型定义与训练和验证三个过程进行封装,使代码更加简洁,易于维护。
1. 数据处理
如何得到BERT的输入
在进行模型训练之前,我们需要对数据进行预处理。具体来说,我们需要读取数据,将其划分为训练集和验证集,并获得相应数据加载器。
在输入BERT模型之前,一句话需要经过分词器tokenizer的处理,tokenizer会将该句话转化为三个部分:input_ids、mask和seq_ids。每个输入前会加一个cls token,和seq token,不足位则末尾padding补齐。
这三个部分的作用如下:
- input_id:每个字在21128个字的词语表中对应的数值下标是什么,用于生成独热编码,可以让模型能够知道输入的是哪个字。input_id经过linear(21128,768)后变为BERT的词Embeddings。
- Mask:告诉模型输入的这句话有多长。在NLP自然语言处理任务中,模型的输入应该固定,即输入语句的长度一致,当句子过短时padding补上,过长则截断。所以商务大床房,加cls和seq,对应7个1,后面的0表示补齐输入规定长度的padding。1表示有用的,0表示无用的,在模型输出时用每个字的mask值×对应字的输出,得到有效输出。
- seq_ids:句子编码用于表示输入的语句中每个字同属一句话还是两句话。一般只有这两种,用0,1标识,经过linear(2,768)变为segment embeddings。
而位置编码则根据模型规定的每次输入的最大长度(假设为512字)来默认从0开始编序号,即linear(512,768)生成BERT的position embeddings。将这三个embedding相加作为BERT输入。
下游训练
本次实战,因为是下游任务,所以从hugging face网站中下载好预训练完成的bert-base-chinese作为模型。
- 导入读取数据所必要的包,本次的训练集和验证集需要自己进行划分
from torch.utils.data import DataLoader, Dataset
from sklearn.model_selection import train_test_split #给X,Y 和分割比例, 分割出来一个训练集和验证机的X, Y
import torch
- 读取评价文本
def read_file(path):
data = []
label = []
with open(path, "r", encoding="utf-8") as f:
for i, line in enumerate(f):
if i == 0:
continue
# if i > 200 and i< 7500:
# continue
line = line.strip("\n")
line = line.split(",", 1) #把这句话按照逗号分割, 1表示分割次数,即只分割一次
data.append(line[1])
label.append(line[0])
print("读了%d的数据"%len(data))
return data, label
- 数据集类:三个函数与前两个实战类似,但需注意两点。第一,读文件函数得到了数据和标签,在数据集类的初始化函数中可直接赋值存储;第二,读文件函数中label列表里存储的是字符型数据,而通常进行训练验证的标签为整型,需进行转换。
class jdDataset(Dataset):
def __init__(self, data, label):
self.X = data
self.Y = torch.LongTensor([int(i) for i in label])
def __getitem__(self, item):
return self.X[item], self.Y[item]
def __len__(self):
return len(self.Y)
- 获得数据加载器:选择将4/5作为训练集,1/5作为验证集,通过在主函数中调用来创建数据加载器
def get_data_loader(path, batchsize, val_size=0.2):
#读入数据,分割数据,val_size=0.2代表五分之一的数据当作验证
data, label = read_file(path) #调用读文件函数
train_x, val_x, train_y, val_y = train_test_split(data, label, test_size=val_size,shuffle=True, stratify=label)
#stratify=label表示按标签的比例分割数据集
train_set = jdDataset(train_x, train_y)
val_set = jdDataset
热门推荐
北京延庆冰雪季:冬奥场地滑雪、冰灯嘉年华等你来
汪苏泷新专辑《十万伏特》集结业内精英,多元风格获好评
汪苏泷张碧晨《天赐的声音》首秀,演绎《命运》与《年轮》
汪苏泷音乐节目合作频获好评,即将开启「十万伏特」巡演
新歌首唱获第四,汪苏泷在《歌手2024》展现音乐实力
确认受影响!广东未来三天有雨!划重点:新一股冷空气正南下
看!湛江工业“主战场”,巨变40年!
麻婆豆腐入选非遗,川菜文化的新高度
麻婆豆腐家庭版,秒杀外卖!
IBM携手FIT:AI驱动时尚设计,引领行业绿色转型
AI重塑服装设计流程,推动时尚产业绿色发展
中国新生代五大女星:坚韧智慧演绎荧幕传奇
《我们仨》:杨绛先生的亲情回忆录
杨绛与上海:一座城市的文学记忆
《杨绛传》:一位文学大师的百年人生智慧
湘潭出发,贵阳收官:三日自驾游遍湘黔美景
湘潭旅游攻略:韶山故居、盘龙大观园等景点详解
央视秋晚耀沈城,盛京大剧院演绎中外艺术经典
剧单推荐:这五部近期最佳剧集,值得通宵去看
轻卡房车:卡车底盘的房车新选择,四大优缺点全解析
沈阳中街寻觅当地美食:遍地“舶来品”,老字号藏在深巷
陆游唐婉的婆媳大战:从古代到现代的启示
气胸来袭,这些预防方法你知道几个?
新型婆媳关系:家庭和谐的新秘诀
气胸患者营养指南:高蛋白饮食助力康复
网络机顶盒视频播放故障排除指南
电视机顶盒常见故障排查指南
烟酰胺护肤全攻略:不同浓度对应不同功效
烟酰胺凝胶能修护屏障还能美白,使用时需防晒
山海经四大神兽:青龙白虎朱雀玄武的方位密码