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

NLP情感分析:从传统方法到深度学习

NLP情感分析从传统方法到深度学习1. 技术分析1.1 情感分析任务类型描述典型应用二分类积极/消极评论分析三分类积极/中性/消极舆情监测多标签多种情感混合复杂文本1.2 方法对比方法特点性能词典方法基于情感词典中等传统MLTF-IDFSVM良好深度学习Word2VecCNN/RNN优秀预训练模型BERT等最佳2. 核心功能实现2.1 词典方法from nltk.sentiment import SentimentIntensityAnalyzer class LexiconSentimentAnalyzer: def __init__(self): import nltk nltk.download(vader_lexicon, quietTrue) self.analyzer SentimentIntensityAnalyzer() def analyze(self, text): scores self.analyzer.polarity_scores(text) if scores[compound] 0.05: return positive, scores[compound] elif scores[compound] -0.05: return negative, scores[compound] else: return neutral, scores[compound] analyzer LexiconSentimentAnalyzer() result, score analyzer.analyze(I love this product! Its amazing.) print(fSentiment: {result}, Score: {score})2.2 传统机器学习方法from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.svm import LinearSVC from sklearn.pipeline import Pipeline class TraditionalSentimentAnalyzer: def __init__(self): self.pipeline Pipeline([ (tfidf, TfidfVectorizer( max_features10000, ngram_range(1, 2), stop_wordsenglish )), (clf, LinearSVC(C1.0)) ]) def train(self, texts, labels): self.pipeline.fit(texts, labels) def predict(self, texts): return self.pipeline.predict(texts) def predict_proba(self, texts): decision self.pipeline.decision_function(texts) # 转换为概率 import numpy as np proba 1 / (1 np.exp(-decision)) return np.column_stack([1-proba, proba]) analyzer TraditionalSentimentAnalyzer() analyzer.train(train_texts, train_labels) predictions analyzer.predict(test_texts)2.3 深度学习方法import torch import torch.nn as nn class TextCNN(nn.Module): def __init__(self, vocab_size, embed_dim128, num_classes2, num_filters100, filter_sizes[3, 4, 5]): super().__init__() self.embedding nn.Embedding(vocab_size, embed_dim) self.convs nn.ModuleList([ nn.Conv2d(1, num_filters, (k, embed_dim)) for k in filter_sizes ]) self.fc nn.Linear(len(filter_sizes) * num_filters, num_classes) self.dropout nn.Dropout(0.5) def forward(self, x): x self.embedding(x) x x.unsqueeze(1) conv_outputs [] for conv in self.convs: conv_out torch.relu(conv(x)) pooled torch.max_pool2d(conv_out, (conv_out.size(2), 1)) pooled pooled.squeeze(3).squeeze(2) conv_outputs.append(pooled) concat torch.cat(conv_outputs, dim1) output self.dropout(concat) return self.fc(output) class DeepSentimentAnalyzer: def __init__(self, vocab_size): self.device torch.device(cuda if torch.cuda.is_available() else cpu) self.model TextCNN(vocab_size).to(self.device) self.criterion nn.CrossEntropyLoss() self.optimizer torch.optim.Adam(self.model.parameters(), lr1e-3) def train_epoch(self, dataloader): self.model.train() total_loss 0 correct 0 total 0 for texts, labels in dataloader: texts texts.to(self.device) labels labels.to(self.device) self.optimizer.zero_grad() outputs self.model(texts) loss self.criterion(outputs, labels) loss.backward() self.optimizer.step() total_loss loss.item() _, predicted outputs.max(1) total labels.size(0) correct predicted.eq(labels).sum().item() return total_loss / len(dataloader), 100. * correct / total def predict(self, texts): self.model.eval() with torch.no_grad(): outputs self.model(texts) _, predicted outputs.max(1) return predicted.cpu().numpy()3. 预训练模型方法from transformers import BertTokenizer, BertForSequenceClassification from transformers import Trainer, TrainingArguments class BertSentimentAnalyzer: def __init__(self, model_namebert-base-uncased): self.tokenizer BertTokenizer.from_pretrained(model_name) self.model BertForSequenceClassification.from_pretrained( model_name, num_labels3 ) self.device torch.device(cuda if torch.cuda.is_available() else cpu) self.model.to(self.device) def encode_texts(self, texts, max_length128): return self.tokenizer( texts, paddingTrue, truncationTrue, max_lengthmax_length, return_tensorspt ) def train(self, train_texts, train_labels, eval_textsNone, eval_labelsNone): train_encodings self.encode_texts(train_texts) class TextDataset(torch.utils.data.Dataset): def __init__(self, encodings, labels): self.encodings encodings self.labels labels def __getitem__(self, idx): item {key: val[idx] for key, val in self.encodings.items()} item[labels] torch.tensor(self.labels[idx]) return item def __len__(self): return len(self.labels) train_dataset TextDataset(train_encodings, train_labels) training_args TrainingArguments( output_dir./results, num_train_epochs3, per_device_train_batch_size16, warmup_steps500, weight_decay0.01, logging_dir./logs, ) trainer Trainer( modelself.model, argstraining_args, train_datasettrain_dataset, ) trainer.train() def predict(self, texts): self.model.eval() encodings self.encode_texts(texts) with torch.no_grad(): inputs {k: v.to(self.device) for k, v in encodings.items()} outputs self.model(**inputs) predictions torch.argmax(outputs.logits, dim1) return predictions.cpu().numpy()4. 性能对比4.1 方法对比方法准确率训练时间推理速度VADER0.78无极快TF-IDFSVM0.87分钟级快TextCNN0.91小时级快BERT0.94小时级毫秒级4.2 评估指标from sklearn.metrics import classification_report, confusion_matrix def evaluate(y_true, y_pred): print(分类报告:) print(classification_report(y_true, y_pred)) print(\n混淆矩阵:) print(confusion_matrix(y_true, y_pred))5. 总结情感分析方法选择快速分析使用VADER词典方法中等规模数据TF-IDFSVM高精度需求BERT等预训练模型

