当前位置: 首页 > wzjs >正文

北海网站建设阳泉住房和城乡建设部网站

北海网站建设,阳泉住房和城乡建设部网站,苏州 互联网企业,萝岗门户网站建设基于BERT的文本分类项目的实现 一、项目背景 该文本分类项目主要是情感分析,二分类问题,以下是大致流程及部分代码示例: 二、数据集介绍 2.1 数据集基本信息 数据集自定义类型二分类(正面/负面)样本量训练集 验证…

基于BERT的文本分类项目的实现

一、项目背景

该文本分类项目主要是情感分析,二分类问题,以下是大致流程及部分代码示例:


二、数据集介绍

2.1 数据集基本信息

数据集自定义
类型二分类(正面/负面)
样本量训练集 + 验证集 + 测试集
文本长度平均x字(最大x字)
领域商品评论、影视评论
# 加载数据集
dataset = pd.read_csv('data/train.txt', sep='\t')
print(dataset['train'][0])
# 输出:{'text': '这个手机性价比超高,拍照效果惊艳!', 'label': 1}

2.2 数据分析

2.2.1 句子长度分布
import matplotlib.pyplot as pltdef analyze_length(texts):lengths = [len(t) for t in texts]plt.figure(figsize=(12,5))plt.hist(lengths, bins=30, range=(0,256), color='blue', alpha=0.7)plt.title("文本长度分布", fontsize=14)plt.xlabel("字符数")plt.ylabel("样本量")plt.show()analyze_length(dataset['train']['text'])
2.2.2 标签分布
import pandas as pdpd.Series(dataset['train']['label']).value_counts().plot(kind='pie',autopct='%1.1f%%',title='类别分布(0-负面 1-正面)'
)
plt.show()
2.2.3 类别平衡处理
from torch.utils.data import WeightedRandomSampler# 计算类别权重
labels = dataset['train']['label']
class_weights = 1 / torch.Tensor([len(labels)-sum(labels), sum(labels)])
sampler = WeightedRandomSampler(weights=[class_weights[label] for label in labels],num_samples=len(labels),replacement=True
)

三、数据处理

3.1 BERT分词器

from transformers import BertTokenizertokenizer = BertTokenizer.from_pretrained('bert-base-chinese')def collate_fn(batch):texts = [item['text'] for item in batch]labels = [item['label'] for item in batch]# BERT编码inputs = tokenizer(texts,padding=True,truncation=True,max_length=256,return_tensors='pt')return {'input_ids': inputs['input_ids'],'attention_mask': inputs['attention_mask'],'labels': torch.LongTensor(labels)}

3.2 数据加载器

from torch.utils.data import DataLoadertrain_loader = DataLoader(dataset['train'],batch_size=32,collate_fn=collate_fn,sampler=sampler
)val_loader = DataLoader(dataset['validation'],batch_size=32,collate_fn=collate_fn
)

四、模型构建

4.1 BERT分类模型

import torch.nn as nn
from transformers import BertModelclass BertClassifier(nn.Module):def __init__(self):super().__init__()self.bert = BertModel.from_pretrained('bert-base-chinese')self.dropout = nn.Dropout(0.1)self.fc = nn.Linear(768, 2)def forward(self, input_ids, attention_mask):outputs = self.bert(input_ids, attention_mask)pooled = self.dropout(outputs.pooler_output)return self.fc(pooled)

4.2 模型配置

import torchdevice = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = BertClassifier().to(device)
optimizer = torch.optim.AdamW(model.parameters(), lr=2e-5)
criterion = nn.CrossEntropyLoss()

五、模型训练与验证

5.1 训练流程

from tqdm import tqdmdef train_epoch(model, loader):model.train()total_loss = 0for batch in tqdm(loader):optimizer.zero_grad()input_ids = batch['input_ids'].to(device)attention_mask = batch['attention_mask'].to(device)labels = batch['labels'].to(device)outputs = model(input_ids, attention_mask)loss = criterion(outputs, labels)loss.backward()optimizer.step()total_loss += loss.item()return total_loss / len(loader)

5.2 验证流程

def evaluate(model, loader):model.eval()correct = 0total = 0with torch.no_grad():for batch in loader:input_ids = batch['input_ids'].to(device)attention_mask = batch['attention_mask'].to(device)labels = batch['labels'].to(device)outputs = model(input_ids, attention_mask)preds = torch.argmax(outputs, dim=1)correct += (preds == labels).sum().item()total += len(labels)return correct / total

六、实验结果

6.1 评估指标

Epoch训练Loss验证准确率测试准确率
# 绘制混淆矩阵
from sklearn.metrics import confusion_matrix
import seaborn as snsdef plot_confusion_matrix(loader):y_true = []y_pred = []model.eval()with torch.no_grad():for batch in loader:input_ids = batch['input_ids'].to(device)attention_mask = batch['attention_mask'].to(device)labels = batch['labels'].to(device)outputs = model(input_ids, attention_mask)preds = torch.argmax(outputs, dim=1)y_true.extend(labels.cpu().numpy())y_pred.extend(preds.cpu().numpy())cm = confusion_matrix(y_true, y_pred)sns.heatmap(cm, annot=True, fmt='d', cmap='Blues')plt.title('混淆矩阵')plt.xlabel('预测标签')plt.ylabel('真实标签')plt.show()plot_confusion_matrix(test_loader)

6.2 学习曲线

# 记录训练过程
from torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter()
for epoch in range(3):train_loss = train_epoch(model, train_loader)val_acc = evaluate(model, val_loader)writer.add_scalar('Loss/Train', train_loss, epoch)writer.add_scalar('Accuracy/Validation', val_acc, epoch)

七、流程架构图

原始文本
分词编码
BERT特征提取
全连接分类
损失计算
反向传播
模型评估

http://www.dtcms.com/wzjs/551814.html

相关文章:

  • 公司的英文网站上海市虹口市容建设公司网站
  • 外汇网站建设公司平台企业
  • 免费行情软件app网站大全下载u288免费外贸网站有哪些
  • 徐州企业做网站wap是什么意思歌词
  • 淘宝网站建设的目标什么电子工程网站
  • 长春网站建设厂家旅游网站开发流程
  • 贵阳建设网站谁有学做网站论坛账号
  • 做网站要的图片斗鱼部门网站建设的意义
  • 惠州网站制作案例北京做网站公司推荐
  • 新翼设计网站建设公司谷歌网站开发客户
  • 网站建设平台协议书安徽省住房与城乡建设厅网站
  • 国外推广国内网站房产网站流量排名
  • 网站模版 模板甘肃建投建设有限公司网站
  • 网站建设有哪些效益网站建设与维护视频教程
  • 个人网站建设心得网站信息设计
  • 水务行业国企门户网站建设wordpress空白页面模板
  • 成都市制作企业网站客户管理软件哪家好
  • 电子书网站开发网站源代码怎么生成网页
  • 郑州做网站哪家专业江山网站制作
  • 网站建设包括内容天猫网站建设目的
  • 象山县建设管理局网站推广引流渠道
  • 长春火车站到吉大一院网站导航栏条源码
  • 圣亚科技网站案例网站模板 北京公司
  • 新网企业邮箱江门关键词优化价格
  • 网站建设应该怎么做卖普洱茶做网站
  • dw网站建设教程视频中企动力公司
  • 南宁自助建站软件露营旅游网站策划书
  • 招聘网站哪个平台比较好网站开发类论文题目
  • 源码超市网站源码郑州住建局官网查询
  • 移动端手机网站制作邯郸新闻