python基于预训练大模型权重实现文本向量化开发构建微博评论数据情感极向识别模型

news2024/12/28 18:11:58

因为最近的一些项目涉及到了大模型相关的技术开发研究,在我前面的博文中也已经有一些实践记录学习资料分享的文章了,今天是在做模型训练的时候突然想到一个有意思的想法,按照我之前做文本分类的方法,基本主流的技术路线都是先对文本数据进行清洗分词处理,之后借助于指定的算法开发实现文本向量化处理,最终搭建机器学习模型或者是深度学习模型来实现文本数据的分类处理,这里其实比较重要的一部分就是文本向量化的实现。

下面是一个文本分类的详细实现流程:

  1. 数据准备:首先,需要准备好用于训练和评估的文本数据集。这可以是一个已经标注好类别的数据集,其中每个样本都有一个对应的类别标签。

  2. 数据预处理:对文本数据进行预处理,包括清洗、分词、去除停用词等操作。可以使用常见的Python库如nltk或中文分词工具例如jieba来执行这些步骤。

  3. 特征提取:将文本转换成机器学习算法可以处理的特征表示。常用的方法包括使用词袋模型(Bag-of-Words)、TF-IDF、Word2Vec、BERT等。选择适合任务需求的特征提取方法。

  4. 划分数据集:将数据集划分为训练集和测试集。训练集用于构建分类模型,测试集用于评估模型性能。

  5. 模型选择与训练:选择适合文本分类的模型,例如朴素贝叶斯、支持向量机、深度学习模型如卷积神经网络(CNN)、循环神经网络(RNN)或Transformer-based模型(如BERT)。使用训练集上的数据对模型进行训练。

  6. 模型评估:使用测试集上的数据对训练好的模型进行评估。常用的评估指标包括准确率、精确率、召回率、F1值等。

  7. 调参与优化:根据评估结果,进行模型的调参与优化。可以尝试不同的超参数配置、特征提取方法或模型架构。

  8. 模型应用:使用训练好的模型对新的未标记文本进行分类预测。

以上是一个通用的文本分类实现流程,具体的步骤和代码实现会根据选定的算法和工具库而有所不同。在每个步骤中,根据任务需求和数据特点进行调整,并进行适当的实验和改进来提高模型的性能。

最近受到一些chatGPT类模型的启发,我就想如果不自己开发训练词向量化模型直接使用这些预训练开源的模型权重怎么样,是否是可行的呢?

本文的核心目的就是想要实现验证这一流程,这里选用的是之前制作的微博情感极向数据集,为了简单期间,我这里仅仅是分成了正向情感和负向情感,每个类别的数据集都只选取了1000条的样本数据,因为数据量越多计算时间也越久,这里我主要是以实践为主。

首先来简单看下数据集:
正向情感数据截图如下所示:

 负向情感数据如下所示:

 接下来我们来看基于预训练大模型权重开发实现文本向量化的方法,其实借助于现成的transformer库可以说是非常非常简单化了,如下所示:

from transformers import TFBertTokenizer

tokenizer= TFBertTokenizer.from_pretrained("这里填入你选择的模型即可")

接下来就可以实现文本的向量化了,核心代码实现如下所示:

# 将文本序列转换为模型输入张量
inputs = tokenizer.convert_ids_to_tensors(tokens)

# 获取文本的向量表示
outputs = model(**inputs)
text_vector = outputs.pooler_output

# 打印文本向量
print(text_vector)

接下来只需要自己简单的编写一个循环处理转化的语句即可实现数据集整体批量的转化处理了,这里就不再赘述了。

完成文本的向量化处理之后接下来就是可以搭建模型实现文本数据的分类处理了,这里我选用的是机器学习里面比较有特色的三种模型,分别是:逻辑回归模型、支持向量机模型和随机森林模型。

逻辑回归模型:

逻辑回归(Logistic Regression)是一种用于二分类问题的机器学习算法。尽管名字中带有"回归",但实际上它是一种分类算法。