相关文章:

NLP情感分析:从传统方法到深度学习

NLP情感分析:从传统方法到深度学习 1. 技术分析 1.1 情感分析任务 类型描述典型应用二分类积极/消极评论分析三分类积极/中性/消极舆情监测多标签多种情感混合复杂文本 1.2 方法对比 方法特点性能词典方法基于情感词典中等传统MLTF-IDFSVM良好深度学习Word2VecCNN/R…...

自建RSS阅读器:基于Go与Docker的YourRSS部署与优化指南

1. 项目概述:一个现代、自托管的RSS阅读器如果你和我一样,是个信息获取的重度依赖者,同时又对数据隐私和阅读体验有近乎偏执的要求,那么“自建RSS阅读器”这个念头,大概率已经在你脑海里盘旋过无数次了。我们怀念那个通…...

【计算机毕业设计】基于Springboot的线上辅导班系统+LW

博主介绍:✌全网粉丝3W,csdn特邀作者、CSDN新星计划导师、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、…...

MacSweep:专为AI开发者设计的精准清理工具,一键释放数十GB空间

1. 项目概述:一个真正懂AI开发的Mac清理工具如果你是一名在Mac上折腾AI开发的程序员,那你一定对硬盘空间被无声吞噬的痛楚深有体会。今天要聊的这个项目,MacSweep,就是为解决这个痛点而生的。它不是另一个CleanMyMac,也…...

为什么很多公司服务器一多,运维反而越来越“失控”?

为什么很多公司服务器一多,运维反而越来越“失控”? 很多人刚入行运维的时候。 总觉得: 运维 = 装系统 + 部署服务 + 改配置后来进了真正的大型互联网公司才发现: 根本不是这么回事。 真正的大规模运维现场,经常是这样的: 凌晨 3 点。 报警群疯狂闪烁。 Promethe…...

告别电脑!这5款手机自动化脚本App,让你躺着搞定日常重复操作(附详细对比)

告别电脑!这5款手机自动化脚本App,让你躺着搞定日常重复操作 每天早上醒来第一件事就是打开五个App签到领积分?游戏日常任务刷到手指发麻?工作群里的日报周报永远忘记提交?这些重复性操作正在悄悄吞噬你的时间和精力。…...

