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.
eos
As 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,))
layers
de_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)
Model
decoder = Model(inputs=[de_inputs, de_state_in], outputs=[de_pred, de_state_out])
l1
w = l1.get_weights()
l2
with w
l2.set_weights(w)
GRU
, Decoder GRU
and Decoder Dense
en_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