Source code for sentiment_classifier.nlp.models.deep_networks

""" Code for deep neural networks models.
"""

import os
import tensorflow as tf
from sentiment_classifier.nlp.models import Model
from sentiment_classifier.nlp.tokenizer import KerasTokenizer
from sentiment_classifier.nlp.utils import load_word_vectors


[docs]class BiLSTM(Model): def __init__(self): super(BiLSTM, self).__init__() self.tokenizer = KerasTokenizer( pad_max_len=512, lower=False )
[docs] def build_model(self, input_shape): word_vectors = load_word_vectors( filepath="data/wiki-news-300d-1M.vec", word_index=self.tokenizer.tokenizer.word_index, vector_size=300 ) word_vectors = load_word_vectors( filepath="./data/wiki-news-300d-1M.vec", word_index=self.tokenizer.tokenizer.word_index, vector_size=300 ) model = tf.keras.Sequential([ tf.keras.layers.Embedding( word_vectors.shape[0], word_vectors.shape[1], weights=[word_vectors], trainable=False ), tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(64)), tf.keras.layers.Dense(16, activation=tf.nn.relu), tf.keras.layers.Dense(1, activation=tf.nn.sigmoid) ]) return model
[docs] def train(self, reader, filepath): x_train, x_test, y_train, y_test = self._make_training_data(reader) self.model = self.build_model(input_shape=x_train.shape[1]) self.model.compile( loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"] ) callbacks_list = [ tf.keras.callbacks.TensorBoard( log_dir=os.path.join("logs", self.name) ), ] self.model.fit( x=x_train, y=y_train, validation_data=(x_test, y_test), epochs=5, callbacks=callbacks_list ) self.save(filepath)