Open-Lyrics:基于异步并发架构的高性能语音字幕生成系统设计

Open-Lyrics:基于异步并发架构的高性能语音字幕生成系统设计 【免费下载链接】openlrc Transcribe and translate voice into LRC file using Whisper and LLMs (GPT, Claude, et,al). 使用whisper和LLM(GPT,Claude等)来转录、翻译你的音频为字幕文件。 …...

从无人机飞控到机械臂:手把手教你用Python实现RPY角与旋转矩阵互转(附完整代码库)

从无人机飞控到机械臂:Python实现RPY角与旋转矩阵互转实战指南 在无人机自动降落时,飞控系统需要根据IMU数据实时计算机身姿态;当机械臂抓取物品时,末端执行器的空间方位必须精确控制——这些场景都离不开RPY角(Roll-P…...

从评价指标反推损失函数:拆解YDTR论文中SSIM与空间频率(SF)损失的PyTorch实现

从评价指标反推损失函数:拆解YDTR论文中SSIM与空间频率(SF)损失的PyTorch实现 在图像融合领域,评价指标与损失函数的设计往往存在微妙的关联。YDTR论文的创新点之一,就是将传统用于评估结果质量的SSIM(结构相似性)和SF…...

如何用CellProfiler实现生物图像自动分析:从手动处理到批量智能化的完整指南

如何用CellProfiler实现生物图像自动分析:从手动处理到批量智能化的完整指南 【免费下载链接】CellProfiler An open-source application for biological image analysis 项目地址: https://gitcode.com/gh_mirrors/ce/CellProfiler 你是否还在为处理海量细胞…...

Win11系统诊断启动后PIN失效?别慌!手把手教你用WinRE命令提示符修复(附System32下cmd丢失的终极解法)

Win11诊断启动后PIN失效的终极修复指南:从WinRE到System32文件丢失的全面解决方案 当你为了解决WiFi问题而尝试"诊断启动"后,突然发现系统提示"你的PIN不可用",甚至无法通过常规方式修复——这种突如其来的系统故障足以让…...

稀疏检索技术解析:从TF-IDF到混合架构实战

1. 稀疏检索技术的前世今生稀疏检索(Sparse Retrieval)作为信息检索领域的经典方法,在过去二十年里经历了从统治地位到边缘化,再到复兴的戏剧性转折。我第一次接触这项技术是在2012年参加TREC会议时,当时神经网络方法刚…...

OpenClaw Skills:模块化开发者技能库与自动化工具箱实践指南

1. 项目概述:一个面向开发者的技能库与自动化工具箱最近在GitHub上看到一个挺有意思的项目,叫Lazily01/openclaw-skills。乍一看这个标题,可能会有点摸不着头脑——“OpenClaw”是什么?“Skills”又具体指什么?但作为一…...

Si24R1实战:用STM32CubeMX配置SPI驱动,实测四种模式下的真实功耗

Si24R1深度实战:基于STM32CubeMX的SPI驱动配置与四模式功耗实测指南 手里这块Si24R1模块已经静静躺在零件盒三个月了——直到上周智能灌溉项目要求无线传输土壤湿度数据时,我才真正开始正视这颗2.4GHz射频芯片。官方手册标注的0.7μA关断功耗看起来很美&…...

Downr1n:基于checkm8漏洞的iOS设备降级与越狱完全指南

Downr1n:基于checkm8漏洞的iOS设备降级与越狱完全指南 【免费下载链接】downr1n downgrade tethered checkm8 idevices ios 14, 15. 项目地址: https://gitcode.com/gh_mirrors/do/downr1n Downr1n是一款基于checkm8硬件漏洞的专业工具,专门用于i…...

基于电液负载敏感的工程底盘行驶模糊PID控制【附代码】

✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。 ✅ 如需沟通交流,扫描文章底部二维码。(1)电液负载敏感先导控制系统的硬件设计与参数匹配:…...

基于多标签权重与相关性的在线流特征选择算法【附代码】

✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。 ✅ 如需沟通交流,扫描文章底部二维码。(1)高维标签权重构建与高阶关系挖掘:传统多标签特征…...

内曲线液压马达可视化设计平台开发Matlab【附代码】

✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。 ✅ 如需沟通交流,扫描文章底部二维码。(1)导轨曲线库与性能分析模块的正向设计:基于等加速…...

液压Stewart平台DDPG运动控制虚拟现实【附代码】

✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。 ✅ 如需沟通交流,扫描文章底部二维码。(1)联合仿真建模与虚拟现实环境搭建:利用AMESim建立…...

5分钟拯救你的B站缓存视频:m4s-converter终极使用指南

5分钟拯救你的B站缓存视频:m4s-converter终极使用指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾眼睁睁看着收藏已久的…...

BiliDownload:跨平台B站视频下载解决方案的技术实现与应用指南

BiliDownload:跨平台B站视频下载解决方案的技术实现与应用指南 【免费下载链接】BiliDownload B站视频下载工具 项目地址: https://gitcode.com/gh_mirrors/bil/BiliDownload 在数字内容消费日益增长的今天,用户对视频内容的本地化保存需求不断上…...

025年-2026年AI智能体学术论文发表机构共现网络图

✓集群内部的绿色连线密集,国内头部高校与中科院体系形成了稳定的合作网络,呈现 “国家队 顶尖高校” 的协同模式,在多智能体系统、智能体工程化等方向形成了合力。 ✓红蓝紫集群内高校以北美公立强校、欧洲顶尖理工院校为主,在智…...

025年-2026年AI智能体学术论文发表国家(地区)共现网络图

✓中国、美国的节点大小显著大于其他国家,说明两国在 AI智能体领域的论文发表量、研究活跃度处于全球顶尖水平,是该领域的核心创新主体。 ✓中国的节点略大于美国,反映出 2025-2026年中国在该领域的研究产出规模已处于全球领先地位。 ✓两国均…...

Windows 11系统优化终极指南:如何一键清理和加速你的电脑

Windows 11系统优化终极指南:如何一键清理和加速你的电脑 【免费下载链接】windows-11-debloat Script to optimize your installation of Windows 11. 项目地址: https://gitcode.com/gh_mirrors/wi/windows-11-debloat 还在为Windows 11系统卡顿、预装软件…...

如何高效定制Windows系统:免费开源工具的3种实用方法

如何高效定制Windows系统:免费开源工具的3种实用方法 【免费下载链接】windhawk The customization marketplace for Windows programs: https://windhawk.net/ 项目地址: https://gitcode.com/gh_mirrors/wi/windhawk 你是否厌倦了Windows系统的千篇一律&am…...

Windows字体渲染终极优化指南:3步让你的文字像Mac一样清晰

Windows字体渲染终极优化指南:3步让你的文字像Mac一样清晰 【免费下载链接】mactype Better font rendering for Windows. 项目地址: https://gitcode.com/gh_mirrors/ma/mactype 还在为Windows系统下模糊的字体显示效果而烦恼吗?想要让屏幕上的文…...

HoRNDIS:Mac与Android USB网络共享的终极解决方案

HoRNDIS:Mac与Android USB网络共享的终极解决方案 【免费下载链接】HoRNDIS Android USB tethering driver for Mac OS X 项目地址: https://gitcode.com/gh_mirrors/ho/HoRNDIS 你是否曾经遇到过这样的困扰:在没有Wi-Fi的环境中,你的…...

SMUDebugTool深度解析:AMD Ryzen硬件调试的技术架构与实践应用

SMUDebugTool深度解析:AMD Ryzen硬件调试的技术架构与实践应用 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: ht…...

Kubernetes中AI工作负载的安全风险与防护实践

1. 项目背景与核心问题去年在给某金融客户做容器化改造时,我们遇到一个棘手场景:某个AI推理服务在Kubernetes集群中异常启动了数百个副本,导致整个集群资源耗尽。事后排查发现是训练脚本中的自动扩缩逻辑存在缺陷,这个事件让我开始…...

3分钟搞定!Windows安装APK的终极方案:APK-Installer完全指南

3分钟搞定!Windows安装APK的终极方案:APK-Installer完全指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾在Windows电脑上急需运行某…...