Exemplo n.º 1
0
def test_semantic_model(weights_path, file_path, transfer=False):
    _, _, _, _, test_X, test_y, embedding_matrix = load_data()
    embedding_matrix = normalize(embedding_matrix,
                                 axis=1,
                                 norm='l2',
                                 copy=False)
    shape = test_X[0].shape

    if transfer:
        model = cnn_bidirectional_lstm_model(13, shape, embedding_matrix, 150)
        model.layers.pop()
        model.add(kl.Dense(test_y.shape[1], activation='sigmoid'))
        model.load_weights(weights_path)
    else:
        model = cnn_bidirectional_lstm_model(test_y.shape[1], shape,
                                             embedding_matrix, 150)
        model.load_weights(weights_path)
    opt = k.optimizers.Adam(lr=0.001, amsgrad=True)
    model.compile(optimizer=opt, loss='binary_crossentropy')

    preds = model.predict(test_X, verbose=True)
    preds[preds >= 0.4] = 1
    preds[preds < 0.4] = 0
    score = [
        accuracy_score(test_y, preds),
        precision_score(test_y, preds, average='micro'),
        recall_score(test_y, preds, average='micro'),
        f1_score(test_y, preds, average='micro'),
        precision_score(test_y, preds, average='macro'),
        recall_score(test_y, preds, average='macro'),
        f1_score(test_y, preds, average='macro')
    ]
    print(score)
    np.savetxt(file_path, np.array(score))
Exemplo n.º 2
0
def train_semantic_sentiment_merged_model():
    model_filepath = 'models/multi_emotion_sentiment_semantic_merged_model-{epoch:02d}-{val_loss:.2f}.h5'
    logs_filepath = 'logs/multi_emotion_sentiment_semantic_merged_model.log'

    train_X, train_y, val_X, val_y, _, _, embedding_matrix = load_data()
    train_X2, val_X2, _, lexicon_matrix = load_sentiment_data()
    train_X = np.vstack((train_X, val_X))
    train_X2 = np.vstack((train_X2, val_X2))
    train_y = np.vstack((train_y, val_y))
    embedding_matrix = normalize(embedding_matrix,
                                 axis=1,
                                 norm='l2',
                                 copy=False)
    shape1 = train_X[0].shape
    shape2 = train_X2[0].shape

    model1 = cnn_bidirectional_lstm_model(train_y.shape[1], shape1,
                                          embedding_matrix, 150)
    model1.load_weights('models/multi_emotion_semantic_model-w2v-emoji.h5')
    model1.pop()
    model2 = cnn_bidirectional_lstm_model(train_y.shape[1], shape2,
                                          lexicon_matrix, 150)
    model2.load_weights('models/multi_emotion_semantic_lexicon_model.h5')
    model2.pop()

    merged_out = kl.Add()([model1.output, model2.output])
    merged_out = kl.Dense(128, activation='relu')(merged_out)
    merged_out = kl.Dropout(0.1)(merged_out)
    merged_out = kl.Dense(train_y.shape[1], activation='sigmoid')(merged_out)
    model = k.Model(inputs=[model1.input, model2.input], outputs=[merged_out])

    opt = k.optimizers.Adam(lr=0.001, amsgrad=True)
    model.compile(optimizer=opt,
                  loss='binary_crossentropy',
                  metrics=['accuracy'])

    # checkpoint
    checkpoint = k.callbacks.ModelCheckpoint(model_filepath,
                                             monitor='val_loss',
                                             verbose=1,
                                             save_best_only=True,
                                             save_weights_only=True,
                                             mode='min')
    csv_logger = k.callbacks.CSVLogger(logs_filepath)
    model.fit([train_X, train_X2],
              train_y,
              epochs=200,
              batch_size=1000,
              shuffle=True,
              callbacks=[checkpoint, csv_logger],
              validation_split=0.1)
