从零开始构建nlp情感分析模型!

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: 本教程介绍了如何使用PyTorch和Hugging Face的Transformers库构建一个情感分析模型。主要内容包括导入所需库、读取训练数据集、加载预训练的BERT模型和分词器、定义情感数据集类、划分训练集和验证集、创建数据加载器、设置训练参数、训练模型、评估模型性能以及定义和测试预测函数。通过这些步骤,可以实现一个简单而有效的情感分析模型。

[TOC]

构建第一个情感分析模型

导入所需库

import torch
from transformers import BertTokenizer, BertForSequenceClassification, AdamW
from torch.utils.data import DataLoader, Dataset, random_split
import pandas as pd
from tqdm import tqdm
import random

CopyInsert

  • torch:PyTorch库,用于构建和训练深度学习模型。
  • transformers:Hugging Face的Transformers库,提供预训练的模型和分词器。
  • DataLoader,Dataset:用于处理数据集和生成批量数据的工具。
  • pandas:用于数据处理和分析的库。
  • tqdm:用于显示循环进度的库。
  • random:用于生成随机数和打乱数据。

读取训练数据集

df = pd.read_csv("weibo_senti_100k.csv")

CopyInsert

  • 通过pandas读取CSV文件中的情感数据集。

加载预训练的BERT模型和分词器

tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
model = BertForSequenceClassification.from_pretrained('bert-base-chinese')

CopyInsert

  • 加载中文BERT分词器和模型,用于序列分类任务(情感分类)。

设置随机种子并打乱数据

random.seed(42)
df = df.sample(frac=1).reset_index(drop=True)

CopyInsert

  • 设置随机种子以确保结果的可重复性。
  • 随机打乱数据集中的行顺序,有助于提高模型训练的泛化能力。

定义情感数据集类

class SentimentDataset(Dataset):
    def __init__(self, dataframe, tokenizer, max_length=128):
        self.dataframe = dataframe
        self.tokenizer = tokenizer
        self.max_length = max_length

    def __len__(self):
        return len(self.dataframe)

    def __getitem__(self, idx):
        text = self.dataframe.iloc[idx]['review']
        label = self.dataframe.iloc[idx]['label']
        encoding = self.tokenizer(text, padding='max_length', truncation=True, max_length=self.max_length, return_tensors='pt')
        return {
   
            'input_ids': encoding['input_ids'].flatten(),
            'attention_mask': encoding['attention_mask'].flatten(),
            'labels': torch.tensor(label, dtype=torch.long)
        }

CopyInsert

  • 定义了一个SentimentDataset类,继承自Dataset,用于处理和返回单个数据样本及其标签。
  • __getitem__方法负责对单个文本进行分词处理。

创建数据集对象

dataset = SentimentDataset(df[:1500], tokenizer)

CopyInsert

  • 创建SentimentDataset实例,使用前1500个样本作为数据集。

划分训练集和验证集

train_size = int(0.8 * len(dataset))
val_size = len(dataset) - train_size
train_dataset, val_dataset = random_split(dataset, [train_size, val_size])

CopyInsert

  • 将数据集划分为80%的训练集和20%的验证集。

创建数据加载器

train_loader = DataLoader(train_dataset, batch_size=8, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=8, shuffle=False)

CopyInsert

  • 使用DataLoader为训练集和验证集创建批量数据加载器。

设置训练参数

optimizer = AdamW(model.parameters(), lr=5e-5)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)

CopyInsert

  • 使用AdamW优化器,并设置学习率。
  • 检测可用的设备(GPU或CPU),并将模型移动到相应设备上。

训练模型

model.train()
for epoch in range(3):
    for batch in tqdm(train_loader, desc="Epoch {}".format(epoch + 1)):
        ...
        optimizer.step()

CopyInsert

  • 开始训练,进行3个周期(epoch)的训练。
  • 每个批次的数据会被传递给模型,通过前向传播计算损失,然后反向传播优化模型参数。

