Inizia subitoInizia gratis

Generare traduzioni

Ora genererai traduzioni in francese usando un modello di inferenza addestrato con Teacher Forcing.

Questo modello (nmt_tf) è stato addestrato per 50 epoche su 100.000 frasi, raggiungendo circa il 98% di accuratezza su un set di validazione con oltre 35.000 esempi. L'inizializzazione di questo esercizio potrebbe richiedere più tempo perché è necessario caricare il modello addestrato. Ti viene fornita la funzione sents2seqs(). Hai anche a disposizione due nuove funzioni:

word2onehot(tokenizer, word, vocab_size) che accetta:

  • tokenizer - un oggetto Tokenizer di Keras
  • word - una stringa che rappresenta una parola del vocabolario (ad es. 'apple')
  • vocab_size - dimensione del vocabolario

probs2word(probs, tok) che accetta:

  • probs - un output del modello di forma [1,<French Vocab Size>]
  • tok - un oggetto Tokenizer di Keras

Puoi dare un'occhiata al codice sorgente di queste funzioni digitando print(inspect.getsource(word2onehot)) e print(inspect.getsource(probs2word)) nella console.

Questo esercizio fa parte del corso

Traduzione automatica con Keras

Visualizza corso

Istruzioni dell'esercizio

  • Predici lo stato iniziale del decoder (de_s_t) con l'encoder.
  • Predici l'output e il nuovo stato del decoder usando come input la previsione precedente (output) e lo stato precedente. Ricorda di generare ricorsivamente il nuovo stato.
  • Ottieni la parola in formato stringa dall'output di probabilità usando la funzione probs2word().
  • Converte la stringa della parola in una sequenza one-hot usando la funzione word2onehot().

esercizio interattivo pratico

Prova questo esercizio completando questo codice di esempio.

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")
Modifica ed esegui il codice