基于深度学习的情感分析

一、传统机器学习与深度学习

1、传统机器学习方法

  • tf-idf
  • Topic Model(LDA)
  • SMT
  • ...

2、深度学习

  • CNN
    • TextCNN
    • FastText+TextCNN
    • CNN+RNN
    • ...
  • RNN
    • TextRNN
    • RNN+CNN
    • LSTM/GRU+RCNN
    • Seq2Seq+Attention
    • ...

二、模型(基于 Keras)

1、TextCNN

  • 句子 maxlen 的确定(一般选定为语料中最大长度或平均长度为佳)
  • 卷积核大小(2/3/4/5)


    基于深度学习的情感分析_第1张图片
    TextCNN 网络结构.png
def text_cnn(maxlen=15, max_features=10000, embed_size=300):

    # input layers
    comment_seq = Input(shape=[maxlen], name='x_seq')
    # Embeddings layers
    emb_comment = Embedding(max_features, embed_size)(comment_seq)
    # conv layers
    convs = []
    filter_sizes = [2, 3, 4, 5]
    for fsz in filter_sizes:
        l_conv = Conv1D(filters=100, kernel_size=fsz, activation='relu')(emb_comment)
        l_pool = MaxPooling1D(maxlen - fsz + 1)(l_conv)
        l_pool = Flatten()(l_pool)
        convs.append(l_pool)
    merge = concatenate(convs, axis=1)
    # out = Dropout(0.1)(merge)
    output = Dense(64, activation='relu')(merge)
    output = Dense(units=1, activation='sigmoid')(output)

    model = Model([comment_seq], output)
    model.compile(loss="binary_crossentropy", optimizer=optimizers.RMSprop(lr=1e-4), metrics=['acc'])
    return model

2、TextRNN

循环神经网络弥补卷积神经网络中卷积核大小固定,导致了卷积神经网络无法抽取到与当前词距离更长的词信息表达。经验表明,循环神经网络更适于自然语言处理问题,能够更好表达文本或语句上下文信息。

基于深度学习的情感分析_第2张图片
TextRNN 网络结构图.png

输入词向量的最后一维对应的输出直接作为预测分类的基准,这样设计的好处 节省训练时间,同时也因为通过 LSTM 编码的最后一层的隐藏层输出已经携带了前后所有序列的信息表达,因此效果尚佳。

3、CRNN

CRNN 模型是基于 CNN 和 RNN 的拼接式神经网络,其中 CNN 主要用于文本特征抽取,RNN 主要用于后续基于全局序列的情感分类。


基于深度学习的情感分析_第3张图片
CRNN 结构图.png
def text_c_lstm(num_labels=1,maxlen=15, max_features=10000, embed_size=300):
    model=Sequential()
    model.add(Embedding(max_features, embed_size, input_length=maxlen))
    model.add(Conv1D(256, 3, padding='same', strides=1))
    model.add(Activation('relu'))
    model.add(MaxPooling1D(pool_size=2))
    model.add(GRU(32, dropout=0.2, recurrent_dropout=0.1, return_sequences=True))
    model.add(GRU(32, dropout=0.2, recurrent_dropout=0.1))
    model.add(Dense(num_labels,activation='sigmoid'))
    model.compile(loss="binary_crossentropy", optimizer=optimizers.RMSprop(lr=1e-4), metrics=['acc'])
    return model

CRNN 结构与编码器-解码器(Encoder-Decoder)结构非常相似,用 CNN 的卷积 + relu + 池化操作作为编码器,其输出作为解码器 LSTM 的输入,最终仍然经过 Softmax 得出最终概率值。

三、模型优化与思考

  • 训练时间方面,标准化基于正态分布的平移和拉伸,其变换的目的在于把每个值向后续要进行的非线性变化区域靠近,从而使所有梯度值的计算不至于停留在饱和区域(梯度值接近于 0 ),进而加快模型训练和收敛速度。
  • 泛化能力方面,考虑训练样本的正负比例,及其样本的多样性以及正负样本间打乱的程度

四、个性化辅导

如果需要辅导,请加 QQ: 690120556
如果需要辅导,请加 QQ: 690120556
如果需要辅导,请加 QQ: 690120556

四、参考资料

  • 《美团机器学习实践——评论挖掘》
  • 《A C-LSTM Neural Network for Text Classification》
  • 《Convolutional Neural Networks for Sentence Classification》

你可能感兴趣的:(基于深度学习的情感分析)