from keras.models import Model
from keras import layers
from keras import Input
import numpy as np

text_vocabulary_size = 10000
question_vocabulary_size = 10000
answer_vocabulary_size = 500

text_input = Input(shape=(None, ), dtype='int32', name='text')
embedded_text = layers.Embedding(64, text_vocabulary_size)(text_input)
encoded_text = layers.LSTM(32)(embedded_text)
question_input = Input(shape=(None, ), dtype='int32', name='question')
embedded_question = layers.Embedding(32,
                                     question_vocabulary_size)(question_input)
encoded_question = layers.LSTM(16)(embedded_question)
concatenated = layers.concatenate([encoded_text, encoded_question], axis=-1)
answer = layers.Dense(
    answer_vocabulary_size, activation='softmax')(concatenated)
model = Model([text_input, question_input], answer)
model.compile(
    optimizer='rmsprop', loss='categorical_crossentropy', metrics=['acc'])
print(model.summary())

num_samples = 1000
max_length = 100
text = np.random.randint(
    1, text_vocabulary_size, size=(num_samples, max_length))
question = np.random.randint(
    1, question_vocabulary_size, size=(num_samples, max_length))
answers = np.random.randint(0, 1, size=(num_samples, answer_vocabulary_size))
model.fit([text, question], answers, epochs=10, batch_size=128)
model.fit({
    'text': text,
    'question': question
},
          answers,
          epochs=10,
          batch_size=128)