在逻辑回归中,我们试图建立一个能够根据输入特征预测样本属于某一类别的概率的模型。逻辑回归通过将线性函数的输出映射到一个[0,1]之间的值,并使用一个阈值来判定样本属于哪个类别。

下面是逻辑回归模型的数学表示:

给定一个样本的输入特征向量为 x,逻辑回归模型通过以下公式计算样本属于正类的概率 P(y=1|x):

[ P(y=1|x) = \frac{1}{1 + e^{-z}} ]

其中,z 是一个线性函数:

[ z = b + w_1x_1 + w_2x_2 + \ldots + w_nx_n ]

b 是偏置项(intercept),w 是权重矩阵,x 是输入特征向量。

训练逻辑回归模型主要涉及以下几个步骤:

  1. 数据准备:收集并整理包含特征和对应类别标签的训练数据集。

  2. 特征缩放:对输入特征进行缩放,以确保它们的值范围在合理的区间内,避免梯度下降等优化算法受到不必要的影响。

  3. 参数初始化:初始化模型的权重和偏置项。

  4. 定义损失函数:选择适当的损失函数来衡量模型的预测值与真实标签之间的差异。在逻辑回归中,常用的损失函数是二元交叉熵损失函数。

  5. 优化算法:使用优化算法(如梯度下降)来最小化损失函数,并更新模型的参数。

  6. 模型评估:使用测试集对训练好的模型进行评估,计算分类准确率、精确率、召回率等指标。

逻辑回归模型具有以下优点:

  • 实现简单,计算效率高。
  • 可解释性强,可以理解各个特征对结果的贡献程度。
  • 对于线性可分的数据,逻辑回归能够表现良好。

然而,逻辑回归也有一些限制:

  • 逻辑回归是一个线性分类模型,对于非线性问题表现较差。
  • 对异常值敏感,可能会导致模型的性能下降。
  • 无法处理类别不平衡的数据集。

尽管逻辑回归在某些情况下可能不够灵活,但其简单性和可解释性使其成为许多分类问题的有用工具。

代码实现实现如下所示:

model = LogisticRegression()
model.fit(X_train, y_train)
y_predict = model.predict(X_test)
y_pred = y_predict.tolist()
accuracy = model.score(X_test, y_test)
print("LogisticRegression model accuracy: ", accuracy)
支持向量机模型:

支持向量机(Support Vector Machine,SVM)是一种常用的监督学习算法,用于二分类和多分类问题。它的目标是找到一个超平面,将不同类别的样本尽可能地分开,并最大化样本与超平面之间的间隔。

以下是支持向量机模型的详细解释:

  1. 线性可分情况:在线性可分的情况下,SVM试图找到一个最优的超平面,将两个不同类别的样本分开。这个超平面被定义为具有最大间隔的那个,即离两个类别最近的样本点的距离最大化。

  2. 非线性可分情况:如果数据不是线性可分的,SVM可以通过使用核函数来引入非线性映射,将数据从原始特征空间映射到一个高维特征空间。在高维特征空间中,数据可能变得线性可分。常用的核函数有线性核、多项式核和高斯核等。

  3. 支持向量:在训练过程中,SVM选择了一些样本作为“支持向量”,这些样本位于超平面附近或对分类超平面有较大影响。支持向量决定了超平面的位置和边界。

  4. 优化问题:支持向量机的训练过程可以转化为一个凸优化问题,通过最小化正则化的损失函数来求解。其中损失函数通常是Hinge损失或对率损失。

  5. 软间隔与正则化:在实际应用中,数据很少是完全线性可分的,SVM引入了“软间隔”概念,允许一些样本位于超平面的错误一侧。通过设置惩罚参数C,可以控制分类错误与间隔之间的权衡关系。较大的C值会增强对错误分类的惩罚,可能导致更复杂的模型。

  6. 多类别分类:SVM也可以用于解决多类别分类问题。一种常见的方法是使用一对多(One-vs-Rest)策略,将每个类别与其余类别进行二分类比较。

