随着社交网络的兴起,更多人选择在网络上发表自己对影视作品的观点,这为影视投资人了解观众对电影的反馈提供了更方便的途径.例如,豆瓣影评中包含了海量用户或积极或消极的情感观点,而分析豆瓣影评的情感倾向能够辅助投资人进行决策,提升作品质量.大量数据分析必须借助计算机技术手段完成,其中情感分析是自然语言处理(natural language processing,NLP)的一个方向,常用来分析判断文本描述的情绪类型,因此也被称为情感倾向分析.为了提高影评情感分类的准确率,本文实现了Spatial Dropout-GRU和TextCNN模型用于情感分析,由其实验结果可得,在迭代5次的情况下Spatial Dropout-GRU模型情感分析的准确率达到了84%,TextCNN模型得到了82%.
2.数据集介绍
预训练词向量。中文维基百科词向量word2vec。
数据集
|
积极
|
消极
|
训练集
|
10000
|
9999
|
测试集
|
10000
|
9999
|
3.模型设计
2014年,Yoon Kim针对CNN的输入层做了一些变形,提出了文本分类模型textCNN。与传统图像的CNN网络相比, textCNN 在网络结构上没有任何变化(甚至更加简单了), 从图可以看出textCNN 其实只有一层卷积,一层max-pooling, 最后将输出外接softmax 来n分类。
开发环境:python3.6.5、tensorflow==1.12、keras==2.2.4、Numpy 1.13.1、jieba 0.39
Spatial Dropout-GRU模型如下:
代码实现:
model = Sequential()
model.add(embedding_layer)
model.add(SpatialDropout1D(0.4))
model.add(GRU(64, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(n_class, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
TextCNN模型结构如下:
4.实验结果对比
TextCNN模型:
Spatial Dropout-GRU模型:
自然语言处理包括自动问答、机器翻译、信息抽取等技术, 而情感分析是自然语言处理的一个方向. 自然语言处理可以从文本的不同层面进行, 包括字符级、词语级和句子级等. 词嵌入向量的提出使得词语可通过学习得到词的语义表达, 从而为基于积极或消极语义的情感分类提供更有效的方法. 本文工作实现了两个模型: Spatial Dropout-GRU模型TextCNN模型,并分别测试了其情感分类效果。这为影视投资人了解观众对电影的反馈提供了更方便的途径及能够辅助投资人进行决策,提升作品质量。
代码链接:(包含数据集4万条)
基于SpatialDropout-GRU和TextCNN的中文影评情感分析-深度学习文档类资源-CSDN下载
1.摘要随着社交网络的兴起,更多人选择在网络上发表自己对影视作品的观点,这为影视投资人了解观众对电影的反馈提供了更方便的途径.例如,豆瓣影评中包含了海量用户或积极或消极的情感观点,而分析豆瓣影评的情感倾向能够辅助投资人进行决策,提升作品质量.大量数据分析必须借助计算机技术手段完成,其中情感分析是自然语言处理(natural language processing,NLP)的一个方向,常用来分析判断文本描述的情绪类型,因此也被称为情感倾向分析.为了提高影评情感分类的准确率,本文实现了Spatial Dro
训练集:包含 2W 条左右
中文
电
影评
论,其中正负向评论各占 1/2。
验证集:包含 6K 条左右
中文
电
影评
论,其中正负向评论各占 1/2。
测试集:包含 360 条左右
中文
电
影评
论,其中正负向评论各占 1/2。
预训练词向量:
中文
维基百科词向量 word2vec。
首先,导入实验所需的库。
import g
长短时记忆网络(LSTM)是一种经典的循环神经网络,用于解决序列建模问题。然而,LSTM的记忆单元需要长期记忆,这在某些任务中可能会导致过度拟合或记忆问题。为了解决这个问题,Cho等人在2014年提出了门控循环单元(GRU)。
GRU的结构比LSTM更简单,只有两个门(更新门和重置门),可以学习相对较短的依赖关系。在某些情况下,GRU的性能甚至优于LSTM。在本文中,我们将介绍GRU的结构和优势,并使用Python代码实现
情感
分析
模型。
本文工作实现了两个模型:
Spatial
Dropout-GRU
模型
TextCNN
模型,并分别测试了其
情感
分类效果。
开发环境:python3.6.5、tensorflow==1.12、keras==2.2.4
1)训练集。包含2W条左右
中文
电
影评
论,其中正负向评论各1W条左右。
2)测试集。包含2w条左右
中文
电
影评
论,其中正负向评论各1W条左右。
import os
data_dir='D:\\jupyter_code\\jena_climate'
fname=os.path.join(data_dir,'jena_climate_2009_2016.csv')
f=open...
import numpy as np
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.layers import Dense, Input, LSTM, Embedding, Dropout, Activation, Conv1D, GRU, CuDNNGRU, CuDNNLSTM, BatchNormalization
from tensorflow.keras.layers import Bidirectional, GlobalMaxPool1D, MaxPooling1D, Add, Flatten
from tensorflow.keras.layers import GlobalAveragePooling1D, GlobalMaxPooling1D, concatenate,
Spatial
Dropout1D
from tensorflow.keras.models import Model, load_model
from tensorflow.keras import initializers, regularizers, constraints, optimizers, layers, callbacks
from tensorflow.keras import backend as K
from tensorflow.keras.engine import InputSpec, Layer
from tensorflow.keras.optimizers import Adam
# 读取数据
resumes = []
labels = []
with open("resumes.txt", "r") as f:
for line in f:
resumes.append(line.strip().split("\t")[0])
labels.append(int(line.strip().split("\t")[1]))
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(resumes, labels, test_size=0.2, random_state=42)
# 数据预处理
max_features = 20000
maxlen = 100
tokenizer = Tokenizer(num_words=max_features)
tokenizer.fit_on_texts(X_train)
X_train = tokenizer.texts_to_sequences(X_train)
X_test = tokenizer.texts_to_sequences(X_test)
x_train = pad_sequences(X_train, maxlen=maxlen)
x_test = pad_sequences(X_test, maxlen=maxlen)
# 构建模型
def build_model():
inp = Input(shape=(maxlen,))
x = Embedding(max_features, 128)(inp)
x =
Spatial
Dropout1D(0.2)(x)
x = Bidirectional(CuDNNLSTM(64, return_sequences=True))(x)
y = Bidirectional(CuDNNGRU(64, return_sequences=True))(x)
avg_pool1 = GlobalAveragePooling1D()(y)
max_pool1 = GlobalMaxPooling1D()(y)
conc = concatenate([avg_