NLP实战之keras+LSTM进行京东评论情感分析python

本文介绍了如何使用深度学习中的LSTM模型进行文本情感分析,特别是针对京东评论数据集的情感分类。通过数据预处理、模型构建、训练和测试,展示了情感分析的流程,最终在测试集上达到了0.9189的准确率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

情感分析

文本情感分析(Sentiment Analysis)是自然语言处理(NLP)中常见的也是很重要的一环,又称意见挖掘、倾向性分析等。它是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程。它包括情感分类(情感倾向分析)、情感检索、情感抽取等。
我们今天只来练一练情感分类。所谓情感分类,指的是对文本进行褒义、贬义、中性的判断。在大多应用场景下,只分为两类。例如对于“好评”和“差评”这两个词,就属于不同的情感倾向。与文本分类不同的是,情感分类不基于内容本身,而是基于文本持有的情感态度。
那么基于机器学习或是深度学习的情感分类方法的主要流程包括:数据处理——提取文本情感特征——构建分类器分类。下面我们将详细介绍如何使用深度学习模型中的LSTM模型来实现文本的情感分类。不想看我啰嗦的之间点这里下载数据和全部代码哦!

预分析数据

我们用到的语料是京东评论数据集,这里是数据啦~ 提取码:iu43。
首先我们来看一看数据,好评和差评的数据分别存储在两个Excel里,样式如下图:
在这里插入图片描述

其中好评样本有10677条,差评有10428条,样本类别算均衡。我们接下来看看语句长度的分布情况:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager

# 设置matplotlib绘图时的字体
my_font = font_manager.FontProperties(fname="/Library/Fonts/Songti.ttc")

# 读取数据
neg=pd.read_excel('D:/S/Learn/NLP/Jingdong/neg.xls',header=None,index=None)
pos=pd.read_excel('D:/S/Learn/NLP/Jingdong/pos.xls',header=None,index=None)
df=np.concatenate((pos[0], neg[0]))

#%%句子长度分布直方图
Num_len=[len(text) for text in df]
bins_interval=10#区间长度
bins=range(min(Num_len),max(Num_len)+bins_interval-1,bins_interval)#分组
plt.xlim(min(Num_len), max(Num_len))
plt.title("Probability-distribution")
plt.xlabel('Interval')
#plt.ylabel('Probability')
# 频率分布normed=True,频次分布normed=False
#prob,left,rectangle = plt.hist(x=Num_len, bins=bins, normed=True, histtype='bar', color=['r'])#分布直方图
plt.ylabel('Cumulative distribution')
prob,left,rectangle = plt.hist(x=Num_len, bins=bins,normed=True,cumulative=True, histtype='step', color=['r'])#累计分布图
plt.show()

分别得到预料中句子长度的分布直方图和累计分布图:
在这里插入图片描述

在这里插入图片描述
因为LSTM接受的句子长度或者叫序列长度都是固定的,所以在后面数据处理中我们需要将句子裁剪出一样的长度,我们根据语料的累积分布情况求样本中90%概率的句子长度作为裁剪后句子的统一长度。

#%%求分位点
import math
def quantile_p(data, p):
    data.sort()
    pos = (len(data) + 1)*p
    #pos = 1 + (len(data)-1)*p
    pos_integer = int(math.modf(pos)[1])
    pos_decimal = pos - pos_integer
    Q = data[pos_integer - 1] + (data[pos_integer] - data[pos_integer - 1])*pos_decim
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值