- 情感分析也叫观点挖掘,是基于人们对产品、服务、组织、个人、问题、事件、话题和属性等文本资料挖掘人们的观点、倾向、情绪、态度和评价的一种分析方法。
- 基于语料粒度的不同,可以将情感分析细分到文档级、语句级和 aspect level。
文档级的情感分析以整个文档为单位,但前提是文档需要有明确的态度,即观点要鲜明。
语句级的情感分析则是对文档内的语句单独进行情感分析。
aspect level 情感分析相较于文档级和语句级则更加细粒化,它的任务是提取和总结人们对某实体的观点以及实体(也被称为目标)的特征。例如一篇产品评论,aspect level 情感分析的目的是分别总结对产品不同方面的积极和消极观点,虽然对产品的总体情感可能是倾向积极的或消极的。 - kaggle 电影评论数据集为例,展示基于深度学习的情感分析过程
- 数据每一条记录是一个电影评论,1代表正面评价,0代表负面评价。本质上看,就是一个相对简单的本文二分类问题
- 原始评论文本的清洗
- 查看原始文本,发现原始的评论文本中有大量的HTML标记符号,所以我们使用 BeautifulSoup 的解析库对其进行清理
- 通过正则表达式清除掉一些标点等非字母字符
- 将评论文本中的大写字母都转为小写,并将文本转化为单词列表
- 文本中还包含了大量的停用词,我们可以使用nltk中的停用词库进行筛选
- 最后我们可以定义文本清洗函数来总结整个清洗过程
- 文本的标记化
- 经过清洗的数据还需要经序列和标记化处理才能够拿来建模处理。使用 keras 中的文本和序列预处理模块进行处理
- 然后使用pad_sequence方法将一维序列转化为二维序列:
- 构建深度学习模型
- 序列化和标记化处理完了之后就可以进行建模了
- 然后将标签进行分类化处理就可以开始模型训练了:
- 5轮之后的训练集准确率达到0.97,验证集相对较低,只有0.86,所以还存在一定的提升空间。关于基于深度学习的情感分析模型搭建过程就介绍到这,模型的提升和细化各位可自行尝试
from keras.layers import Dense, Input, LSTM, Embedding, Dropout, Activation
from keras.layers import Bidirectional, GlobalMaxPool1D
from keras.models import Modelfrom keras import initializers, regularizers, constraints, optimizers, layers
from keras.utils import to_categorical
inp = Input(shape=(maxlen, ))
embed_size = 128x = Embedding(max_features, embed_size)(inp)
x = LSTM(60, return_sequences=True, name='lstm_layer')(x)
x = GlobalMaxPool1D()(x)
x = Dropout(0.2)(x)
x = Dense(50, activation="relu")(x)
x = Dropout(0.2)(x)
x = Dense(1, activation="sigmoid")(x)
model = Model(inputs=inp, outputs=x)
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
.