• 情感分析也叫观点挖掘,是基于人们对产品、服务、组织、个人、问题、事件、话题和属性等文本资料挖掘人们的观点、倾向、情绪、态度和评价的一种分析方法。
  • 基于语料粒度的不同,可以将情感分析细分到文档级、语句级和 aspect level。
    文档级的情感分析以整个文档为单位,但前提是文档需要有明确的态度,即观点要鲜明。
    语句级的情感分析则是对文档内的语句单独进行情感分析。
    aspect level 情感分析相较于文档级和语句级则更加细粒化,它的任务是提取和总结人们对某实体的观点以及实体(也被称为目标)的特征。例如一篇产品评论,aspect level 情感分析的目的是分别总结对产品不同方面的积极和消极观点,虽然对产品的总体情感可能是倾向积极的或消极的。
  • kaggle 电影评论数据集为例,展示基于深度学习的情感分析过程
  • 数据每一条记录是一个电影评论,1代表正面评价,0代表负面评价。本质上看,就是一个相对简单的本文二分类问题
  • 原始评论文本的清洗
  1. 查看原始文本,发现原始的评论文本中有大量的HTML标记符号,所以我们使用 BeautifulSoup 的解析库对其进行清理
  2. 通过正则表达式清除掉一些标点等非字母字符
  3. 将评论文本中的大写字母都转为小写,并将文本转化为单词列表
  4. 文本中还包含了大量的停用词,我们可以使用nltk中的停用词库进行筛选
  5. 最后我们可以定义文本清洗函数来总结整个清洗过程
  • 文本的标记化
  1. 经过清洗的数据还需要经序列和标记化处理才能够拿来建模处理。使用 keras 中的文本和序列预处理模块进行处理
  2. 然后使用pad_sequence方法将一维序列转化为二维序列:
  • 构建深度学习模型
  1. 序列化和标记化处理完了之后就可以进行建模了
  2. 然后将标签进行分类化处理就可以开始模型训练了:
  3. 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'])

.