Python 如何使用 Bert 进行中文情感分析

news2024/11/29 16:31:37

前言

在自然语言处理(NLP)领域,情感分析是一个非常常见且重要的应用。情感分析通常用于识别文本中的情感,例如判断一条微博或评论是正面、负面还是中性。在过去的几年中,随着深度学习的发展,BERT(Bidirectional Encoder Representations from Transformers)模型迅速成为了处理自然语言的强大工具。BERT 是一种基于 Transformer 架构的预训练模型,它能够捕捉文本的上下文信息,并在许多 NLP 任务中达到了顶尖的表现。

本文将带领新手使用 BERT 模型进行中文情感分析,并会详细讲解如何加载开源数据集、训练模型、评估准确度,并最终导出模型供未来使用。

在这里插入图片描述

什么是 BERT?

BERT 是谷歌于 2018 年提出的一种预训练语言模型,它在大量文本数据上进行了预训练,可以被广泛应用于各类自然语言处理任务,例如文本分类、问答、翻译等。BERT 通过双向 Transformer 来建模,这意味着它能够同时从左到右和从右到左理解句子的语义,因此可以捕捉到更丰富的上下文信息。

BERT 的最大特点之一是它是一种预训练模型,可以在广泛的通用语料上预先进行训练。然后,对于具体的任务(如情感分析),可以对 BERT 进行微调(fine-tuning),从而更好地适应该任务。

中文情感分析任务简介

情感分析(Sentiment Analysis),也称作意见挖掘,是对一段文本的主观性进行分析,旨在判断文本的情感倾向。对于中文情感分析,我们的目标是根据输入的中文文本判断其情感类别,比如“正面”、“负面”或“中性”。

步骤概览

  1. 准备环境:安装所需的库,如 PyTorch 和 Transformers。
  2. 加载中文 BERT 预训练模型:使用 Huggingface 提供的 BERT 中文预训练模型。
  3. 加载中文情感分析数据集:使用开源数据集,如 ChnSentiCorp。
  4. 数据预处理:对文本进行分词和编码。
  5. 训练模型:使用预训练的 BERT 模型进行微调。
  6. 评估模型性能:评估模型在测试集上的准确度。
  7. 导出模型:保存训练好的模型,便于以后使用。

步骤 1:准备环境

首先,我们需要安装一些必要的库。本文使用 PyTorch 和 Huggingface 的 transformers 库来实现 BERT 模型。

打开终端或命令行,运行以下命令来安装这些库:

pip install torch transformers datasets
  • torch 是 PyTorch 的核心库,用于构建和训练神经网络。
  • transformers 是 Huggingface 提供的 NLP 库,包含了许多预训练的语言模型,包括 BERT。
  • datasets 是 Huggingface 提供的数据集工具,可以方便地加载各类数据集。

步骤 2:加载中文 BERT 预训练模型

Huggingface 提供了许多预训练的中文 BERT 模型。我们将使用 bert-base-chinese,它已经在大量中文语料上预训练好,适合进一步微调。

首先,导入需要的模块并加载模型和分词器:

from transformers import BertTokenizer, BertForSequenceClassification

# 加载 BERT 中文预训练模型和分词器
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
model = BertForSequenceClassification.from_pretrained('bert-base-chinese', num_labels=2)

这里我们使用了 BertForSequenceClassification,它是在 BERT 基础上添加了一个分类层,用于处理分类任务。num_labels=2 表示我们有两个情感标签(正面和负面)。

步骤 3:加载中文情感分析数据集

对于中文情感分析任务,常用的开源数据集之一是 ChnSentiCorp。该数据集包含了大量的中文评论,并标注了每条评论的情感类别(正面或负面)。

我们可以通过 Huggingface 的 datasets 库直接加载这个数据集:

from datasets import load_dataset

# 加载 ChnSentiCorp 数据集
dataset = load_dataset('chnsenticorp')

加载的数据集包含了三个部分:trainvalidationtest,分别用于训练、验证和测试。

你可以查看数据集的样例:

print(dataset['train'][0])

输出结果类似如下:

{
  'text': '酒店的环境不错,服务也很好,值得推荐!',
  'label': 1
}

text 表示评论内容,label 表示情感标签,1 表示正面情感,0 表示负面情感。

步骤 4:数据预处理

在将数据输入模型之前,我们需要对文本进行分词和编码。BERT 模型使用特定的分词器将句子分成词块,并将其转换为模型可以理解的数字编码。

def tokenize_function(examples):
    return tokenizer(examples['text'], padding='max_length', truncation=True)

# 对数据集进行分词和编码
encoded_dataset = dataset.map(tokenize_function, batched=True)

padding='max_length' 表示所有句子都将被填充到相同的最大长度,truncation=True 表示超出最大长度的句子将被截断。

步骤 5:训练模型

