【自然语言处理】微博评论情感分析——从数据预处理到词向量实战
微博评论情感分析从数据预处理到词向量构建简介一、项目介绍1. 项目任务2. 数据处理策略1核心目标2输入词向量格式3固定输入长度4超长评论处理5不足长度填充6词表压缩7未登录词处理二、代码实现1. 构建词表vocab_create.py词表构建逻辑说明2. 数据加载与预处理load_dataset.py数据格式说明3. 数据迭代器DatasetIteratorDatasetIterator 核心功能三、总结项目核心流程回顾关键技术要点简介在当今信息爆炸的时代海量的文本数据如社交媒体评论、产品评价、新闻留言等不断涌现这些文本中蕴含着人们丰富的情感态度——无论是对商品的喜爱、对政策的支持还是对服务的不满。自然语言处理NLP领域中的情感分析技术正是挖掘这些情感信息的关键工具。情感分析也常被称为意见挖掘它通过计算机技术对文本数据进行处理、分析和理解自动识别和提取文本中所包含的情感倾向如积极、消极、中性甚至还能进一步细分为喜悦、愤怒、悲伤、惊讶等具体的情感类别为企业决策、公共舆情监测、个人服务等诸多领域提供有力的支持。一、项目介绍1. 项目任务本项目旨在对微博评论信息进行情感分析建立模型自动识别评论所表达的情绪状态如积极、消极、中性等。2. 数据处理策略在深度学习的 NLP 任务中文本数据无法直接输入模型需要先将其转换为数值形式。以下是本项目中的核心处理策略1核心目标将每条评论内容转换为词向量形式作为模型的输入。2输入词向量格式每个词/字转换为200 维的词向量。本项目采用腾讯训练好的词向量模型原始维度为 4960 维如需该模型文件可私信获取。3固定输入长度每次传入模型的词/字个数需要固定。例如设定输入长度为 32则每条评论传入的数据格式为32 × 200的矩阵表示该批次 32 个词的向量表示。4超长评论处理如果一条评论超过 32 个词/字直接截断删除后面的内容。5不足长度填充如果一条评论不足 32 个词/字使用特殊标记PAD进行填充补齐到固定长度。6词表压缩语料库中的词/字数量庞大部分低频词难以训练出有效特征。因此项目中选择出现频率最高的4760 个词构建词表。7未登录词处理被压缩掉的低频词以及词表中不存在的词统一使用特殊标记UNK替代。二、代码实现1. 构建词表vocab_create.py本模块负责读取原始数据统计字符频率构建固定大小的词表并保存。fromtqdmimporttqdmimportpickleaspkl MAX_VOCAB_SIZE4760UNK,PADUNK,PADdefbuild_vocab(file_path,max_size,min_freq): 基于文本内容构建词表 参数 file_path: 数据文件路径 max_size: 词表最大容量 min_freq: 最小词频阈值 返回 vocab_dic: 词表字典 {字符: 索引} tokenizerlambdax:[yforyinx]# 分字函数vocab_dic{}withopen(file_path,r,encodingUTF-8)asf:i0forlineintqdm(f):# 跳过表头ifi0:i1continue# 提取评论内容跳过标签和逗号contentline[2:].strip()ifnotcontent:continue# 统计每个字符的出现频率forwordintokenizer(content):vocab_dic[word]vocab_dic.get(word,0)1# 按词频降序排列取前 max_size 个vocab_listsorted([itemforiteminvocab_dic.items()ifitem[1]min_freq],keylambdax:x[1],reverseTrue)[:max_size]# 构建词表字典vocab_dic{word:idxforidx,(word,_)inenumerate(vocab_list)}vocab_dic.update({UNK:len(vocab_dic),PAD:len(vocab_dic)1})# 保存词表pkl.dump(vocab_dic,open(simplifyweibo_4_moods.pkl,wb))print(f词表大小:{len(vocab_dic)})returnvocab_dicif__name____main__:vocabbuild_vocab(simplifyweibo_4_moods.csv,MAX_VOCAB_SIZE,1)print(词表构建完成)词表构建逻辑说明步骤说明1从 CSV 文件中读取中文评论文本2统计每个字符在语料中出现的次数3按词频降序排列保留前 4760 个高频字符4为每个字符分配唯一索引0~47595添加UNK索引 4760和PAD索引 47616将词表序列化保存为 .pkl 文件2. 数据加载与预处理load_dataset.py本模块负责读取数据、进行填充/截断、划分数据集。fromtqdmimporttqdmimportpickleaspklimportrandomimporttorch UNK,PADUNK,PADdefload_dataset(path,pad_size70): 加载数据集并进行预处理 参数 path: 数据文件路径 pad_size: 固定序列长度 返回 vocab: 词表字典 train_data: 训练集 dev_data: 验证集 test_data: 测试集 contents[]vocabpkl.load(open(simplifyweibo_4_moods.pkl,rb))tokenizerlambdax:[yforyinx]withopen(path,r,encodingutf8)asf:i0forlineintqdm(f):# 跳过表头ifi0:i1continueifnotline:continue# 提取标签和评论内容labelint(line[0])contentline[2:].strip(\n)# 分字tokentokenizer(content)seq_lenlen(token)# 填充或截断到 pad_sizeifpad_size:iflen(token)pad_size:token.extend([PAD]*(pad_size-len(token)))else:tokentoken[:pad_size]seq_lenpad_size# 字符转索引words_line[vocab.get(word,vocab.get(UNK))forwordintoken]contents.append((words_line,label,seq_len))# 随机打乱random.shuffle(contents)# 按 8:1:1 划分训练集、验证集、测试集totallen(contents)train_datacontents[:int(total*0.8)]dev_datacontents[int(total*0.8):int(total*0.9)]test_datacontents[int(total*0.9):]returnvocab,train_data,dev_data,test_dataif__name____main__:vocab,train_data,dev_data,test_dataload_dataset(simplifyweibo_4_moods.csv)print(f训练集:{len(train_data)}条)print(f验证集:{len(dev_data)}条)print(f测试集:{len(test_data)}条)数据格式说明处理后的每条数据是一个三元组字段类型说明words_linelist[int]字符索引列表长度为 pad_sizelabelint情感标签0/1/2等seq_lenint填充前的实际长度3. 数据迭代器DatasetIterator本模块负责将数据按批次打包转换为 PyTorch Tensor并支持迭代访问。classDatasetIterator:数据集迭代器批次化处理 Tensor 转换def__init__(self,batches,batch_size,device):self.batch_sizebatch_size self.batchesbatches self.n_batcheslen(batches)//batch_size self.residuelen(batches)%batch_size!0self.index0self.devicedevicedef_to_tensor(self,datas):将批次数据转换为 Tensorxtorch.LongTensor([_[0]for_indatas]).to(self.device)ytorch.LongTensor([_[1]for_indatas]).to(self.device)seq_lentorch.LongTensor([_[2]for_indatas]).to(self.device)return(x,seq_len),ydef__next__(self):迭代下一批次# 处理剩余样本ifself.residueandself.indexself.n_batches:batchesself.batches[self.index*self.batch_size:len(self.batches)]self.index1returnself._to_tensor(batches)# 迭代结束ifself.indexself.n_batches:self.index0raiseStopIteration# 正常批次startself.index*self.batch_size end(self.index1)*self.batch_size batchesself.batches[start:end]self.index1returnself._to_tensor(batches)def__iter__(self):returnselfdef__len__(self):returnself.n_batches(1ifself.residueelse0)DatasetIterator 核心功能功能说明批次化处理将数据分批加载避免内存溢出自动转换 Tensor将 Python 数据转为 PyTorch Tensor设备兼容自动将数据分配到 CPU 或 GPU标准迭代接口支持 for 循环和 len() 操作三、总结项目核心流程回顾词表构建统计语料字符频率 → 筛选高频词 → 分配索引 → 保存词表数据预处理读取文本 → 分字 → 填充/截断 → 转索引 → 划分数据集批次迭代按批次加载数据 → 转 Tensor → 供模型训练使用关键技术要点固定输入长度是 NLP 模型训练的基本要求用于填充不足部分 用于处理未登录词词表压缩可减少模型参数量提升训练效率数据集迭代器是连接预处理和模型训练的关键桥梁

