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
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
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):
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(