现在我们已经准备好训练数据,可以开始微调 BERT 模型。首先,我们定义训练参数,并使用 Trainer 进行训练。

from transformers import Trainer, TrainingArguments

training_args = TrainingArguments(
    output_dir='./results',
    num_train_epochs=3,
    per_device_train_batch_size=16,
    per_device_eval_batch_size=16,
    evaluation_strategy="epoch",
    logging_dir='./logs',
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=encoded_dataset['train'],
    eval_dataset=encoded_dataset['validation'],
)

# 开始训练
trainer.train()

这里的 num_train_epochs=3 表示我们将训练 3 个轮次,每个设备的批次大小为 16。

步骤 6:评估模型性能

训练完成后,我们可以使用测试集来评估模型的准确度:

# 在测试集上评估模型
results = trainer.evaluate(eval_dataset=encoded_dataset['test'])
print(results)

输出的结果会包含模型在测试集上的准确度、损失等指标。

假设模型的准确度在测试集上达到了 85%,那么我们可以认为这个模型已经可以很好地识别中文文本中的情感。

步骤 7:导出模型

训练完成后,我们可以将模型保存下来,以便以后使用或部署到生产环境中:

# 保存模型和分词器
model.save_pretrained('./sentiment_model')
tokenizer.save_pretrained('./sentiment_model')

将模型保存到本地后,你可以在未来通过以下代码加载模型并进行推理:

from transformers import pipeline

# 加载训练好的模型和分词器
classifier = pipeline('sentiment-analysis', model='./sentiment_model', tokenizer='./sentiment_model')

# 进行情感预测
result = classifier("这个产品真不错!")
print(result)

输出结果可能类似于:

[{'label': 'POSITIVE', 'score': 0.98}]

这表明模型预测这条评论为正面情感,置信度为 98%。


总结

本文带领大家从头开始使用 BERT 进行中文情感分析,介绍了如何加载预训练的 BERT 模型、处理开源数据集、训练模型、评估模型性能,并最终导出模型。通过这篇文章,您应该对使用 BERT 进行情感分析有了初步的了解,并能够实现一个简单的情感分析系统。

关键点总结:

  • BERT 是目前非常强大的预训练语言模型,可以通过微调用于各类自然语言处理任务。
  • 情感分析 是 NLP 领域的一个经典应用,BERT 能很好地胜任这一任务。
  • 开源工具(如 Huggingface 提供的 transformersdatasets 库)使得训练和使用 BERT 变得简单快捷。

未来可以尝试使用更多的情感类别、更大的数据集,甚至结合领域特定的数据进行训练,从而进一步提升模型的性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2206121.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL表的基本操作和数据类型

MySQL表的基本操作和数据类型 表的操作创建表修改表删除表 数据类型数值类型整型浮点型 文本、二进制类型日期时间类型ENUM类型和SET类型 表的操作 创建表 语法: CREATE TABLE table_name(field1 datatype,field2 datatype,field3 datatype )character set 字符集…

Python的matplotlib可视化工具基本操作(数据分析生成图表)

一、安装导入 1、使用包管理器安装matplotlib pip3 install matplotlib 2、导入plt工具 import matplotlib.pyplot as plt 二、基本函数 1、创建图表 使用pyplot工具打点调用创建图表函数 例如创建直方图: import matplotlib.pyplot as plt import pandas…

【unity框架开发9】序列化字典,场景,vector,color,Quaternion

文章目录 前言一、可序列化字典类普通字典简单的使用可序列化字典简单的使用 二、序列化场景三、序列化vector四、序列化color五、序列化旋转Quaternion完结 前言 自定义序列化的主要原因: 可读性:使数据结构更清晰,便于理解和维护。优化 I…

Android Framework默认授予app通知使用权限

安卓通知使用权限 在安卓系统中,应用程序需要获取通知使用权限才能向用户发送通知。以下是关于安卓通知使用权限的一些信息: 权限获取方式 当用户安装应用时,系统可能会在安装过程中提示用户授予应用通知权限。用户可以选择允许或拒绝。 应…

记录一些yolo-world训练数据集的报错

参考的这个文章 https://blog.csdn.net/ITdaka/article/details/138863017?spm1001.2014.3001.5501 openai快捷下载:https://download.csdn.net/download/qq_43767886/89876720 然后我打算训练coco数据集,遇到了以下的问题 问题一 原因:…

智慧农田新篇章:高标准农田灌区信息化的创新实践

在新时代的农业发展蓝图中,智慧农田已成为推动农业现代化、实现可持续发展目标的关键一环。高标准农田灌区信息化作为智慧农业的重要组成部分,正引领着一场深刻的农业技术革命,它不仅关乎粮食安全与资源高效利用,还深刻影响着农村…

writehelpAI论文写作,专业毕业论文救星

