Esempio n. 1
0
def main():
    X, y, words, tags = load_dataset(DATA_PATH)
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15)

    inp = Input(shape=(MAX_LEN, ))
    model = Embedding(input_dim=len(words) + 2,
                      output_dim=EMBEDDING_SIZE,
                      input_length=MAX_LEN,
                      mask_zero=True)(inp)
    model = Bidirectional(
        LSTM(units=50, return_sequences=True, recurrent_dropout=0.1))(model)
    model = TimeDistributed(Dense(50, activation="relu"))(model)
    crf = CRF(len(tags) + 1)  # CRF layer
    out = crf(model)  # output

    model = Model(inp, out)
    model.compile(optimizer="rmsprop", loss=crf.loss, metrics=[crf.accuracy])

    model.summary()

    checkpointer = ModelCheckpoint(filepath='model.h5',
                                   verbose=0,
                                   mode='auto',
                                   save_best_only=True,
                                   monitor='val_loss')

    history = model.fit(X_train,
                        np.array(y_train),
                        batch_size=BATCH_SIZE,
                        epochs=EPOCHS,
                        validation_split=0.1,
                        callbacks=[checkpointer])
import tensorflow.keras.layers as layers
print(X_test[0].shape)
input = layers.Input(shape=(140, ))
model = Embedding(input_dim=n_words, output_dim=140, input_length=140)(input)
model = Dropout(0.1)(model)
model = Bidirectional(
    LSTM(units=100, return_sequences=True, recurrent_dropout=0.1))(model)
out = TimeDistributed(Dense(n_tags, activation="softmax"))(
    model)  # softmax output layer

model = Model(input, out)
model.compile(optimizer="adam",
              loss="categorical_crossentropy",
              metrics=["accuracy"])
#p = model.predict(np.array([X_test[0]]))
history = model.fit(X_train,
                    np.array(y_train),
                    batch_size=32,
                    epochs=1,
                    validation_split=0.2,
                    verbose=1)

i = 0
p = model.predict(np.array([new_sent]))
p = np.argmax(p, axis=-1)
print("{:14} ({:5}): {}".format("Word", "True", "Pred"))
for w, pred in zip(new_sent, p[0]):
    print("{:14}: {}".format(words[w], tags[pred]))

# https://www.kaggle.com/navya098/bi-lstm-for-ner
    def fit_predict(self, testIds):
        print("START PREPROCESSING")
        vocabs = PreProcessor.getVocabs(self.data)

        train_data = dict()
        test_data = dict()

        for k, v in self.data.items():
            if k in testIds:
                test_data[k] = v
            else:
                train_data[k] = v

        train_data = PreProcessor.preprocess(train_data, self.extraction_of)
        test_data = PreProcessor.preprocess(test_data, self.extraction_of)

        words = list(set(vocabs))
        words.append("ENDPAD")

        n_words = len(words)

        tags = ['O', self.extraction_of]
        n_tags = len(tags)

        word2idx = {w: i for i, w in enumerate(words)}
        tag2idx = {t: i for i, t in enumerate(tags)}

        getter_train = SentenceGetter(train_data)
        sentences_train = getter_train.sentences

        getter_test = SentenceGetter(test_data)
        sentences_test = getter_test.sentences

        X_train = [[word2idx[w[0]] for w in s] for s in sentences_train]
        X_train = pad_sequences(maxlen=140,
                                sequences=X_train,
                                padding="post",
                                value=n_words - 1)
        X_test = [[word2idx[w[0]] for w in s] for s in sentences_test]
        X_test = pad_sequences(maxlen=140,
                               sequences=X_test,
                               padding="post",
                               value=n_words - 1)

        y_train = [[tag2idx[w[1]] for w in s] for s in sentences_train]
        y_train = pad_sequences(maxlen=140,
                                sequences=y_train,
                                padding="post",
                                value=tag2idx["O"])
        y_train = [to_categorical(i, num_classes=n_tags) for i in y_train]

        y_test = [[tag2idx[w[1]] for w in s] for s in sentences_test]
        y_test = pad_sequences(maxlen=140,
                               sequences=y_test,
                               padding="post",
                               value=tag2idx["O"])
        y_test = [to_categorical(i, num_classes=n_tags) for i in y_test]

        input = Input(shape=(140, ))
        model = Embedding(input_dim=n_words, output_dim=50,
                          input_length=140)(input)
        model = Dropout(0.1)(model)
        model = Bidirectional(
            LSTM(units=100, return_sequences=True,
                 recurrent_dropout=0.1))(model)
        out = TimeDistributed(Dense(n_tags, activation="softmax"))(model)

        model = Model(input, out)

        model.compile(optimizer="adam",
                      loss="categorical_crossentropy",
                      metrics=["accuracy"])

        history = model.fit(X_train,
                            np.array(y_train),
                            batch_size=32,
                            epochs=3,
                            validation_split=0.2,
                            verbose=1)

        y_true = []
        y_pred = []

        for i in tqdm(range(0, len(X_test))):
            p = model.predict(np.array(X_test[i]))
            p = np.argmax(p, axis=-1)

            t = y_test[i]

            for wordIdx, trueTagIdx, predTagIdx in zip(X_test[i], t, p[0]):
                tag_true = tags[np.argmax(trueTagIdx, axis=-1)]
                tag_pred = tags[predTagIdx]

                y_true.append(tag_true)
                y_pred.append(tag_pred)

        return y_true, y_pred