评估模型

model.eval()
total_eval_accuracy = 0
for batch in tqdm(val_loader, desc="Evaluating"):
    ...
average_eval_accuracy = total_eval_accuracy / len(val_loader)
print("Validation Accuracy:", average_eval_accuracy)

CopyInsert

  • 评估模型在验证集上的表现,计算准确率。

定义预测函数

def predict_sentiment(sentence):
    ...

CopyInsert

  • 定义了一个函数用于预测输入句子的情感,并输出正面情感的概率。

测试一个句子

predict_sentiment("气死我了")

CopyInsert

  • 使用微调后的模型对一句测试语句进行情感预测。
相关文章
|
10天前
|
人工智能 自然语言处理 前端开发
Director:构建视频智能体的 AI 框架,用自然语言执行搜索、编辑、合成和生成等复杂视频任务
Director 是一个构建视频智能体的 AI 框架,用户可以通过自然语言命令执行复杂的视频任务,如搜索、编辑、合成和生成视频内容。该框架基于 VideoDB 的“视频即数据”基础设施,集成了多个预构建的视频代理和 AI API,支持高度定制化,适用于开发者和创作者。
71 9
Director:构建视频智能体的 AI 框架,用自然语言执行搜索、编辑、合成和生成等复杂视频任务
|
20天前
|
人工智能 自然语言处理
Promptriever:信息检索模型,支持自然语言提示响应用户搜索需求
Promptriever 是一种新型信息检索模型,由约翰斯·霍普金斯大学和 Samaya AI 联合推出。该模型能够接受自然语言提示,并以直观的方式响应用户的搜索需求。通过在 MS MARCO 数据集上的训练,Promptriever 在标准检索任务上表现出色,能够更有效地遵循详细指令,提高查询的鲁棒性和检索性能。
54 6
Promptriever:信息检索模型,支持自然语言提示响应用户搜索需求
|
24天前
|
机器学习/深度学习 人工智能 自然语言处理
探索深度学习与自然语言处理的前沿技术:Transformer模型的深度解析
探索深度学习与自然语言处理的前沿技术:Transformer模型的深度解析
72 0
|
24天前
|
机器学习/深度学习 自然语言处理 语音技术
探索深度学习中的Transformer模型及其在自然语言处理中的应用
探索深度学习中的Transformer模型及其在自然语言处理中的应用
43 0
|
1月前
|
机器学习/深度学习 自然语言处理 算法
自然语言处理中的情感分析技术
自然语言处理中的情感分析技术
|
2月前
|
机器学习/深度学习 自然语言处理 并行计算
探索深度学习中的Transformer模型及其在自然语言处理中的应用
【10月更文挑战第6天】探索深度学习中的Transformer模型及其在自然语言处理中的应用
172 0
|
2月前
|
机器学习/深度学习 自然语言处理 异构计算
【NLP自然语言处理】初识深度学习模型Transformer
【NLP自然语言处理】初识深度学习模型Transformer
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术在自然语言处理中的应用与挑战
【10月更文挑战第3天】本文将探讨AI技术在自然语言处理(NLP)领域的应用及其面临的挑战。我们将分析NLP的基本原理,介绍AI技术如何推动NLP的发展,并讨论当前的挑战和未来的趋势。通过本文,读者将了解AI技术在NLP中的重要性,以及如何利用这些技术解决实际问题。
|
1月前
|
自然语言处理 API C++
阿里通义推出SmartVscode插件,自然语言控制VS Code,轻松开发应用,核心技术开源!
SmartVscode插件深度解析:自然语言控制VS Code的革命性工具及其开源框架App-Controller
|
2月前
|
自然语言处理 算法 Python
自然语言处理(NLP)在文本分析中的应用:从「被动收集」到「主动分析」
【10月更文挑战第9天】自然语言处理(NLP)在文本分析中的应用:从「被动收集」到「主动分析」
55 4
下一篇
DataWorks