相关新闻

计算机体系结构核心:机器字长、存储字长与指令字长深度解析

计算机体系结构核心:机器字长、存储字长与指令字长深度解析

1. 从“字长”说起:计算机底层设计的基石干了这么多年硬件和底层软件,我发现很多朋友在入门计算机体系结构时,对“字长”这个概念总是一知半解。机器字长、存储字长、指令字长,这三个词听起来很像,但它们在CPU设计、内…

2026/10/8 6:33:36 阅读更多 →
MyBatis动态SQL中安全处理List参数:避免IN查询的null与空集合陷阱

MyBatis动态SQL中安全处理List参数:避免IN查询的null与空集合陷阱

1. 从一次“诡异”的查询说起&#xff1a;为什么list.contains在 MyBatis 里不是你想的那样那天下午&#xff0c;我正对着一个看似简单的需求挠头。后端接口接收一个用户ID列表List<Long> userIds&#xff0c;需要从数据库里查询出所有在这个列表中的用户信息。这太常见了…

2026/10/10 10:17:47 阅读更多 →
haporxy概述,实验环境设定,haproxy安装及配置参数,socat日更新工具、基于cookie的会话保持

haporxy概述,实验环境设定,haproxy安装及配置参数,socat日更新工具、基于cookie的会话保持

