Generarea traducerilor
Vei genera acum traduceri în franceză folosind un model de inferență antrenat cu Teacher Forcing.
Acest model (nmt_tf) a fost antrenat timp de 50 de epoci pe 100.000 de propoziții și a obținut o acuratețe de aproximativ 98% pe un set de validare de peste 35.000 de exemple. Este posibil ca exercițiul să dureze mai mult la inițializare, deoarece modelul antrenat trebuie să fie încărcat. Ai la dispoziție funcția sents2seqs(). De asemenea, îți sunt oferite două funcții noi:
word2onehot(tokenizer, word, vocab_size), care acceptă:
- tokenizer - un obiect
Tokenizerdin Keras - word - un șir de caractere reprezentând un cuvânt din vocabular (de ex.
'apple') - vocab_size - dimensiunea vocabularului
probs2word(probs, tok), care acceptă:
- probs - o ieșire din model cu forma
[1,<French Vocab Size>] - tok - un obiect
Tokenizerdin Keras
Poți consulta codul sursă al acestor funcții tastând print(inspect.getsource(word2onehot)) și print(inspect.getsource(probs2word)) în consolă.
Acest exercițiu face parte din cursul
Traducere automată cu Keras
Instrucțiuni pentru exercițiu
- Calculează starea inițială a decoderului (
de_s_t) cu ajutorul encoderului. - Calculează ieșirea și noua stare a decoderului folosind predicția anterioară (ieșirea) și starea anterioară ca intrări. Nu uita să generezi recursiv noua stare.
- Obține șirul de caractere al cuvântului din ieșirea de probabilități folosind funcția
probs2word(). - Convertește șirul de caractere al cuvântului într-o secvență one-hot folosind funcția
word2onehot().
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
en_sent = ['the united states is sometimes chilly during december , but it is sometimes freezing in june .']
print('English: {}'.format(en_sent))
en_seq = sents2seqs('source', en_sent, onehot=True, reverse=True)
# Predict the initial decoder state with the encoder
de_s_t = ____.predict(____)
de_seq = word2onehot(fr_tok, 'sos', fr_vocab)
fr_sent = ''
for i in range(fr_len):
# Predict from the decoder and recursively assign the new state to de_s_t
de_prob, ____ = ____.predict([____,____])
# Get the word from the probability output using probs2word
de_w = probs2word(____, fr_tok)
# Convert the word to a onehot sequence using word2onehot
de_seq = word2onehot(fr_tok, ____, fr_vocab)
if de_w == 'eos': break
fr_sent += de_w + ' '
print("French (Ours): {}".format(fr_sent))
print("French (Google Translate): les etats-unis sont parfois froids en décembre, mais parfois gelés en juin")