From e61141e8921535138ce604e3a3bd8d8eb13eb0a4 Mon Sep 17 00:00:00 2001 From: codekansas Date: Fri, 6 May 2016 13:06:31 -0400 Subject: [PATCH] bidirectional part --- answer_to_question.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/answer_to_question.py b/answer_to_question.py index cfa1818..07e1216 100644 --- a/answer_to_question.py +++ b/answer_to_question.py @@ -3,7 +3,7 @@ import numpy as np import os from keras.engine import Input -from keras.layers import LSTM, RepeatVector, TimeDistributed, Dense, Activation +from keras.layers import LSTM, RepeatVector, TimeDistributed, Dense, Activation, Masking, merge from keras.models import Model # can remove this depending on ide... @@ -53,23 +53,29 @@ class InsuranceQA: def get_model(question_maxlen, answer_maxlen, vocab_len, n_hidden): answer = Input(shape=(answer_maxlen, vocab_len)) - # answer = Masking(mask_value=0.)(answer) + masked = Masking(mask_value=0.)(answer) # encoder rnn - encode_rnn = LSTM(n_hidden, return_sequences=True)(answer) - encode_rnn = LSTM(n_hidden, return_sequences=True)(encode_rnn) + encode_rnn = LSTM(n_hidden, return_sequences=True)(masked) encode_rnn = LSTM(n_hidden, return_sequences=False)(encode_rnn) + encode_brnn = LSTM(n_hidden, return_sequences=True, go_backwards=True)(masked) + encode_brnn = LSTM(n_hidden, return_sequences=False, go_backwards=True)(encode_brnn) + # repeat it maxlen times repeat_encoding = RepeatVector(question_maxlen)(encode_rnn) # decoder rnn decode_rnn = LSTM(n_hidden, return_sequences=True)(repeat_encoding) decode_rnn = LSTM(n_hidden, return_sequences=True)(decode_rnn) - decode_rnn = LSTM(n_hidden, return_sequences=True)(decode_rnn) + + decode_brnn = LSTM(n_hidden, return_sequences=True, go_backwards=True)(repeat_encoding) + decode_brnn = LSTM(n_hidden, return_sequences=True, go_backwards=True)(decode_brnn) + + merged_output = merge([decode_rnn, decode_brnn], mode='concat', concat_axis=-1) # output - dense = TimeDistributed(Dense(vocab_len))(decode_rnn) + dense = TimeDistributed(Dense(vocab_len))(merged_output) softmax = Activation('softmax')(dense) # compile the model