NLP_情感分类_机器学习(w2v)方案
文章目录
- 项目背景
- 数据清洗
- 导包
- 导入数据
- 切分评论及标签
- Word2Vec
- 构造w2v
- 数据切分
- 模型训练
- 查看结果
- 同类型项目
项目背景
项目的目的,是为了对情感评论数据集进行预测打标。在训练之前,需要对数据进行数据清洗环节,前面已对数据进行清洗,详情可移步至NLP_情感分类_数据清洗
下面对已清洗的数据集,用机器学习方案(w2v)进行处理
数据清洗
导包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from tqdm import tqdm
import pickle
import numpy as np
import gc
#import swifter
from sklearn.neural_network import MLPClassifier
import os
from sklearn.metrics import accuracy_score,f1_score,recall_score,precision_score
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import MultinomialNB
from sklearn.tree import DecisionTreeClassifier
from lightgbm import LGBMClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn import svm
导入数据
df = pd.read_csv('data/sentiment_analysis_clean.csv')
df = df.dropna()
切分评论及标签
X_tfidf = df['text']
y_tfidf = df['label']
Word2Vec
可参考:NLP_词的向量表示Word2Vec 和 Embedding
Word2Vec是一个用于生成词向量(word vectors)的模型,它由谷歌在2013年开发。Word2Vec模型通过神经网络将词语转换为数值向量,这些向量捕捉了词语的语义信息,使得语义上相似的词在向量空间中的距离也相近。
Word2Vec主要有两种训练模型:
-
CBOW(Continuous Bag of Words):这是一个预测单词的工具,给定一个单词前后文的单词,预测当前单词。CBOW模型不考虑单词在句子中的顺序。
-
Skip-Gram:与CBOW相反,Skip-Gram模型给定一个单词,预测它前后文的单词。Skip-Gram通常比CBOW能更好地捕捉词语之间的关系,但是计算量更大。
Word2Vec模型的训练包括以下步骤:
-
初始化:随机初始化词向量和上下文向量。
-
训练:通过大量文本数据训练模型,使用梯度下降等优化算法不断更新词向量,以减少预测单词的误差。
-
优化:通过不断迭代,优化词向量,使得语义相似的词在向量空间中更接近。
训练完成后,Word2Vec可以用于各种自然语言处理任务,如词义消歧、句子相似度计算、机器翻译等。词向量可以作为输入特征,用于训练其他深度学习模型。
Word2Vec的词向量可以捕捉到一些语义规律,例如:
- 国王 - 男人 + 女人 = 女王
- 巴黎 - 法国 + 英国 = 伦敦
这些规律表明Word2Vec能够理解和表达词语之间的相对关系。
Word2Vec模型的优点包括:
- 能够捕捉词语的语义信息。
- 生成的词向量可以用于多种下游任务。
- 模型相对简单,训练效率高。
缺点包括:
- 无法捕捉词语的语法信息。
- 无法处理一词多义的情况。
- 需要大量的文本数据进行训练。
Word2Vec是词嵌入(word embedding)领域的一个重要里程碑,它启发了后续许多其他词嵌入模型的发展,如GloVe(Global Vectors for Word Representation)和FastText。
Word2Vec模型在训练时有多个参数可以设置,以下是一些常见的参数及其意义:
-
vector_size (或
size
):这是生成的词向量的维度。较小的维度可能无法捕捉足够的细节,而较大的维度可能会增加计算成本并且导致过拟合。常见的维度设置有100、200、300等。 -
window (或
windowSize
):上下文窗口的大小,即在当前单词的前后考虑多少个单词。较大的窗口可以捕捉更远的依赖关系,但也可能包含更多噪声。 -
min_count:忽略出现次数低于此值的单词。这可以用来过滤掉一些出现频率非常低的单词,以提高训练效率。
-
negative (或
negativeSize
):在训练中使用负采样的词汇数量。负采样是一种优化技术,用于提高模型的训练效率。 -
iter (或
epochs
):训练数据集的迭代次数。较大的迭代次数可以提高模型的性能,但也需要更多的计算资源。 -
batch_size:每次模型更新时处理的单词数量。较大的批量大小可以提高内存的使用效率,但也可能影响模型的收敛速度。
-
alpha:学习率。较高的学习率可以加快训练速度,但可能导致模型无法收敛。
-
min_alpha:学习率的下限。在训练过程中,学习率会逐渐减小到这个值。
-
sg:训练模式,
0
表示使用CBOW模型,1
表示使用Skip-Gram模型。 -
hs (或
hierarchicalSampling
):如果设置为1
,则使用分层采样。分层采样是一种考虑单词频率的采样方法,对高频词进行下采样,以提高模型对低频词的学习效率。 -
negative_sampling:如果设置为
1
,则使用负采样。负采样是一种优化技术,通过只采样一部分负例来提高训练效率。 -
cbow_mean:当使用CBOW模型时,如果设置为
1
,则对上下文的词向量取平均,而不是单独考虑每个词。 -
hashfx:如果设置为
1
,则使用固定的hash函数来初始化词向量。 -
epoch:训练周期的数量。
-
threads:训练过程中使用的线程数。
-
total_words:训练过程中处理的总单词数。
-
model:保存模型的文件名。
-
input:训练数据的输入文件。
这些参数可以根据具体的应用场景和计算资源进行调整,以达到最佳的训练效果。
构造w2v
from gensim.models import Word2Vec
word2vec_model = Word2Vec(X_tfidf, vector_size=16, sg=1, window=5, seed=2020, workers=24, min_count=1, epochs=1)
words = list(word2vec_model.wv.index_to_key)
vector_size = word2vec_model.wv.vector_size
word_vectors = np.zeros((len(words), vector_size))
for i, word in enumerate(words):word_vectors[i, :] = word2vec_model.wv[word]# 构建文档向量
def text_to_vec(text):words_in_text = text.split() # 假设文本是通过空格分词的text_vec = np.zeros(vector_size)word_count = 0for word in words_in_text:if word in word2vec_model.wv:text_vec += word2vec_model.wv[word]word_count += 1if word_count > 0:text_vec /= word_countreturn text_vec# 将所有文本数据转化为向量
text_vectors = np.array([text_to_vec(text) for text in X_tfidf])
数据切分
from sklearn.model_selection import train_test_split, StratifiedKFold
# 这里指定了random_state是为了保证每次切分数据集的结果都是一样的
Xidf_train, Xidf_test, yidf_train, yidf_test = train_test_split(text_vectors, y_tfidf,test_size=0.2,random_state=2024)del df,array_TFIDF
gc.collect()
模型训练
def train_model(model, X_train, X_test, y_train, y_test):dic = {'lr':'Logistic Regression','nb':'Naive Bayes','svm':'Support Vector Machine','dt':'Decision Tree','rf':'Random Forest','lgb':'LightGBM'}train_acc, test_acc = [], []if model == 'lr':clf = LogisticRegression(C=0.01, solver='liblinear')elif model == 'nb':clf = MultinomialNB(alpha=100)elif model == 'svm':clf = svm.LinearSVC(C=0.01)elif model == 'dt':clf = DecisionTreeClassifier(max_depth=100, min_samples_split= 2)elif model == 'rf':clf = RandomForestClassifier(max_depth=100,min_samples_split=5)elif model == 'lgb':clf = LGBMClassifier(learning_rate=1.0)else:print('Model doesn\'t exist')clf.fit(X_train, y_train)# predict using train datatrain_pred = clf.predict(X_train)train_acc = accuracy_score(y_train, train_pred)# predict using test datatest_pred = clf.predict(X_test)test_acc = accuracy_score(y_test, test_pred) print()print("Model: ", dic[model])print("Training accuracy: {}".format(train_acc))print("Test accuracy: {}".format(test_acc))print()return {'model_name':dic[model],'Train Accuracy':train_acc,'Test Accuracy':test_acc}
查看结果
metric_df = pd.DataFrame(columns=['model_name','Train Accuracy','Test Accuracy'])
for model in ['lr', 'nb', 'svm', 'dt', 'rf', 'lgb']:metric = train_model(model ,Xidf_train, Xidf_test, yidf_train, yidf_test)# 将metric转换成一个DataFramemetric_df = pd.concat([metric_df, pd.DataFrame([metric])], ignore_index=True)
metric_df
同类型项目
阿里云-零基础入门NLP【基于机器学习的文本分类】
阿里云-零基础入门NLP【基于深度学习的文本分类3-BERT】
也可以参考进行学习
学习的参考资料:
B站
相关文章:

