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

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主要有两种训练模型:

  1. CBOW(Continuous Bag of Words):这是一个预测单词的工具,给定一个单词前后文的单词,预测当前单词。CBOW模型不考虑单词在句子中的顺序。

  2. Skip-Gram:与CBOW相反,Skip-Gram模型给定一个单词,预测它前后文的单词。Skip-Gram通常比CBOW能更好地捕捉词语之间的关系,但是计算量更大。

Word2Vec模型的训练包括以下步骤:

  1. 初始化:随机初始化词向量和上下文向量。

  2. 训练:通过大量文本数据训练模型,使用梯度下降等优化算法不断更新词向量,以减少预测单词的误差。

  3. 优化:通过不断迭代,优化词向量,使得语义相似的词在向量空间中更接近。

训练完成后,Word2Vec可以用于各种自然语言处理任务,如词义消歧、句子相似度计算、机器翻译等。词向量可以作为输入特征,用于训练其他深度学习模型。

Word2Vec的词向量可以捕捉到一些语义规律,例如:

  • 国王 - 男人 + 女人 = 女王
  • 巴黎 - 法国 + 英国 = 伦敦

这些规律表明Word2Vec能够理解和表达词语之间的相对关系。

Word2Vec模型的优点包括:

  • 能够捕捉词语的语义信息。
  • 生成的词向量可以用于多种下游任务。
  • 模型相对简单,训练效率高。

缺点包括:

  • 无法捕捉词语的语法信息。
  • 无法处理一词多义的情况。
  • 需要大量的文本数据进行训练。

Word2Vec是词嵌入(word embedding)领域的一个重要里程碑,它启发了后续许多其他词嵌入模型的发展,如GloVe(Global Vectors for Word Representation)和FastText。

Word2Vec模型在训练时有多个参数可以设置,以下是一些常见的参数及其意义:

  1. vector_size (或 size):这是生成的词向量的维度。较小的维度可能无法捕捉足够的细节,而较大的维度可能会增加计算成本并且导致过拟合。常见的维度设置有100、200、300等。

  2. window (或 windowSize):上下文窗口的大小,即在当前单词的前后考虑多少个单词。较大的窗口可以捕捉更远的依赖关系,但也可能包含更多噪声。

  3. min_count:忽略出现次数低于此值的单词。这可以用来过滤掉一些出现频率非常低的单词,以提高训练效率。

  4. negative (或 negativeSize):在训练中使用负采样的词汇数量。负采样是一种优化技术,用于提高模型的训练效率。

  5. iter (或 epochs):训练数据集的迭代次数。较大的迭代次数可以提高模型的性能,但也需要更多的计算资源。

  6. batch_size:每次模型更新时处理的单词数量。较大的批量大小可以提高内存的使用效率,但也可能影响模型的收敛速度。

  7. alpha:学习率。较高的学习率可以加快训练速度,但可能导致模型无法收敛。

  8. min_alpha:学习率的下限。在训练过程中,学习率会逐渐减小到这个值。

  9. sg:训练模式,0 表示使用CBOW模型,1 表示使用Skip-Gram模型。

  10. hs (或 hierarchicalSampling):如果设置为1,则使用分层采样。分层采样是一种考虑单词频率的采样方法,对高频词进行下采样,以提高模型对低频词的学习效率。

  11. negative_sampling:如果设置为1,则使用负采样。负采样是一种优化技术,通过只采样一部分负例来提高训练效率。

  12. cbow_mean:当使用CBOW模型时,如果设置为1,则对上下文的词向量取平均,而不是单独考虑每个词。

  13. hashfx:如果设置为1,则使用固定的hash函数来初始化词向量。

  14. epoch:训练周期的数量。

  15. threads:训练过程中使用的线程数。

  16. total_words:训练过程中处理的总单词数。

  17. model:保存模型的文件名。

  18. 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搜索网站 一 定义 深度学习框架是用于设计、训练和部署深度学习模型的软件工具包。这些框架提供了一系列预定义的组件,如神经网络层(卷积层、全连接层等)、损失函数、优化器以及数据处理工具&#xf…...

第十一章 【前端】调用接口(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…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​,覆盖应用全生命周期测试需求,主要提供五大核心能力: ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

多模态大语言模型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…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

安卓基础(aar)

重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...