SVM具有以下优点:

  • 在高维空间中表现良好,适用于处理高维数据。
  • 可以通过核函数处理非线性问题。
  • 泛化能力强,对于少量支持向量的改变不敏感。
  • 通过调整惩罚参数C可以控制模型的复杂度和鲁棒性。

然而,SVM也有一些限制:

  • 当数据集非常大时,训练时间可能很长。
  • 对于多类别分类问题,需要进行额外的处理。
  • 需要选择合适的核函数和调整超参数。

支持向量机是一种强大的算法,在各种任务中被广泛应用。选择适当的核函数和调整参数,可以发挥它的优势并取得良好的分类效果。

核心代码实现如下所示:

model = SVC(
            kernel="linear",
            C=10,
            gamma="auto",
            degree=5,
            tol=0.1,
            decision_function_shape="ovo",
        )
model.fit(X_train, y_train)
y_predict = model.predict(X_test)
y_pred = y_predict.tolist()
accuracy = model.score(X_test, y_test)
print("SVM model accuracy: ", accuracy)
随机森林模型:

随机森林(Random Forest)是一种集成学习方法,用于解决分类和回归问题。它通过组合多个决策树来进行预测,并结合这些决策树的结果来做出最终的预测。

以下是随机森林模型的详细解释:

  1. 决策树:决策树是由节点和边组成的树状结构,用于对数据进行分类和回归。每个节点表示一个特征,每个边代表一个特征值。从根节点开始,根据特征对样本进行划分,直到达到叶节点并得到一个预测结果。

  2. 随机森林的组成:随机森林由多个决策树组成,每个决策树使用不同的训练样本和特征子集进行训练。这种随机性可以增加模型的多样性,并减少过拟合风险。最终的预测结果由所有决策树的投票或平均值决定。

  3. 特征选择:在每个决策树的训练过程中,随机森林会随机选择特征的子集作为候选的划分特征。这种随机选择有助于避免某些特征对整体模型的过度依赖。

  4. 决策树生长:每个决策树通常通过递归地进行二分划分来生长。随机森林可以设置树的最大深度、叶节点最小样本数等参数来控制决策树的复杂度。

  5. 预测和集成:对于分类问题,随机森林采用多数投票的方式得出最终的预测结果;对于回归问题,随机森林将各个决策树的预测结果取平均值作为最终的预测结果。

  6. 优点

    • 随机森林在处理高维数据和大规模数据时表现较好。
    • 它能够处理缺失值和不平衡数据。
    • 对异常值有一定的鲁棒性。
  7. 限制

    • 随机森林可能会在某些噪声较大的数据集上产生过拟合。
    • 训练时间相对较长,特别是当决策树数量较多时。

随机森林是一种强大且广泛使用的机器学习算法,适用于许多分类和回归问题。通过调整参数,如决策树数量和特征子集大小等,可以优化随机森林模型的性能。

核心代码实现如下所示:

model = RandomForestClassifier(n_estimators=200)
model.fit(X_train, y_train)
y_predict = model.predict(X_test)
y_pred = y_predict.tolist()
accuracy = model.score(X_test, y_test)
print("RandomForestClassifier model accuracy: ", accuracy)

我们依次训练开发构建了三种不同的模型,并对模型的性能进行了评估分析,结果详情如下所示:

{
	"svm": {
		"accuracy": 0.856,
		"F_value": 0.8559792610135859,
		"precision": 0.8559587813620072,
		"recall": 0.8560271429485948
	},
	"lr": {
		"accuracy": 0.884,
		"F_value": 0.8839981439703035,
		"precision": 0.8840885816692268,
		"recall": 0.8841623455604635
	},
	"rf": {
		"accuracy": 0.948,
		"F_value": 0.9479966717869943,
		"precision": 0.948715484656288,
		"recall": 0.9483707829204277
	}
}