撰写专业毕业论文是每位学生学术旅程中的一个重要里程碑,它不仅检验了你对专业知识的掌握程度,还考验着研究能力、批判性思维以及书面表达技巧。在这个过程中,writehelpAI这样的智能写作助手可以成为你的得力伙伴,帮助解决从选题到…

功率检测和语音功能

INA226 INA226 High-Side or Low-Side Measurement, Bi-Directional Current and Power Monitor with I2C Compatible Interface datasheet (Rev. A) INA226功率监测模块原理 7.5 编程 INA226 器件的一个重要方面是它不一定测量电流或功率。该器件可测量施加在 IN 和 IN- 输入…

数据结构重点学习笔记教程——入门必看 数据结构心得

数据结构教程知识点 章节目录 一、数据结构概述二、线性表三、栈与队列四、数组与字符串五、树与二叉树六、图七、排序算法八、查找算法九、哈希表与散列法十、高级数据结构 总结简介 本数据结构教程知识点涵盖了从数据结构概述到高级数据结构的全方位内容,旨在帮…

河南省学籍管理员在校拍照采集学生证件照流程介绍

校园证件照采集是校园管理中一个重要的环节,它涉及为学生、教职工等校园成员拍摄并处理符合特定要求的证件照片。以下是针对河南省中小学生学籍照片集中拍摄采集的步骤指南,用于指导学籍管理员开展相关工作。 一、学籍照片采集的前期准备 (1…

Java读取Excel文件_详细可执行_低内存占用

EasyExcel介绍:高效内存友好Java Excel处理工具,轻松应对大文件 EasyExcel是一个基于Java的、快速且简洁的Excel处理工具,专为解决大文件内存溢出问题设计。与传统的Excel处理框架如Apache POI和jxl相比,它显著降低了内存消耗。例…

linuxC高级_day5(完结)

目录 指针函数 1.概念 2.定义格式 3.函数内开辟空间 函数指针 1.概念 2.定义格式 2.1 格式 3.函数指针数组 3.1 概念 3.2 格式 3.3 赋值 条件编译 1.根据宏是否定义 根据宏值 3.防止头文件重复包含 指针函数 1.概念 本质是函数,函数返回值是指针。类…

C++系统教程004-数据类型(03)

一 .变量 变量是指在程序运行期间其值可以发生改变的量。每个变量都必须有一个名称作为唯一的标识,且具有一个特定的数据类型。变量使用之前,一定要先进行声明或定义。 1.变量的声明和定义 C中,变量声明是指为变量提供一个名称&#xff0c…

鸢尾花书实践和知识记录[6-23数据聚类]

文章目录 思维导图数据聚类和引例基于图论的聚类算法算法流程1构造数据构造距离矩阵相似度相似度矩阵创建图 拉普拉斯矩阵标准拉普拉斯矩阵(Combinatorial Laplacian)归一化拉普拉斯矩阵 (Normalized Laplacian)无标度拉普拉斯矩阵 (Signless Laplacian)归一化对称拉普拉斯矩阵…

这么好看的桌面时钟 怎么能不分享给大家

最近小编发现了非常好用的桌面时钟。桌面时钟顾名思义就是可以放在桌面上的时钟,这是一款界面优美,功能实用,易于操作的桌面时钟工具芝麻时钟(下载地址:https://clock.zhimasoft.cn/)。 1、首先来看下这些时钟的效果,…

Ping32企业加密软件:保护数据安全

在数字化时代,数据安全已成为每个企业不可忽视的重要课题。无论是客户信息、财务报表,还是商业机密,数据的安全性直接关系到企业的声誉与运营。为了应对不断变化的安全威胁,选择一款可靠的企业加密软件尤为重要。在这里&#xff0…

MFC的.rc 和.rc2文件【常见问题】

目录 一、介绍 .rc 文件 .rc2 文件 使用上的建议 二、实例 工程截图 rc文件 rc2文件 注意: 三、使用 能否删除? 一、介绍 在MFC项目中,.rc和.rc2文件都是资源脚本文件,但它们有不同的用途和管理方式。它们两指向的是同…

VS2022使用技巧

目录 如何打开资源管理器如何打开监视窗口 如何打开资源管理器 如何打开监视窗口 前提:必须先按f10 开始调试起来了

Typora+PicGo实现自动上传图片至图床

文章目录 前言图床选择图床去不图床 配置PicGo安装Typora对象存储七牛云又拍云 前言 使用过Typora的小伙伴应该已经发现,若是想分享给别人看不但需要发送md文件,还需要把对应的图片一起发给对方,否则图片无法显示。 但是每次都要打个压缩包发…

USIM 卡的鉴权原理

USIM 卡的一个重要功能是用来做鉴权。鉴权是移动通信中非常重要的概念,具体的实现需要很复杂的算法。 鉴权:就是鉴定你是否拥有访问网络的权利。用户在开卡后,手机的 USIM 卡里和运营商的核心网中都将存储一个密钥,或者说一个密码…