print ("Method = CNN from the paper 'Convolutional Neural Networks for Sentence Classification'") np.random.seed(0) nb_filter = embeddings_dim model = Graph() model.add_input(name='input', input_shape=(max_sent_len,), dtype=int) model.add_node(Embedding(max_features, embeddings_dim, input_length=max_sent_len, mask_zero=False, weights=[embedding_weights] ), name='embedding', input='input') model.add_node(Dropout(0.25), name='dropout_embedding', input='embedding') for n_gram in [3, 5, 7]: model.add_node(Convolution1D(nb_filter=nb_filter, filter_length=n_gram, border_mode='valid', activation='relu', subsample_length=1, input_dim=embeddings_dim, input_length=max_sent_len), name='conv_' + str(n_gram), input='dropout_embedding') model.add_node(MaxPooling1D(pool_length=max_sent_len - n_gram + 1), name='maxpool_' + str(n_gram), input='conv_' + str(n_gram)) model.add_node(Flatten(), name='flat_' + str(n_gram), input='maxpool_' + str(n_gram)) model.add_node(Dropout(0.25), name='dropout', inputs=['flat_' + str(n) for n in [3, 5, 7]]) model.add_node(Dense(1, input_dim=nb_filter * len([3, 5, 7])), name='dense', input='dropout') model.add_node(Activation('sigmoid'), name='sigmoid', input='dense') model.add_output(name='output', input='sigmoid') if num_classes == 2: model.compile(loss={'output': 'binary_crossentropy'}, optimizer='adam') else: model.compile(loss={'output': 'categorical_crossentropy'}, optimizer='adam') model.fit({'input': train_sequences, 'output': train_labels}, batch_size=32, nb_epoch=30) results = np.array(model.predict({'input': test_sequences}, batch_size=32)['output']) if num_classes != 2: results = results.argmax(axis=-1) else: results = (results > 0.5).astype('int32') print ("Accuracy = " + repr( sklearn.metrics.accuracy_score( test_labels , results ) )) print (sklearn.metrics.classification_report( test_labels , results )) print ("Method = Bidirectional LSTM") np.random.seed(0) model = Graph() model.add_input(name='input', input_shape=(max_sent_len,), dtype=int) model.add_node(Embedding( max_features, embeddings_dim, input_length=max_sent_len, mask_zero=True, weights=[embedding_weights] ), name='embedding', input='input') model.add_node(LSTM(embeddings_dim, activation='sigmoid', inner_activation='hard_sigmoid', return_sequences=True), name='forward1', input='embedding')