haproxy概述什么是 HAProxyHAProxy 全称 High Availability Proxy&#xff0c;是一款免费、开源、高性能的 TCP/HTTP 反向代理、负载均衡软件&#xff0c;使用 C 语言开发。支持 四层&#xff08;TCP&#xff09;负载均衡 七层&#xff08;HTTP/HTTPS&#xff09;负载均衡跨平…

2026/10/10 0:20:14 阅读更多 →

最新新闻

黑茶色商务风PPT模板改稿指南:求职简历排版避坑与进阶技巧

黑茶色商务风PPT模板改稿指南:求职简历排版避坑与进阶技巧

简介&#xff1a;「黑茶色商务风个人求职求学简历工作个人展示PPT模板」是一份面向求职者与求学者的专业演示文稿资源。该模板将传统简历内容与视觉化展示方式相结合&#xff0c;从基本信息、个人技能、校园经历、工作经历到职业规划五个维度覆盖个人展示的主要场景&#xff0c…

2026/10/11 15:24:03 阅读更多 →
开发运维转网络安全:三类高匹配岗位与90天落地路径

开发运维转网络安全:三类高匹配岗位与90天落地路径

1. 先想清楚&#xff1a;为什么开发运维转网安不用重头学 想从开发或运维转网络安全&#xff0c;第一反应是不是觉得要重头学&#xff1f;我经常收到类似私信&#xff1a;在某公司做了几年服务端开发&#xff0c;每天写接口、查日志、修生产故障&#xff0c;听说网安门槛高、要…

2026/10/11 15:24:03 阅读更多 →
论文答辩PPT模板怎么用?从PPTX结构到母版避坑指南

论文答辩PPT模板怎么用?从PPTX结构到母版避坑指南

简介&#xff1a;一份规范的PPTX模板&#xff0c;本质上是一个包含主题、母版和版式的压缩包。理解PPTX内部结构&#xff0c;掌握母版与占位符的协作原理&#xff0c;是高效制作学术答辩PPT的关键。与通用模板相比&#xff0c;校园论文答辩PPT模板更贴合学位答辩场景的合规要求…

2026/10/11 15:24:03 阅读更多 →
MyBatis Plus JSON字段映射实体类:TypeHandler配置与避坑

MyBatis Plus JSON字段映射实体类:TypeHandler配置与避坑

最近不止一个做后端的朋友来问我同一个问题&#xff1a;数据库里某列存的是 JSON 字符串&#xff0c;比如 extra_info 里存了 {"tags":["vip"],"score":88} &#xff0c;实体类里想直接定义一个对象来接收&#xff0c;像 private ExtraInfo…

2026/10/11 15:24:03 阅读更多 →
Inventor速成教程的工程实践拆解:从PDF到可交付建模

Inventor速成教程的工程实践拆解:从PDF到可交付建模

简介&#xff1a;这是一份面向机械设计工程师、CAD进阶学习者及Inventor软件使用者的高级实战教程&#xff0c;聚焦参数化建模、复杂装配与专业级零件设计能力提升。教程以18个结构化练习项目为主线&#xff0c;系统覆盖草图高级约束、多类型打孔&#xff08;螺纹/沉头/倒角&am…

2026/10/11 15:24:03 阅读更多 →
Python unittest框架全解析:TestCase、Fixture与工程化实践

Python unittest框架全解析:TestCase、Fixture与工程化实践

聊到Python测试&#xff0c;很多人第一反应是pytest。但我今天想认真聊聊unittest——Python标准库自带的测试框架。我从写第一个单测起就在用它&#xff0c;后来项目里跑过几千条用例&#xff0c;我的体会是&#xff1a;它看着朴素&#xff0c;用对了非常稳。这篇就把unittest…

2026/10/11 15:23:03 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →