项目 | Word2Vec + LSTM 电商评论情感标签预测

文本分类-Word2vec+LSTM LSTM是专门用于处理序列数据(文本序列、时间序列)等的RNN模型之一,本文分别按照embedding+LSTM、word2vec预训练模型+双向LSTM两种方式进行文本分类的代码实战,附带LSTM层参数详解,尽可能给读者带来多的收获 阅读详情

本科三年级课程大作业,做一个记录,欢迎吐槽。

整体思路

本实验中,目标解决的问题是:根据文本,预测句子总体情感特征。
首先调用jieba包对句子进行分词,然后去除一些停用词、特殊文本(如纯数字、过短或过长词语),再去除出现频次过少的词语,构建高频词词典,one-hot编码后做词嵌入(Word embedding),最后用各类模型进行预测。

图1 实验整体思路
主要分为了四个文件:

  • PreProcessings.py 读取数据,分词,构建字典,预训练模型
  • LSTMs.py 构建神经网络,自定义评价函数和损失函数
  • Predict.py 预测过程,包括神经网络和其他所有模型
  • main.py 主函数

模型

Word Embedding

对于一个句子样本输入,可以先对它one-hot然后乘上词嵌入矩阵就可得到这个句子的词嵌入向量表示。要想得到好的词向量,我们需要训练的就是这个矩阵W(shape=(input_dim,output_dim))。Embedding层的作用就是训练这个矩阵W并进行词的嵌入为每一个词分配与它对应的词向量。

在Keras中,这个词嵌入矩阵W可以先随机初始化,然后根据下游任务训练获得,也可以使用预训练的词嵌入矩阵来初始化它(用weights来为layer初始化任意权重),然后再训练,也可以直接用预训练的词嵌入矩阵来初始化它并冻结它,不让它变化,不让它可训练(trainable=False)。

在本实验中,分别采用两种方法来进行训练。一种为直接随机初始化,然后再训练中进行更新;另一种则是采用Word2Vec模型,预训练好后嵌入(再训练/固定)。

Focal Loss

原始数据中,正面、中性与负面的评论比例大致为100:6:6。
Cross Entropy Error Function(交叉熵损失函数)是一类常被用于多分类问题的损失函数,其计算公式为
Cross Entropy Error Function
其中,M为分类的数量,y_ic为指示变量(0/1),如果该类别和样本i的类别相同就是1,否则是0,p_ic为观测样本i属于类别c的预测概率。

然而,对于样本不均衡的问题,我希望对于分类错误的少数类样本加大惩罚,采用了自定义的Focal loss(焦点损失)作为损失函数。Focal loss在17年被Lin等人提出,是对交叉熵损失函数的改进,它在标准交叉熵准则中增加了一个因子,解决类不平衡问题。

原文以二元分类问题为例,原始交叉熵Cross Entropy为

原始交叉熵

平衡交叉熵Balanced Cross Entropy为类别1引入加权因子α∈[0,1],为类别0引入加权因子1-α,

平衡交叉熵

Focal loss在Cross Entropy上加入调制因子
  ( 1 − p t ) γ \ (1- p_t)^\gamma  (1−pt​)γ ,其中可调聚焦参数γ≥0,

Focal loss

在本实验中,采用的是Focal loss的α平衡变体,也即结合了Balanced Cross Entropy和Focal loss:

本实验中使用的Focal loss

Metric

混淆矩阵

TP: 预测值为正,实际值为正
FP: 预测值为正,实际值为负
FN: 预测值为负,实际为正
TN: 预测值为负,实际为负

图2:混淆矩阵

在n-分类问题中,混淆矩阵可以有两种形式。一种为一个n * n的矩阵,可以分别表示有多少个第i类的真实值被预测为第j类;另一种则是n个2 * 2的矩阵,每个矩阵分别表示第i类的混淆矩阵,其中正样本表示标签为第i类的样本,负样本表示标签为不是第i类的样本。以第一个类别“负面”为例,它的负样本,“中性”和 “正面”预测对的有TN个。“中性”预测成“正面”也算对的,因为它们是一类,都是负样本。

在本实验中,我主要使用的是前者。

Accuracy, Precision, Recall, F1

Accuracy
Accuracy——预测正确的样本在全部样本中的比例。对于不平衡问题,用Accuracy作为指标是不合理的。如果全部预测为多数类,也能达到非常高的Accuracy。

Precision
Precision——预测为正的样本中实际为正的比例。
Recall
Recall——实际为正的样本中预测为正的比例。

F1
Precision和 Recall的调和平均值。Precision体现了模型对负样本的区分能力,Precision越高,模型对负样本的区分能力越强;Recall体现了模型对正样本的识别能力,Recall越高,模型对正样本的识别能力越强。F1 score是两者的综合,F1 score越高,说明模型越稳健。F1 score 是本次实验评价模型的主要指标。

特别地,由于本实验为多分类问题。对于以上指标,如果是“macro”,则总指标是每一类的指标的均值;若为“micro”,则是所有样本的均值。由于本实验存在类别不平衡问题,使用“macro”更能反映模型的优劣。

实验

原始数据中,正面、中性与负面的评论比例大致为100:6:6。这迫使了我采取一些防止过拟合的措施,比如采样方法(过采样、欠采样、综合采样),设置惩罚,正则化等等。

设置惩罚在本实验中效果最好。如果使用原始的交叉熵函数,模型几乎无法摆脱过拟合。采用过拟合和综合采样方法在本实验中的表现并不好,依然预测为多数类。究其原因,可能是过采样是对样本的增强,而在文本中一点小的改动可能就会带来很大的影响,改变语义。

原始数据Word2Vec嵌入

下表中分别列出各个模型的训练结果。将直接使用one-hot编码后的词典作为输入变量的朴素贝叶斯模型作为基准模型。

对于随机森林模型,为了避免过拟合,我按照样本的比例设置了平衡的权重,然而从混淆矩阵中可以看出,模型分类仍然偏向正面情感,也就是多数类。

下面三种深度学习模型,在训练层均采用单层单向的LSTM层,区别在于word embedding的方法和是否在训练时更新权重。在embed层和训练层均随机dropout20%的神经元。采用focal loss作为损失函数,gamma取值为2,alpha分别设置为100,100和1,加大对少数类样本分类错误的惩罚。采用SoftMax作为输出函数,输出三类的概率。

可以看出,在本数据集上的效果:嵌入Word2Vec训练后的词向量,在训练时不更新权重 < 随机初始化embed层,在训练时更新权重 < 嵌入Word2Vec训练后的词向量,在训练时更新权重。

这和Kim, Yoon得出的结论是不吻合的。他们使用了四种词向量方法进行CNN的句子。分别是: 1)随机初始化向量,再训练;2)使用预训练词向量,不再训练;3)使用预训练词向量,再训练;4)使用两个预训练的词向量表示一个词,两个词向量交替训练。在多数情况下,1)< 2)< 3)。

那么,为什么会出现再训练的随机权重比不更新的预训练的词向量好的情况呢?可能的原因是:语料不足。预训练的优势在于可以用大量的语料做无监督训练,而我们的数据仅仅有一万多条,这相比一般NLP的数据集是比较小的。
图3 Kim, Yoon的训练结果

模型 Macro F1 混淆矩阵
朴素贝叶斯 0.26 Column 2
支持向量机 0.36 在这里插入图片描述
随机森林(balanced weight) 0.44 在这里插入图片描述
单层单向LSTM(随机初始化,更新) 0.56 在这里插入图片描述
单层单向LSTM(word2vec训练,不更新) 0.46 在这里插入图片描述
单层单向LSTM(word2vec训练,更新) 0.57 在这里插入图片描述

预训练语料嵌入

为了解决这个问题,我在网上下载了开源的26G的使用Word2Vec训练好的百度百科语料直接嵌入。我仅进行了单层单向LSTM不带权重更新的模型训练(如果需要更新,可能需要批量feed数据),F score为0.55。虽然结果没有超过随机初始化的0.56,但是相比原本语料嵌入的0.46提升颇多。

如果条件允许进行权重更新,很有可能会产生更好的预测结果。另外,预训练的语料类型也很重要,如果能找到更加相关的数据集进行预训练,那么精度会更好。

由于开源数据集缺少一个重要文件,所以无法进行增量训练。而根据之前的研究,将自己的语料和开源语料增量训练后,分类准确度会得到一定的提升。如果有合适的数据集,这是一个值得尝试的方向。

预训练向量嵌入的混淆矩阵

不考虑数据平衡问题

在前面所有的实验中,数据不平衡问题大大影响了实验结果。使用复杂的网络结构容易会陷入过拟合的窘境。

在正面情绪的评论中随机选取了1200条,和约800条负面以及中性评论构成新的大致类别平衡的数据集。由于数据大致平衡,所以选用了原本的交叉熵作为损失函数。对于所有的LSTM结构,均迭代50个epoch,为防止过拟合,当连续8个epoch验证集上的损失函数均上升超过原来的1%时,停止训练。

对于Accuracy: 单层单向LSTM - 0.69 < 单层双向LSTM - 0.71 < 双层双向LSTM - 0.73

代码

预处理

# -*- coding: utf-8 -*-

import warnings
warnings.filterwarnings("ignore")

import os
os.chdir('...')

import pandas as pd
import numpy as np
import jieba
import re
from collections import Counter
import pickle
from keras.preprocessing import sequence
import LSTMs #引用模块 
from gensim.models.keyedvectors import KeyedVectors

EMBEDDING_DIM = 128

def get_stop_list():
    stop = []
    f = open(r'stop.txt', 'r', encoding='utf-8')
    for lines in f:
        ls = lines.strip('\n').split('\n')
        for i in ls
采用Bi-LSTM结合Word2vec进行中文文本多标签分类 关于word2vec的详细介绍可以参考此篇文章实现方式采用了gensim工具,并根据结果进行文本向量化。 本篇文章采用的数据集和上篇文章采用的一样 和上篇文章不同的是加入了注意力机制层和进行词嵌入的时候对权重进行了赋值,关于keras中Embedding层的介绍可以参考这篇文章并引入了Bi-LSTM 构建的模型: 运行结果: 结果可视化:... 阅读详情

相关推荐

文本分类模型选型实战:从Word2Vec到BERT的工程权衡

文本分类是自然语言处理中最基础且高频的落地任务,其核心在于选择适配业务场景的建模范式。从静态词向量(如Word2Vec)到上下文感知表征(如BERT),不同方法在语义建模能力、计算开销与数据依赖上存在本质差异。Word2Vec依赖预训练或领域重训的固定向量,需搭配LightGBM等强特征交互模型提升判别力;TextCNN通过多尺寸卷积核高效捕获局部n-gram模式,适合短文本实时分类;而BERT虽具备双向上下文建模能力,但对标注数据量、推理延迟和硬件资源要求显著更高。本文基于电商评论情感分析的真实AB测试,

weixin_30628801的博客 335

文本分类基于Word2Vec与LSTM

在自然语言处理领域中,文本分类是一个重要的任务,它旨在将给定的文本分为不同的预定义类别。Word2Vec是一种常用的词向量表示方法,可以将词语转换为具有语义信息的向量表示。本文将介绍如何结合Word2Vec和LSTM进行文本分类,并提供相应的源代码。本文介绍了如何使用Word2Vec和LSTM进行文本分类。首先,我们对文本数据进行了预处理,包括清洗数据、分词和构建词汇表。然后,我们使用Word2Vec模型为词语生成词向量表示。最后,我们构建了一个LSTM文本分类模型,并使用训练数据对模型进行训练和评估。

XlltEditor的博客 563

基于LSTM的电商评论情感分析-TensorFlow2实现(内附源码)【自然语言处理NLP-100例】

基于LSTM的文本情感分析-TensorFlow2 前期工作 导入数据 import pandas as pd import matplotlib.pyplot as plt from matplotlib import font_manager from itertools import accumulate # 支持中文 plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 plt.rcParams['axes.unicode_minus'

“365天深度学习训练营”报名进行中~ 4929

34、电商产品反馈数据情感分析与家庭能源消耗预测

本文探讨了电商产品反馈数据的情感分析与家庭能源消耗预测两大主题。在情感分析方面,介绍了从数据收集、文本预处理、向量化到分类的完整流程,并提出通过多源数据融合、优化预处理策略及引入先进模型(如BERT)来提升准确性。在家庭能源消耗预测方面,提出基于BGS-AOA优化的LSTM模型,实验表明其性能优于传统算法,并展望未来可结合天气、节假日等特征进行多用户、多区域及实时预测,以提升能源管理效率。两项研究均展示了数据驱动方法在实际行业中的应用价值与发展潜力。

desk3的博客 59

基于Keras与LSTM的中文评论情感分析实战(含完整代码实现)

通用词典总有盲区。比如金融领域里的“破净”、“蓝筹”,医疗领域的“心肌梗死”、“CT检查”,如果不专门告诉 jieba,它就会傻乎乎地切成“破/净”、“心/肌/梗/死”……解决办法很简单:加载自定义词典!创建文件区块链 100 n人工智能 200 n深度学习 150 n元宇宙 5000 n每行格式:词语 词频 词性(词性可选)加载方式:text = "基于Transformer架构的深度学习模型"print(seg)

weixin_30789053的博客 892

基于LSTM的电商评论情感分析系统实现与部署指南

自然语言处理中的情感分析是文本分类的重要应用,它能够帮助企业从海量用户反馈中提取态度倾向。本文从深度学习的视角出发,介绍如何利用LSTM网络对电商平台的产品评论进行情感判别。区别于BERT等大模型,LSTM以较低的资源开销和较快的训练速度,成为中小规模文本分类任务的高性价比选择。文章详细梳理了从数据清洗、分词、Word2Vec词向量训练到BiLSTM+注意力机制模型构建的完整流程,并给出工程部署与调优经验。该方案可应用于商品口碑监控、差评预警、舆情分析等场景,帮助开发者快速构建轻量级情感分析服务。

weixin_29053577的博客 290

Word2Vec+SVM:电商评论情感分析经典方案详解与实战

文本分类是自然语言处理(NLP)的核心任务之一,其目标是将文本自动划分到预定义的类别中。其基本原理在于将非结构化的文本数据转化为计算机可处理的数值特征,再通过分类算法进行学习与预测。这一技术在工程实践中价值巨大,是实现自动化内容理解、信息筛选和决策支持的关键。在众多应用场景中,电商评论情感分析尤为典型,它通过识别用户评论的情感极性(如好评/差评),帮助商家洞察用户反馈、优化产品与服务。本文聚焦于一个在深度学习普及前被广泛验证的高效组合方案:利用Word2Vec模型将词语转化为蕴含语义信息的稠密向量,再结合支

weixin_29057695的博客 274

电商评论真伪判别实战包:LSTM+Word2Vec全流程Python实现(含训练模型与中文预处理脚本)

直接跑通的虚假评论识别项目,专为本科毕设优化。用真实标注的电商评论数据(train.csv)训练LSTM分类模型,输入是经中文分词、停用词过滤、标准化后的文本序列;底层词向量由Word2Vec在语料上自主训练生成(produceWord2vec.py),模型权重已保存为sentiment.h5,支持开箱预测(predict.py)。配套完整预处理链:Corpuspreprocess.py做清洗分词,dataPreprocess.py统一格式并生成标签序列,trainer.py封装训练逻辑,所有脚本均适配Py

s4t5u6v的博客 211

电商评论真伪判别实战包:LSTM+Word2Vec端到端训练与预测全流程代码

直接跑通的电商虚假评论识别项目,覆盖从原始文本清洗、中文停用词过滤、Word2Vec词向量训练,到LSTM模型搭建、训练、保存及预测的完整链路。含已标注的训练数据(train.csv)、对应标签文件(train_flag.xlsx)、预训练中文词向量模型(word2vec.model)、训练完成的LSTM权重(sentiment.h5)和可一键执行的预测脚本(predict.py)。所有Python脚本模块清晰分离:Corpuspreprocess.py负责语料基础处理,dataPreprocess.py做

kkk56的博客 374

2018细粒度用户评论情感分析实战数据集与技术解析

简介:该资源源自2018年AI Challenge挑战赛,聚焦自然语言处理中的细粒度用户评论情感分析任务。项目提供完整的训练与测试数据集,旨在通过机器学习和深度学习模型识别评论中细微的情绪类别(如喜悦、愤怒、沮丧)及其强度,超越传统二分类情感分析。适用于电商、社交媒体、客户服务等场景的情感理解与反馈挖掘,涵盖词嵌入、预训练模型、LSTM/CNN等核心技术,是NLP情感分析领域的重要实践资料。

weixin_33816734的博客 434

商品评论情感识别实战工程:SVM与LSTM双模型已训练完毕,带清洗数据、词向量和可运行GUI界面

直接上手就能用的商品评论三分类(正面/负面/中性)分析工具包。里面有两个训练好的模型:一个是用TF-IDF+词向量特征配合SVM的传统机器学习方案,另一个是基于Word2Vec预训练词向量的LSTM深度学习模型,都附带完整训练、测试和可视化代码。数据部分提供原始Excel(正负样本)和清洗后的CSV文件(含中性评论、测试集、结果示例),还打包了预处理脚本(去噪、分词、停用词过滤等)和训练好的词向量模型(w2v_model.pkl、comment_text.model)。GUI界面用Tkinter开发,双击就

l3m4n的博客 208

中文电商评论情感打分工具:LSTM+自注意力模型训练、测试与Web服务一键部署

一套开箱即用的中文细粒度情感分析实现方案,专为电商和社交平台用户评论设计,支持正面、负面、中性三类情感极性识别,并能定位到具体评价对象的情感倾向。底层基于LSTM捕获语句时序特征,结合自注意力机制动态加权关键情感词,提升对否定、程度副词、上下文转折等复杂表达的建模能力。提供完整数据预处理链路:繁体转简体(langconv.py)、中文维基清洗(zh_wiki.py)、批量加载(load_batch.py)、Word2Vec词向量训练(word2vec.py)。模型结构清晰(model.png),训练过程支持

butter的博客 203

Qt+PCL实战:如何用QVTKOpenGLNativeWidget高效渲染3D点云(附完整代码)

本文深入解析了Qt与PCL结合使用QVTKOpenGLNativeWidget进行高效3D点云渲染的实战技术。通过对比传统QVTKWidget,详细介绍了QVTKOpenGLNativeWidget在渲染效率、内存占用和兼容性方面的显著优势,并提供了完整的代码示例和性能优化策略,助力开发者在工业检测、自动驾驶等领域实现更高效的点云可视化。

keras9composer的博客 687

告别示教器!用C#和ABB PC SDK 6.08打造你的第一个Windows机器人控制台(附完整连接代码)

本文详细介绍了如何使用C#和ABB PC SDK 6.08开发Windows机器人控制台应用,实现无示教器的机器人控制。从环境配置、SDK引用到机器人发现、连接及状态监控,提供了完整的代码示例和架构设计建议,帮助开发者快速掌握上位机控制技术。

weixin_29758911的博客 323

影刀RPA之成绩批量查询系统

自动化登录账号,读取数据表中内容去填写信息去查询,并判断多个数据不同的页面去不同的读取查询结果内容,如考生各项信息与各科成绩,总分和查询时间,采集出来到指定的数据表格中,等待时间并依次循环运行。主要功能。

2201_75330891的博客 1084

别再死磕AUTOSAR文档了!手把手教你用ISOLAR-A配置BswM模块(附实战流程图)

本文通过Vector ISOLAR-A工具实战演示AUTOSAR BswM模块的配置流程,帮助工程师快速掌握基础软件模式管理。从环境准备到模式仲裁规则配置,再到动作列表实现,详细讲解每个步骤,并提供常见问题排查和高级优化技巧,大幅提升开发效率。

weixin_42542669的博客 250

Ansys Zemax | 公差分析中的补偿器优化:如何提升系统良率?

本文深入探讨了在Ansys Zemax公差分析中如何有效设置与优化补偿器以提升系统良率。文章指出,补偿器是连接理想设计与现实生产的关键,通过模拟实际装配中的调整(如后焦距),能显著改善公差分析的“悲观”预测。详细介绍了补偿器的添加方法、多补偿器策略、评价函数设计以及通过灵敏度分析和蒙特卡洛档案优化补偿效果,旨在帮助光学工程师制定更符合生产实际的公差策略,从而有效提升产品良率。

weixin_28419039的博客 621

手把手教你学simulink(12.10)--设计和仿真一个用于控制飞机纵向运动(高度和速度)的多变量控制系统

飞机的纵向运动控制是航空工程中的一个重要问题,涉及飞机的高度和速度的精确控制。多变量控制系统可以同时控制多个飞行参数,确保飞机在最佳条件下运行。Simulink提供了一个强大的平台,用于建模、仿真和分析动态系统,非常适合设计和测试多变量控制系统。通过本项目的实施,我们成功设计和仿真了一个用于控制飞机纵向运动(高度和速度)的多变量控制系统。该项目展示了从系统建模、控制器设计、仿真验证到结果分析的完整流程,为多变量控制系统的设计提供了有价值的参考。

MHD0815的博客 598

【ArcGIS Pro微课1000例】0067:ArcGIS Pro3.4.2学习版下载及安装教程

【ArcGIS Pro微课1000例】0067:ArcGIS Pro3.4.2学习版网盘下载及安装教程

智慧空间实验室 2389

【从零开始学习 UVM】1.1、UVM 概述 —— Preface

【从零开始学习 UVM】1.1、UVM 概述 —— Preface

努力,加油每一天鸭~ 826

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: 踩坑 | Win10+Anaconda3+Python3.7+Spyder4.0配置Pyspark
下一篇: 刷题 | SQL 刷题网站对比推荐
我是自愿学IE的
博客等级 码龄8年 2粉丝 6原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值