ÎncepețiÎncepe gratuit

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 Tokenizer din 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 Tokenizer din 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

Vezi cursul

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")
Editează și rulează codul