Машинный перевод с Keras
Thushan Ganegedara
Data Scientist and Author



Принимает на вход
Возвращает
Рекурсивно передаёт предсказанное слово и состояние обратно в модель



sos обозначает начало перевода (французского предложения).
sos как первое слово в декодер и продолжайте предсказыватьeos обозначает конец перевода.
eosВ качестве ограничения используйте максимальную длину, которую модель может предсказывать
Импорт слоёв и Model
# Import Keras layers
import tensorflow.keras.layers as layers
from tensorflow.keras.models import Model
Определение слоёв модели
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
encoder = Model(inputs=en_inputs, outputs=en_state)
Input декодераde_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])
l1w = l1.get_weights()l2 из wl2.set_weights(w)GRU, декодер GRU и декодер Denseen_gru_w = tr_en_gru.get_weights()
en_gru.set_weights(en_gru_w)
Что можно записать короче:
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 + ' '
Машинный перевод с Keras