一、传统机器学习与深度学习
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)
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
循环神经网络弥补卷积神经网络中卷积核大小固定,导致了卷积神经网络无法抽取到与当前词距离更长的词信息表达。经验表明,循环神经网络更适于自然语言处理问题,能够更好表达文本或语句上下文信息。
输入词向量的最后一维对应的输出直接作为预测分类的基准,这样设计的好处节省训练时间,同时也因为通过 LSTM 编码的最后一层的隐藏层输出已经携带了前后所有序列的信息表达,因此效果尚佳。
3、CRNN
CRNN 模型是基于 CNN 和 RNN 的拼接式神经网络,其中 CNN 主要用于文本特征抽取,RNN 主要用于后续基于全局序列的情感分类。
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 ),进而加快模型训练和收敛速度。
- 泛化能力方面,考虑训练样本的正负比例,及其样本的多样性以及正负样本间打乱的程度
四、个性化辅导
*如果需要辅导,请私聊
如果需要辅导,请私聊
如果需要辅导,请私聊
四、参考资料
- 《美团机器学习实践——评论挖掘》
- 《A C-LSTM Neural Network for Text Classification》
- 《Convolutional Neural Networks for Sentence Classification》