Esempio n. 4
0
    LSTM(units=128, return_sequences=True, recurrent_dropout=0.1))(model)
out = TimeDistributed(Dense(units=len(tags), activation='softmax'))(model)
model = Model(input_data, out)
model.summary()

# In[32]:

model.compile(optimizer='adam',
              metrics=['accuracy'],
              loss='sparse_categorical_crossentropy')

# In[33]:

model.fit(x=X_train,
          y=Y_train,
          batch_size=32,
          validation_data=(X_test, Y_test),
          epochs=3,
          verbose=1)

# In[34]:

model.save('./')

# In[77]:

model.evaluate(X_test, Y_test)

# In[124]:


# Preprocessing User Input
Esempio n. 5
0
model = Embedding(input_dim=n_words, output_dim=140, input_length=140)(input)
model = Dropout(0.1)(model)
model = Bidirectional(
    LSTM(units=100, return_sequences=True, recurrent_dropout=0.1))(model)
out = TimeDistributed(Dense(n_tags, activation="softmax"))(
    model)  # softmax output layer
model = Model(input, out)
model.compile(optimizer="adam",
              loss="categorical_crossentropy",
              metrics=["accuracy"])

# In[28]:

history = model.fit(train_padded_docs,
                    np.array(y_train),
                    epochs=1,
                    verbose=1,
                    batch_size=32,
                    validation_data=(padded_val_doc, np.array(y_val)))

# In[30]:

label_list = list(set(data["tag"].values))
[label_list[np.argmax(i)] for i in model.predict(padded_test_doc[5])]

# In[53]:

i = 5
p = [label_list[np.argmax(i)] for i in model.predict(padded_test_doc[i])]
p_real = [label_list[np.argmax(x)] for x in y_test[i]]
print("{:14}:{:5}:{}".format("Word", "True", "Pred"))
for w, y, pred in zip(X_test[i], p_real, p):
Esempio n. 6
0
    monitor="val_accuracy",
    min_delta=0,
    patience=1,
    verbose=0,
    mode="max",
    baseline=None,
    restore_best_weights=False,
)

callbacks = [PlotLossesCallback(), early_stopping]

history = model.fit(
    x=x_train,
    y=y_train,
    validation_data=(x_test, y_test),
    batch_size=batch_size,
    epochs=epochs,
    callbacks=callbacks,
    verbose=1,
)

# + colab={"base_uri": "https://localhost:8080/"} id="6euqX7UHplG7" outputId="f3fe463f-b579-408f-d979-8194bc0bdd94"
model.evaluate(x_test, y_test)

# + colab={"base_uri": "https://localhost:8080/"} id="iwe07iACYqnf" outputId="861960ce-24e4-40d4-ad97-d10063770d35"
MODEL_DIR = tempfile.gettempdir()
version = 1
export_path = os.path.join(MODEL_DIR, str(version))
print("export_path = {}\n".format(export_path))

tf.keras.models.save_model(