NLP_情感分类_机器学习(w2v)方案
文章目录 项目背景数据清洗导包导入数据切分评论及标签Word2Vec构造w2v 数据切分模型训练查看结果 同类型项目 项目背景 项目的目的,是为了对情感评论数据集进行预测打标。在训练之前,需要对数据进行数据清洗环节,前面已对数据进行清洗&…...

240929-CGAN条件生成对抗网络
240929-CGAN条件生成对抗网络 前面我们学习了GAN(240925-GAN生成对抗网络-CSDN博客)和DCGAN(240929-DCGAN生成漫画头像-CSDN博客),接下来继续来看CGAN(Conditional GAN)条件生成对抗网络。 流…...

springboot第74集:设计模式
解析 核心线程数与CPU核数相同:避免线程过多导致的上下文切换,提高CPU利用率。无界队列:适合任务量大且任务执行时间短的场景,避免因队列满而拒绝任务。 IO密集型任务 场景描述 适用于执行大量IO操作的任务,如文件读写…...

数字化采购管理革新:全过程数字化采购管理平台的架构与实施
摘要:在数字化转型的浪潮中,采购管理正逐步迈向全流程的数字化。本文将详细解析全过程数字化采购管理平台的技术架构和实施策略,探讨如何通过Spring Cloud、Spring Boot2、Mybatis等先进技术和服务框架,实现从供应商管理到采购招投…...