为了直观进行对比分析可视化,这里绘制对比柱状图,如下所示:

 接下来我们想要更加深入细致的分析不同子类别下模型的性能是否会有显著的差异,这里依次对三款不同的模型依次进行单独子类别的计算测试分析,结果如下所示:

【逻辑回归模型】

 【随机森林模型】

 【支持向量机模型】

 从整体实验结果分析对比来看:随机森林的模型效果最优,另外针对不同子类别数据来说,三款模型呈现出来的整体趋势基本一致,并没有出现很明显的差异化或者是在不同子类别上有明显的差异,还是比较不错的。感兴趣的话都可以试试。

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

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

相关文章

性能提升571%,32K超长上下文,推理速度提升42%,允许商用,国产开源大模型推出了二代 ChatGLM2-6B...

6月份是火热的夏天,各种火热的 AI 产品也在密集的更新,天越热,大家是干得热火朝天,卷出了新高度。 前有现在大火的 ChatGPT,ChatGPT 更新:大杀器!函数调用示范,ChatGPT 3.5/4 双双升…

Java Web JDBC(2)23.6.26

3.6 PreparedStatement PreparedStatement作用: 预编译SQL语句并执行:预防SQL注入问题 3.6.1 代码模拟SQL注入问题 Test public void testLogin() throws Exception {//2. 获取连接:如果连接的是本机mysql并且端口是默认的 3306 可以简化书…

浅谈无线温度监测系统在冶炼厂供配电的应用

安科瑞 华楠 摘要:高压供配电系统运行稳定性与电气元器件连接点温度密切相关,通过与传统测温方法对比,实时在线无线温度监测解决 了密封高压开关柜内部各连接点温度无法检测的难题,满足了供电系统安全稳定运行的要求,降…

redis 主从复制 哨兵 安装部署

学习开始前先了解一下 Redis是一个开源的内存数据结构存储系统,它支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等。Redis最大的特点是数据存储在内存中,因此读写速度非常快,同时也支持数据持久化,可以将数…

吐血整理,接口自动化测试-Config配置文件框架封装(实战)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 configparser的介…

阿里巴巴2023最新版Spring Security王者晋级文档

Spring 是一个非常流行和成功的 Java 应用开发框架。Spring Security 是 Spring 家族中的一个安全管理框架,提供了一套 Web 应用安全性的完整解决方案。在用户认证方面,Spring Security 框架支持主流的认证方式,包括 HTTP 基本认证、HTTP 表单…

输出一个数的十六进制表示

可以使用Integer.toHexString、Long.toHexString得到数值的十六进制表示。 下面的代码示例列出了几种情况: public class Test5 {public static void main(String[] args) {byte b1 0b01101111; System.out.println(Integer.toHexString(b1).toUpperCase());byte…

深度学习的实践层面

目录 1、训练、验证、测试集 2、偏差、方差 3、正则化 4、dropoout正则化 5、其他正则化方法 6、归一化输入 7、梯度消失和梯度爆炸 8、梯度的数值逼近 9、梯度检验 1、训练、验证、测试集 (1)、早期机器学习领域普遍认可的最好的实践方法&…

海兰一体机电脑U盘重装Win10系统教程图解

海兰一体机电脑是全家人都适用的电脑,使用海兰一体机电脑的用户要怎么用U盘来重装Win10系统,首先用户需要确保电脑能够正常联网,然后再准备一个8G以上的U盘,最后根据小编分享的海兰一体机电脑U盘重装Win10系统教程图解操作即可。 …

PR脚本:音乐鼓点自动节拍打点标记动画BeatEdit

BeatEdit可检测音乐中的节拍并在Premiere Pro时间轴中为其生成标记。可以创建与音乐同步的自动编辑,或者让BeatEdit v2.0.006 激活版协助您进行手动编辑过程。BeatEdit mac版使用节拍信息来生成与音乐同步的全自动编辑。如果需要更多控制,拍子标记也可以…

视唱音准不好的人能练好吗,视唱音准不好怎么办

软件版本:Earmaster7.3.6 无论是普通人还是声乐艺术生,音准是唱好歌的必要条件之一,如果音准不好,唱歌自然会跑调。然而并不是所有人天生都有十分出色的音准,如果不进行后天的训练,是很难找到正确的音准的…

web应用封装成app|超级签名

PP封装是形成APP的最省钱的一种方式。你只需要拥有一个网址就可以通过一些技术处理封装成一个跨iOS和Android的APP,这个过程往往只需要几分钟。在移动互联网时代,拥有一个移动端APP是必不可少的。那么APP是怎样封装的呢? 首先让我们先来了解…

基于深度学习的人脸面部表情识别系统【含Python源码+PyqtUI界面+原理详解】

功能演示 摘要:面部表情识别(Facial Expression Recognition)是一种通过技术手段识别人物图像中人脸面部表情的技术。本文详细介绍了其实现的技术原理,同时给出完整的Python实现代码、训练好的深度学习模型,并且通过Py…

Python中的四种条件语句结构和应用举例

Python中的四种条件语句结构和应用举例 条件语句是计算机实现分类高效执行计算的重要方法。在许多计算机语言编写(C语言,Java语言,matlab语言等)的时候,都有涉及条件语句的部分,本文对Python语言中的条件语…

Docker操作镜像与容器常用命令

Docker操作镜像与容器的常用命令 文章目录 Docker操作镜像与容器的常用命令前言1、镜像相关命令1.1 查看镜像1.2 搜索镜像1.3 拉取镜像1.4 删除镜像 2 容器相关命令2.1 查看容器2.2 创建与启动容器2.3 停止与启动容器2.4 文件拷贝2.5 目录挂载2.6 查看容器IP地址2.7 删除容器 总…

金山云联合MiniMax推出MaaS互信推理专区方案 解决大模型与数据互信难题

作为人工智能领域颇具里程碑式的进展,ChatGPT以其惊艳的表现,迅速掀起了行业热潮,使得大模型成为当下最为炙手可热的技术方向之一。但在大模型落地过程中,如何既能保障大模型使用方的数据安全,又能保护大模型提供方的部…

C编译过程 以及 ELF文件(学习笔记)

C编译过程 一个用C语言编写的高级语言程序是从编写到打包、再到编译执行的基本过程,我们知道在CPU上执行的是低级别的机器语言,从高级语言到低级别的机器语言肯定是要经过翻译过程,这个过程大体的过程如下图所示: 在Unix系统中,从…

基于simulink的四节串联锂电池的主动均衡算法(PID控制)

电动汽车往往搭载上百节单体电池作为能量来源,如此多的电池聚在一起其性能差异往往造成电量的不一致。不均衡性会随着电池的充放电循环而不断加剧,致使单体容量快速衰减,最终个别单体的失效就会影响整个电池组乃至用电系统的工作。常见的均衡方式可分为主动均衡和被…

亚马逊云科技“专库专用”模式,可有效提高数据库的性能和效率

近日,全球数据库市场发生了一件令人瞩目的事件,根据Gartner的数据,我们发现亚马逊云科技作为一个纯云厂商,夺得了2022年全球数据库领导者的桂冠,占据全球市场的25.3%份额。 云原生数据库的发展方向:与数据分…

深度剖析PostgreSQL慢SQL:原因与优化方案大揭秘

​ PostgreSQL 是一种成熟稳定的关系型数据库管理系统,它支持高级的数据类型、索引以及查询语言。但是,尽管 PostgreSQL 在性能和可靠性方面表现出色,但偶尔也会出现慢 SQL 的情况。本文将探讨 PostgreSQL 慢 SQL 的原因和优化方案&#xff0…