Generowanie tłumaczeń z modelu

Tłumaczenie maszynowe z Keras

Thushan Ganegedara

Data Scientist and Author

Poprzedni model a nowy model

Koder-dekoder z wektorem powtórzenia

Koder-dekoder – które wejście

Tłumaczenie maszynowe z Keras

Wytrenowany model

Model wytrenowany z Teacher Forcing

Tłumaczenie maszynowe z Keras

Dekoder modelu inferencji

  • Przyjmuje na wejściu

    • Słowo zakodowane metodą one-hot
    • Wejście stanu (stan z poprzedniego kroku czasowego)
  • Zwraca

    • Nowy stan
    • Przewidywanie (tj. słowo)
  • Rekurencyjnie podaje przewidziane słowo i stan z powrotem do modelu

Tłumaczenie maszynowe z Keras

Pełny model inferencji

  • Model inferencji z rekurencyjnym dekoderem

Koder z rekurencyjnym dekoderem

  • Model inferencji z poprzedniego rozdziału Koder-dekoder poprzedni
Tłumaczenie maszynowe z Keras

Rola tokenów sos i eos

  • sos oznacza początek tłumaczenia (np. zdanie po francusku).

    • Podaj sos jako pierwsze słowo do dekodera i kontynuuj przewidywanie
  • eos oznacza koniec tłumaczenia.

    • Przewidywanie kończy się, gdy model zwróci eos
  • Dla bezpieczeństwa ustaw maksymalną długość przewidywania

Tłumaczenie maszynowe z Keras

Definiowanie kodera generatora

  • Importowanie warstw i modelu

    # Import Keras layers
    import tensorflow.keras.layers as layers
    from tensorflow.keras.models import Model
    
  • Definiowanie warstw modelu

    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)
    
  • Definiowanie obiektu Model

    encoder = Model(inputs=en_inputs, outputs=en_state)
    
Tłumaczenie maszynowe z Keras

Definiowanie dekodera generatora

  • Definiowanie warstw Input dekodera
de_inputs = layers.Input(shape=(1, fr_vocab))
de_state_in = layers.Input(shape=(hsize,))
  • Definiowanie pośrednich layers dekodera
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)
  • Definiowanie Model dekodera
decoder = Model(inputs=[de_inputs, de_state_in], outputs=[de_pred, de_state_out])
Tłumaczenie maszynowe z Keras

Kopiowanie wag

  • Pobieranie wag warstwy l1
    • w = l1.get_weights()
  • Ustawianie wag warstwy l2 na w
    • l2.set_weights(w)
  • Model zawiera trzy warstwy z wagami
    • Koder GRU, dekoder GRU i dekoder Dense
en_gru_w = tr_en_gru.get_weights()
en_gru.set_weights(en_gru_w)

Co można zapisać skrótowo jako:

en_gru.set_weights(tr_en_gru.get_weights())
Tłumaczenie maszynowe z Keras

Generowanie tłumaczeń

en_sent = ['the united states is sometimes chilly during 
           december , but it is sometimes freezing in june .']
  • Konwersja zdania angielskiego na sekwencję
en_seq = sents2seqs('source', en_st, onehot=True, reverse=True)
  • Wyznaczanie wektora kontekstu
de_s_t = encoder.predict(en_seq)
  • Konwersja „sos" (pierwsze słowo dla dekodera) na sekwencję
de_seq = word2onehot(fr_tok, 'sos', fr_vocab)
Tłumaczenie maszynowe z Keras

Generowanie tłumaczeń

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 + ' '
Tłumaczenie maszynowe z Keras

Czas na tłumaczenie!

Tłumaczenie maszynowe z Keras

Preparing Video For Download...