Webpack 特性探讨:CDN、分包、Tree Shaking 与热更新
文章目录 前言包准备CDN 集成代码分包Tree Shaking原理实现条件:解决 treeShaking 无效方案:示例代码: 热更新(HMR) 前言 Webpack 作为现代前端开发中的核心构建工具,提供了丰富的特性来帮助开发者优化和打…...
Robot Operating System——一组三维空间中的位姿(位置和方向)
大纲 应用场景1. 机器人导航场景描述具体应用 2. 运动规划场景描述具体应用 3. 物体识别和跟踪场景描述具体应用 4. 环境建模场景描述具体应用 5. 仿真环境场景描述具体应用 定义字段解释 案例 geometry_msgs::msg::PoseArray 是 ROS 2 中的一个消息类型,用于表示一…...

mycat读写分离中间件
5、部署Mycat读写分离中间件服务 5.1安装Mycat服务 将Mycat服务的二进制软件包Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz上传到Mycat虚拟机的/root目录下,并将软件包解压到/use/local目录中 5.2赋予解压后的mycat目录权限 5.3向/etc/profile系统变量…...

Growthly Quest 增长工具:助力 Web3 项目实现数据驱动的增长
作者:Stella L (stellafootprint.network) 在瞬息万变的 Web3 领域,众多项目在用户吸引、参与和留存方面遭遇重重难关。Footprint Analytics 推出 Growthly,作为应对这些挑战的全方位解决方案,其中创新性的 Quest(任务…...

Pytorch 学习手册
零 相关资料 官方网址 官方网址下的API搜索网站 一 定义 深度学习框架是用于设计、训练和部署深度学习模型的软件工具包。这些框架提供了一系列预定义的组件,如神经网络层(卷积层、全连接层等)、损失函数、优化器以及数据处理工具…...
第十一章 【前端】调用接口(11.1)——Vite 环境变量
第十一章 【前端】调用接口 11.1 Vite 环境变量 参考:https://cn.vitejs.dev/guide/env-and-mode.html Vite 在一个特殊的 import.meta.env 对象上暴露环境变量。为了防止意外地将一些环境变量泄漏到客户端,只有以 VITE_ 为前缀的变量才会暴露给经过 …...
MySQL添加时间戳字段并且判断插入或更新时间
文章目录 步骤 1: 修改表结构步骤 2: 插入或更新数据步骤 3: 查询数据并判断时间完整示例 在MySQL中,可以在表中添加一个时间戳字段来记录每条数据的最后插入或更新时间。然后,在插入或更新数据时,自动更新这个时间戳字段。最后,在…...
SOA(面相服务架构)
目录 SOA的基本概念 SOA的关键特性 SOA的实现步骤 SOA的技术实现 SOA的应用场景 面向服务的架构(Service-Oriented Architecture, SOA)是一种软件设计理念和架构模式,旨在通过网络协议将不同的服务相互连接和集成,以构建灵活、可扩展和可重用的应用系统。SOA的…...
One2many(一对多)关联场景中,如何从模型(一)关联到模型(多)的某个字段
好的,我们用一个更通俗的例子来解释不同模块之间的模型关联,场景是“学校和学生”的例子。 1. 场景介绍 假设我们有两个模块: 学校模块 (school):用于管理学校信息。学生模块 (student):用于管理学生信息。 每个学…...
LLaMA 3 和 OpenAI有哪些相同点和不同点?
LLaMA 3(Meta 的 LLaMA 系列)和 OpenAI 的模型(如 GPT 系列)都是先进的 大语言模型(LLMs),它们在训练、应用场景和能力上有很多相似之处,但也存在显著的不同点。以下是一些关键相同点…...
Spring 事务管理及失效总结
所谓事务管理,其实就是“按照给定的事务规则来执行提交或者回滚操作”。 Spring 并不直接管理事务,而是提供了多种事务管理器,他们将事务管理的职责委托给 Hibernate 或者 JTA 等持久化机制所提供的相关平台框架的事务来实现。 Spring 事务…...

全局思维下的联合创新:华为携手ISV伙伴助推银行核心平稳升级
文 | 螳螂观察 作者 | 李永华 随着数字金融快速发展,对核心系统提出了“海量、高效、弹性、扩展、敏捷”等新需求,区域性银行面临核心系统升级的迫切需要,对金融科技厂商而言也催生了庞大的机遇和空间。 只是,银行核心系统是金…...
深度估计任务中的有监督和无监督训练
在计算机视觉领域,深度估计任务一直是研究的热点之一。它旨在通过图像或视频数据来推断场景中物体与相机之间的距离,为许多应用提供关键信息,如自动驾驶、机器人导航、增强现实等。在深度估计任务中,有监督训练和无监督训练是两种…...

扩散模型DDPM代码实践
安装diffusers pip install diffusers 按照diffusers官方代码 from diffusers import DDPMPipelinepipe DDPMPipeline.from_pretrained("google/ddpm-cat-256")image pipe().images[0]image.save("/data/zhz/projects/diffusion/output/ddpm_generated_imag…...

关于GPIO输入模式的配置选择
GPIO(通用输入输出)口是嵌入式系统中的重要组成部分,输入模式使得微控制器能够与外部世界进行交互。本文将探讨GPIO输入模式中的浮空输入、上拉输入和下拉输入的配置、使用场景及注意事项,并提供一些决策指导,帮助读者…...

【Kubernetes】日志平台EFK+Logstash+Kafka【实战】
一,环境准备 (1)下载镜像包(共3个): elasticsearch-7-12-1.tar.gz fluentd-containerd.tar.gz kibana-7-12-1.tar.gz (2)在node节点导入镜像: ctr -nk8s.io images i…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...