Machine Translation with Keras
Thushan Ganegedara
Data Scientist and Author



Takes in
Produces
Recursively feed the predicted word and the state back to the model as inputs



sos marks beginning of a translation (i.e. a French sentence).
sos as the first word to the decoder and keep predictingeos marks the end of a translation.
eosAs a safety measure use a maximum length the model can predict for
Importing layers and Model
# Import Keras layers
import tensorflow.keras.layers as layers
from tensorflow.keras.models import Model
Defining model layers
en_inputs = layers.Input(shape=(en_len,en_vocab))
en_gru = layers.GRU(hsize, return_state=True)
en_out, en_state = en_gru(en_inputs)
Defining Model object
encoder = Model(inputs=en_inputs, outputs=en_state)
Input layersde_inputs = layers.Input(shape=(1, fr_vocab))
de_state_in = layers.Input(shape=(hsize,))
layersde_gru = layers.GRU(hsize, return_state=True) de_out, de_state_out = de_gru(de_inputs, initial_state=de_state_in)de_dense = layers.Dense(fr_vocab, activation='softmax') de_pred = de_dense(de_out)
Modeldecoder = Model(inputs=[de_inputs, de_state_in], outputs=[de_pred, de_state_out])
l1w = l1.get_weights()l2 with wl2.set_weights(w)GRU, Decoder GRU and Decoder Denseen_gru_w = tr_en_gru.get_weights()
en_gru.set_weights(en_gru_w)
Which can also be written as,
en_gru.set_weights(tr_en_gru.get_weights())
en_sent = ['the united states is sometimes chilly during
december , but it is sometimes freezing in june .']
en_seq = sents2seqs('source', en_st, onehot=True, reverse=True)
de_s_t = encoder.predict(en_seq)
de_seq = word2onehot(fr_tok, 'sos', fr_vocab)
fr_sent = ''for _ in range(fr_len): de_prob, de_s_t = decoder.predict([de_seq,de_s_t])de_w = probs2word(de_prob, fr_tok)de_seq = word2onehot(fr_tok, de_w, fr_vocab)if de_w == 'eos': break fr_sent += de_w + ' '
Machine Translation with Keras