Aan de slagGa gratis aan de slag

Data preprocessen

Je moet nu de data verwerken voor ons nieuwe model met twee inputs en één output. De twee inputs zijn: de one-hot encodede Engelse woorden en de one-hot encodede Franse woorden zonder het laatste woord.

De output is de one-hot encodede Franse woorden zonder het eerste woord. Met andere woorden: in de decoder heeft elk ingevoerd Frans woord een output, namelijk het volgende woord. Hier leer je hoe je dat implementeert.

Je hebt de functies sents2seqs(), en_text en fr_text gekregen.

Deze oefening maakt deel uit van de cursus

Machine Translation met Keras

Cursus bekijken

Oefeninstructies

  • Verkrijg een batch encoder-inputs (van i tot i+bsize) met de functie sents2seqs() (one-hot encodede en omgekeerd).
  • Verkrijg een batch decoder-inputs en -outputs (van i tot i+bsize) met de functie sents2seqs() (one-hot encodede).
  • Scheid de decoder-inputs (alle Franse woorden behalve het laatste) uit de_xy door te slicen op de timedimensie.
  • Scheid de decoder-outputs (alle Franse woorden behalve het eerste) uit de_xy.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

bsize = 250
for i in range(0, len(en_text), bsize):
  # Get the encoder inputs using the sents2seqs() function
  en_x = ____('source', ____[____:____], onehot=True, reverse=____)
  # Get the decoder inputs/outputs using the sents2seqs() function
  de_xy = sents2seqs('target', ____[____:____], onehot=True)
  # Separate the decoder inputs from de_xy
  de_x = de_xy[:,____,:]
  # Separate the decoder outputs from de_xy
  de_y = de_xy[:,____,:]
  
  print("Data from ", i, " to ", i+bsize)
  print("\tnp.argmax() => en_x[0]: ", np.argmax(en_x[0], axis=-1))
  print("\tnp.argmax() => de_x[0]: ", np.argmax(de_x[0], axis=-1))
  print("\tnp.argmax() => de_y[0]: ", np.argmax(de_y[0], axis=-1))
Code bewerken en uitvoeren