Generarea traducerilor din model

Traducere automată cu Keras

Thushan Ganegedara

Data Scientist and Author

Modelul anterior vs. modelul nou

Encoder decoder cu vector de repetare

Encoder decoder ce intrare

Traducere automată cu Keras

Modelul antrenat

Model antrenat cu Teacher Forcing

Traducere automată cu Keras

Decodorul modelului de inferență

  • Primește ca intrare

    • Un cuvânt codificat one-hot
    • O intrare de stare (starea de la pasul anterior)
  • Produce

    • O stare nouă
    • O predicție (adică un cuvânt)
  • Reintroduce recursiv cuvântul prezis și starea ca intrări în model

Traducere automată cu Keras

Modelul complet de inferență

  • Model de inferență cu decodor recursiv

Encoder cu decodor recursiv

  • Model de inferență din capitolul anterior Encoder decoder anterior
Traducere automată cu Keras

Rolul tokenilor sos și eos

  • sos marchează începutul unei traduceri (ex. o propoziție în franceză).

    • Introduceți sos ca prim cuvânt în decodor și continuați predicțiile
  • eos marchează sfârșitul unei traduceri.

    • Predicțiile se opresc când modelul prezice eos
  • Ca măsură de siguranță, utilizați o lungime maximă pentru predicție

Traducere automată cu Keras

Definirea encoderului generator

  • Importarea straturilor și a modelului

    # Import Keras layers
    import tensorflow.keras.layers as layers
    from tensorflow.keras.models import Model
    
  • Definirea straturilor modelului

    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)
    
  • Definirea obiectului Model

    encoder = Model(inputs=en_inputs, outputs=en_state)
    
Traducere automată cu Keras

Definirea decodorului generator

  • Definirea straturilor Input ale decodorului
de_inputs = layers.Input(shape=(1, fr_vocab))
de_state_in = layers.Input(shape=(hsize,))
  • Definirea straturilor intermediare ale decodorului
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)
  • Definirea Model-ului decodorului
decoder = Model(inputs=[de_inputs, de_state_in], outputs=[de_pred, de_state_out])
Traducere automată cu Keras

Copierea ponderilor

  • Obținerea ponderilor stratului l1
    • w = l1.get_weights()
  • Setarea ponderilor stratului l2 cu w
    • l2.set_weights(w)
  • Modelul nostru are trei straturi cu ponderi
    • Encoder GRU, Decoder GRU și Decoder Dense
en_gru_w = tr_en_gru.get_weights()
en_gru.set_weights(en_gru_w)

Ceea ce poate fi scris și astfel:

en_gru.set_weights(tr_en_gru.get_weights())
Traducere automată cu Keras

Generarea traducerilor

en_sent = ['the united states is sometimes chilly during 
           december , but it is sometimes freezing in june .']
  • Conversia propoziției în engleză într-o secvență
en_seq = sents2seqs('source', en_st, onehot=True, reverse=True)
  • Obținerea vectorului de context
de_s_t = encoder.predict(en_seq)
  • Conversia „sos" (primul cuvânt al decodorului) într-o secvență
de_seq = word2onehot(fr_tok, 'sos', fr_vocab)
Traducere automată cu Keras

Generarea traducerilor

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 + ' '
Traducere automată cu Keras

Timp să traducem!

Traducere automată cu Keras

Preparing Video For Download...