def create_word_rnn_model(self, emb_dim, emb_path, vocab_word, vocab_word_size, word_maxlen): from keras.layers import SimpleRNN logger.info('Building word SimpleRNN model') input_word = Input(shape=(word_maxlen, ), name='input_word') word_emb = Embedding( vocab_word_size, emb_dim, mask_zero=True, name='word_emb')(input_word) rnn = SimpleRNN( 300, return_sequences=True, dropout=self.dropout, recurrent_dropout=self.recurrent_dropout)(word_emb) dropped = Dropout(0.5)(rnn) mot = MeanOverTime(mask_zero=True)(dropped) densed = Dense(self.num_outputs, name='dense')(mot) output = Activation('sigmoid')(densed) model = Model(inputs=input_word, outputs=output) model.get_layer('dense').bias.set_value(self.bias) if emb_path: from emb_reader import EmbReader as EmbReader logger.info('Initializing lookup table') emb_reader = EmbReader(emb_path, emb_dim=emb_dim) model.get_layer('word_emb').embeddings.set_value( emb_reader.get_emb_matrix_given_vocab( vocab_word, model.get_layer('word_emb').embeddings.get_value())) logger.info(' Done') return model
def create_word_cnn_model(self, emb_dim, emb_path, vocab_word, vocab_word_size, word_maxlen): from aes.layers import Conv1DMask logger.info('Building word CNN model') input_word = Input(shape=(word_maxlen, ), name='input_word') word_emb = Embedding( vocab_word_size, emb_dim, mask_zero=True, name='word_emb')(input_word) cnn = Conv1DMask( filters=emb_dim, kernel_size=3, padding='same')(word_emb) dropped = Dropout(0.5)(cnn) mot = MeanOverTime(mask_zero=True)(dropped) densed = Dense(self.num_outputs, name='dense')(mot) output = Activation('sigmoid')(densed) model = Model(inputs=input_word, outputs=output) model.get_layer('dense').bias.set_value(self.bias) if emb_path: from emb_reader import EmbReader as EmbReader logger.info('Initializing lookup table') emb_reader = EmbReader(emb_path, emb_dim=emb_dim) model.get_layer('word_emb').embeddings.set_value( emb_reader.get_emb_matrix_given_vocab( vocab_word, model.get_layer('word_emb').embeddings.get_value())) logger.info(' Done') return model
def create_char_cnn_model(self, emb_dim, word_maxlen, vocab_char_size, char_maxlen): from aes.layers import Conv1DMask logger.info('Building character CNN model') input_char = Input(shape=(char_maxlen, ), name='input_char') char_emb = Embedding( vocab_char_size, emb_dim, mask_zero=True)(input_char) cnn = Conv1DMask( filters=emb_dim, kernel_size=3, padding='same')(char_emb) dropped = Dropout(0.5)(cnn) mot = MeanOverTime(mask_zero=True)(dropped) densed = Dense(self.num_outputs, name='dense')(mot) output = Activation('sigmoid')(densed) model = Model(inputs=input_char, outputs=output) model.get_layer('dense').bias.set_value(self.bias) logger.info(' Done') return model
def create_char_rnn_model(self, emb_dim, word_maxlen, vocab_char_size, char_maxlen): from keras.layers import SimpleRNN logger.info('Building character RNN model') input_char = Input(shape=(char_maxlen, ), name='input_char') char_emb = Embedding( vocab_char_size, emb_dim, mask_zero=True)(input_char) rnn = SimpleRNN( 300, return_sequences=True, dropout=self.dropout, recurrent_dropout=self.recurrent_dropout)(char_emb) dropped = Dropout(0.5)(rnn) mot = MeanOverTime(mask_zero=True)(dropped) densed = Dense(self.num_outputs, name='dense')(mot) output = Activation('sigmoid')(densed) model = Model(inputs=input_char, outputs=output) model.get_layer('dense').bias.set_value(self.bias) logger.info(' Done') return model
def create_gate_positional_model(self, char_cnn_kernel, cnn_kernel, emb_dim, emb_path, vocab_word, vocab_word_size, word_maxlen, vocab_char_size, char_maxlen): from aes.layers import Conv1DMask, GatePositional, MaxPooling1DMask logger.info('Building gate positional model') input_char = Input(shape=(char_maxlen, ), name='input_char') char_emb = Embedding( vocab_char_size, emb_dim, mask_zero=True)(input_char) char_cnn = Conv1DMask( filters=emb_dim, kernel_size=3, padding='same')(char_emb) char_input = MaxPooling1DMask( pool_size=char_maxlen / word_maxlen, padding='same')(char_cnn) input_word = Input(shape=(word_maxlen, ), name='input_word') word_input = Embedding( vocab_word_size, emb_dim, mask_zero=True, name='word_emb')(input_word) gate = GatePositional()([char_input, word_input]) final_input = Dense(50)(gate) cnn = Conv1DMask( filters=emb_dim, kernel_size=3, padding='same')(final_input) dropped = Dropout(0.5)(cnn) mot = MeanOverTime(mask_zero=True)(dropped) densed = Dense(self.num_outputs, name='dense')(mot) output = Activation('sigmoid')(densed) model = Model(inputs=[input_char, input_word], outputs=output) model.get_layer('dense').bias.set_value(self.bias) if emb_path: from emb_reader import EmbReader as EmbReader logger.info('Initializing lookup table') emb_reader = EmbReader(emb_path, emb_dim=emb_dim) model.get_layer('word_emb').embeddings.set_value( emb_reader.get_emb_matrix_given_vocab( vocab_word, model.get_layer('word_emb').embeddings.get_value())) logger.info(' Done') return model