Generera översättningar från modellen

Maskinöversättning med Keras

Thushan Ganegedara

Data Scientist and Author

Tidigare modell vs ny modell

Kodare avkodare repetera vektor

Kodare avkodare vilken inmatning

Maskinöversättning med Keras

Tränad modell

Teacher Forcing tränad modell

Maskinöversättning med Keras

Avkodaren i inferensmodellen

  • Tar emot

    • Ett one-hot-kodat ord
    • En tillståndsinmatning (hämtar tillståndet från föregående tidssteg)
  • Producerar

    • Ett nytt tillstånd
    • En prediktion (dvs. ett ord)
  • Matar rekursivt tillbaka det predikterade ordet och tillståndet till modellen som inmatning

Maskinöversättning med Keras

Fullständig inferensmodell

  • Inferensmodell med rekursiv avkodare

Kodare rekursiv avkodare

  • Inferensmodell från föregående kapitel Kodare avkodare föregående
Maskinöversättning med Keras

Vad sos- och eos-tokens används till

  • sos markerar början av en översättning (dvs. en fransk mening).

    • Mata in sos som första ord till avkodaren och fortsätt prediktera
  • eos markerar slutet av en översättning.

    • Prediktionen stoppas när modellen predikterar eos
  • Använd en maxlängd som säkerhetsåtgärd för hur långt modellen kan prediktera

Maskinöversättning med Keras

Definiera generatorns kodare

  • Importera lager och Model

    # Import Keras layers
    import tensorflow.keras.layers as layers
    from tensorflow.keras.models import Model
    
  • Definiera modellager

    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)
    
  • Definiera Model-objekt

    encoder = Model(inputs=en_inputs, outputs=en_state)
    
Maskinöversättning med Keras

Definiera generatorns avkodare

  • Definiera avkodarens Input-lager
de_inputs = layers.Input(shape=(1, fr_vocab))
de_state_in = layers.Input(shape=(hsize,))
  • Definiera avkodarens mellanliggande 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)
  • Definiera avkodarens Model
decoder = Model(inputs=[de_inputs, de_state_in], outputs=[de_pred, de_state_out])
Maskinöversättning med Keras

Kopiera vikterna

  • Hämta vikterna för lagret l1
    • w = l1.get_weights()
  • Sätt vikterna för lagret l2 med w
    • l2.set_weights(w)
  • I vår modell finns tre lager med vikter
    • Kodarens GRU, avkodarens GRU och avkodarens Dense
en_gru_w = tr_en_gru.get_weights()
en_gru.set_weights(en_gru_w)

Detta kan även skrivas som,

en_gru.set_weights(tr_en_gru.get_weights())
Maskinöversättning med Keras

Generera översättningar

en_sent = ['the united states is sometimes chilly during 
           december , but it is sometimes freezing in june .']
  • Konvertera den engelska meningen till en sekvens
en_seq = sents2seqs('source', en_st, onehot=True, reverse=True)
  • Hämta kontextvektorn
de_s_t = encoder.predict(en_seq)
  • Konvertera "sos" (det första ordet till avkodaren) till en sekvens
de_seq = word2onehot(fr_tok, 'sos', fr_vocab)
Maskinöversättning med Keras

Generera översättningar

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 + ' '
Maskinöversättning med Keras

Nu kör vi en övning!

Maskinöversättning med Keras

Preparing Video For Download...