Machine Translation met Keras
Thushan Ganegedara
Data Scientist and Author



Neemt als input
Produceert
Voer het voorspelde woord en de toestand recursief terug als inputs



sos markeert het begin van een vertaling (bijv. een Franse zin).
sos als eerste woord aan de decoder en blijf voorspelleneos markeert het einde van een vertaling.
eos voorspeltGebruik als veiligheidsmaatregel een maximale uitvoerlengte voor het model
Lagen en Model importeren
# Import Keras layers
import tensorflow.keras.layers as layers
from tensorflow.keras.models import Model
Modellagen definiëren
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)
Model-object definiëren
encoder = Model(inputs=en_inputs, outputs=en_state)
Input-lagen definiërende_inputs = layers.Input(shape=(1, fr_vocab))
de_state_in = layers.Input(shape=(hsize,))
layers van de decoder definiërende_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 definiërendecoder = Model(inputs=[de_inputs, de_state_in], outputs=[de_pred, de_state_out])
l1w = l1.get_weights()l2 in met wl2.set_weights(w)GRU, Decoder GRU en Decoder Denseen_gru_w = tr_en_gru.get_weights()
en_gru.set_weights(en_gru_w)
Dit kan ook zo:
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 met Keras