当前位置: 首页 > 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…...

今天推荐一个文档管理系统 Dorisoy.Pan

Dorisoy.Pan 是一个基于 .NET 8 和 WebAPI 构建的文档管理系统,它集成了 Autofac、MediatR、JWT、EF Core、MySQL 8.0 和 SQL Server 等技术,以实现一个简单、高性能、稳定且安全的解决方案。 这个系统支持多种客户端,包括网站、Android、iO…...

【RocketMQ】消费失败重试与死信消息

🎯 导读:本文档详细介绍了RocketMQ中的重试机制与死信消息处理方法。对于生产者而言,文档提供了如何配置重试次数的具体示例;而对于消费者,它解释了默认情况下消息消费失败后的重试策略,并展示了如何通过代…...

注册安全分析报告:闪送

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...

SpringCloud入门

SpringCloud 原版笔记:狂神说笔记——SpringCloud快速入门23 - subeiLY - 博客园 (cnblogs.com) 一.前言 常见面试题 什么是微服务? 微服务之间是如何独立通讯的? SpringCloud 和 Dubbo有哪些区别? SpringBoot和SpringCloud&…...

js替换css主题变量并切换iconfont文件

iconfont不止有单色、双色的图标,还有很多【多色】的图标,于是不能【去色】,只能手动替换primary 新建一个iconfont,替换过主题色的,然后与旧的iconfont配合切换使用 主要如下: reqiure之前必须【清除缓…...

UI设计师面试整理-设计趋势和行业理解

在UI设计师的面试中,了解当前的设计趋势和行业动态可以让你在面试中展示你的前瞻性思维和对设计领域的深刻理解。面试官希望看到你不仅具备扎实的设计技能,还能够洞察和应用最新的设计趋势和技术。以下是一些当前的设计趋势和如何在面试中展示你对这些趋势的理解和应用的建议…...

Java零工市场小程序如何改变自由职业者生活

如今,自由职业者越来越多,他们需要找到合适的工作机会,Java零工市场小程序,为自由职业者提供了一个方便、快捷的寻找工作机会的方式,这样一来,改变了自由职业者找寻工作的方式,也提高了他们的收…...

android11 自动授权访问sdcard

目录 步骤1 步骤2 步骤1 frameworks/base/core/java/com/android/internal/os/ZygoteInit.java OsConstants.CAP_SYS_PTRACE,OsConstants.CAP_SYS_TIME,OsConstants.CAP_SYS_TTY_CONFIG,OsConstants.CAP_WAKE_ALARM,OsConstants.CAP_BLOCK_SUSPENDOsConstants.CAP_BLOCK_SUS…...

优青博导团队/免费指导/数据分析//论文润色/组学技术服务 、表观组分析、互作组分析、遗传转化实验、生物医学

🌟 教授团队领衔,全方位科研服务 🚀 一站式科研解决方案 📈 加速科研进程,让成果不再等待 📝 专业分析 定制服务 科研成功 👨‍🔬 立即行动,让科研成果跃然纸上 业务领…...

Mybatis 学习之 分页实现

文章目录 1. Mybatis1.1. 代码实现 2. Mybatis Plus2.1. 代码实现2.2. 特别注意 3. PageHelper3.1. 代码实现3.2. 特别注意 参考资料 1. Mybatis 1.1. 代码实现 package com.example.demo;import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot…...

mip网站有什么好处/性能优化工具

tf.matmul是矩阵的乘法,即tf.matmul(x,y)中的x和y要满足矩阵的乘法规则,例如x[2,3],y[3,2] tf.multiply是两个矩阵对应的数据相乘,所以两个矩阵的形式必须相同,即tf.multiply(x,y)中…...

wordpress快速仿站视频教程/外贸建站网站推广

http://www.cnblogs.com/xiaohuochai/p/7083153.html...

有没有做请帖的网站/百度在西安的公司叫什么

一 .概述 在本次的springcloud之中,我们使用Maven来管理我们的整个内容,为了方便后面的演示,本次将基本的内容搭建起来. 在springcloud之中,版本是一个比较重要的话题, 上面是官网给出的适配模式,我们本次使用1.5x版本的springboot和E版本的springcloud. 二 .搭建父项目 <pa…...

做教育机构中介网站/百度推广可以自己开户吗

给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 int maximalRectangle(char** matrix, int matrixSize, int* matrixColSize){int row matrixSize;if(row 0){return 0;}int line matrixColSiz…...

武汉最好的网站建设公司哪家好/seo薪酬

引论 &#xff1a; 在面向对象的程序设计语言中&#xff0c;多态&#xff08;polymorphic&#xff09;是继数据抽象和继承之后的第三种基本特性。 多态通过分离“做什么”和“怎么做”&#xff0c;从另一角度将接口和实现分离开来。多态不但能够改善代码的组织结构和可读性&…...

毕业设计做网站题目/seo搜索是什么

在node.js中有个专门处理与数据库连接操作的模块mongodb&#xff0c;由于这个模块只是对mongodb的操作做了一层浅封装&#xff0c;用起来不是很好用。如是出现了一个开源的第三方模块mongoose&#xff0c;mongoose是建立在mongodb基础之上的一个比mongodb更好用的模块。 Mongoo…...