Exemplo n.º 3
0
def train_semantic_lexicon_model():
    model_filepath = 'models/multi_emotion_semantic_lexicon_model-{epoch:02d}-{val_loss:.2f}.h5'
    logs_filepath = 'logs/multi_emotion_semantic_lexicon_model.log'

    train_X, train_y, val_X, val_y, _, _, _ = load_data()
    train_X, val_X, _, lexicon_matrix = load_sentiment_data()
    train_X = np.vstack((train_X, val_X))
    train_y = np.vstack((train_y, val_y))
    shape = train_X[0].shape

    model = cnn_bidirectional_lstm_model(train_y.shape[1], shape,
                                         lexicon_matrix, 150)
    opt = k.optimizers.Adam(lr=0.001, amsgrad=True)
    model.compile(optimizer=opt,
                  loss='binary_crossentropy',
                  metrics=['accuracy'])

    checkpoint = k.callbacks.ModelCheckpoint(model_filepath,
                                             monitor='val_loss',
                                             verbose=1,
                                             save_best_only=True,
                                             save_weights_only=True,
                                             mode='min')
    csv_logger = k.callbacks.CSVLogger(logs_filepath)
    model.fit(train_X,
              train_y,
              epochs=200,
              batch_size=1000,
              shuffle=True,
              callbacks=[checkpoint, csv_logger],
              validation_split=0.1)
Exemplo n.º 4
0
def test_semantic_sentiment_merged_model(weights_path, file_name):
    _, _, _, _, test_X, test_y, embedding_matrix = load_data()
    embedding_matrix = normalize(embedding_matrix,
                                 axis=1,
                                 norm='l2',
                                 copy=False)
    shape1 = test_X[0].shape

    _, _, test_X2, lexicon_matrix = load_sentiment_data()
    shape2 = test_X2[0].shape

    model1 = cnn_bidirectional_lstm_model(test_y.shape[1], shape1,
                                          embedding_matrix, 150)
    model1.pop()
    model2 = cnn_bidirectional_lstm_model(test_y.shape[1], shape2,
                                          lexicon_matrix, 150)
    model2.pop()

    merged_out = kl.Add()([model1.output, model2.output])
    merged_out = kl.Dense(128, activation='relu')(merged_out)
    merged_out = kl.Dropout(0.1)(merged_out)
    merged_out = kl.Dense(test_y.shape[1], activation='sigmoid')(merged_out)
    model = k.Model(inputs=[model1.input, model2.input], outputs=[merged_out])

    opt = k.optimizers.Adam(lr=0.001, amsgrad=True)
    model.compile(optimizer=opt, loss='binary_crossentropy')

    model.load_weights(weights_path)

    preds = model.predict([test_X, test_X2], verbose=True)
    preds[preds >= 0.4] = 1
    preds[preds < 0.4] = 0
    score = [
        accuracy_score(test_y, preds),
        precision_score(test_y, preds, average='micro'),
        recall_score(test_y, preds, average='micro'),
        f1_score(test_y, preds, average='micro'),
        precision_score(test_y, preds, average='macro'),
        recall_score(test_y, preds, average='macro'),
        f1_score(test_y, preds, average='macro')
    ]
    print(score)
    np.savetxt(file_name, np.array(score))
Exemplo n.º 5
0
def transfer_learning_semantic_model():
    model_filepath = 'models/multi_emotion_semantic_model_transfer-{epoch:02d}-{val_loss:.2f}.h5'
    logs_filepath = 'logs/multi_emotion_semantic_model_transfer.log'
    model_weights = 'models/emotion_bi_lstm_semantic_model.h5'
    train_X, train_y, val_X, val_y, _, _, embedding_matrix = load_data()
    train_X = np.vstack((train_X, val_X))
    train_y = np.vstack((train_y, val_y))
    embedding_matrix = normalize(embedding_matrix,
                                 axis=1,
                                 norm='l2',
                                 copy=False)
    shape = train_X[0].shape

    model = cnn_bidirectional_lstm_model(13, shape, embedding_matrix, 150)
    model.load_weights(model_weights)
    model.layers.pop()
    for layer in model.layers:
        layer.trainable = False
    model.add(kl.Dense(train_y.shape[1], activation='sigmoid'))

    opt = k.optimizers.Adam(lr=0.01, amsgrad=True)
    model.compile(optimizer=opt,
                  loss='binary_crossentropy',
                  metrics=['accuracy'])

    checkpoint = k.callbacks.ModelCheckpoint(model_filepath,
                                             monitor='val_loss',
                                             verbose=1,
                                             save_best_only=True,
                                             save_weights_only=True,
                                             mode='min')
    csv_logger = k.callbacks.CSVLogger(logs_filepath)
    model.fit(train_X,
              train_y,
              epochs=250,
              batch_size=500,
              shuffle=True,
              callbacks=[checkpoint, csv_logger],
              validation_split=0.1)