Zrozumienie modeli sekwencyjnych

Tłumaczenie maszynowe z Keras

Thushan Ganegedara

Data Scientist and Author

Wejścia szeregów czasowych i modele sekwencyjne

  • Zdanie jest wejściem w postaci szeregu czasowego
    • Bieżące słowo zależy od poprzednich
    • Np. On poszedł do basenu po ....
  • Enkoder/dekoder używa modelu uczenia maszynowego
    • Modele uczące się na danych szeregów czasowych
    • Nazywane są modelami sekwencyjnymi
Tłumaczenie maszynowe z Keras

Modele sekwencyjne

  • Modele sekwencyjne
    • Przetwarzają wejście krok po kroku, generując wyjście w każdym kroku czasowym

Architektura modelu sekwencyjnego

Tłumaczenie maszynowe z Keras

Enkoder jako model sekwencyjny

  • GRU – Gated Recurrent Unit

Bramkowane jednostki rekurencyjne

Tłumaczenie maszynowe z Keras

Wprowadzenie do warstwy GRU

W kroku czasowym 1 warstwa GRU:

  • Przyjmuje wejście „We"
  • Przyjmuje stan początkowy (0, 0)
  • Zwraca nowy stan (0.8, 0.3)

GRU 1

Tłumaczenie maszynowe z Keras

Wprowadzenie do warstwy GRU

W kroku czasowym 2 warstwa GRU:

  • Przyjmuje wejście „like"
  • Przyjmuje stan początkowy (0.8, 0.3)
  • Zwraca nowy stan (0.5, 0.9)

Stan ukryty reprezentuje „pamięć" modelu

GRU 2

Tłumaczenie maszynowe z Keras

Przypomnienie Keras (Functional API)

  • Keras zawiera dwa ważne obiekty: Layer i Model.
  • Warstwa wejściowa
    • inp = keras.layers.Input(shape=(...))
  • Warstwa ukryta
    • layer = keras.layers.GRU(...)
  • Wyjście
    • out = layer(inp)
  • Model
    • model = Model(inputs=inp, outputs=out)
Tłumaczenie maszynowe z Keras

Zrozumienie kształtu danych

  • Dane sekwencyjne są 3-wymiarowe
    • Wymiar wsadowy (np. wsad = grupy zdań)
    • Wymiar czasowy – długość sekwencji
    • Wymiar wejściowy (np. długość wektora one-hot)
  • Kształt wejścia modelu GRU
    • (Wsad, Czas, Wejście)
    • (rozmiar wsadu, długość sekwencji, długość one-hot)

Dane wejściowe

Tłumaczenie maszynowe z Keras

Implementacja GRU w Keras

Definiowanie warstw Keras

inp = keras.layers.Input(batch_shape=(2,3,4))
gru_out = keras.layers.GRU(10)(inp)

Definiowanie modelu Keras

model = keras.models.Model(inputs=inp, outputs=gru_out)
Tłumaczenie maszynowe z Keras

Implementacja GRU w Keras

Predykcja modelem Keras

x = np.random.normal(size=(2,3,4))
y = model.predict(x)
print("shape (y) =", y.shape, "\ny = \n", y)
shape (y) = (2, 10) 
y = 
[[ 0.2576233   0.01215531  ... -0.32517594  0.4483121 ],
 [ 0.54189587 -0.63834655  ... -0.4339783   0.4043917 ]]
Tłumaczenie maszynowe z Keras

Implementacja GRU w Keras

GRU przyjmujące dowolną liczbę próbek w wsadzie

inp = keras.layers.Input(shape=(3,4))
gru_out = keras.layers.GRU(10)(inp)
model = keras.models.Model(inputs=inp, outputs=gru_out)
x = np.random.normal(size=(5,3,4))
y = model.predict(x)
print("y = \n", y)
y = 
 [[-1.3941444e-02 -3.3123985e-02 ... 6.5081201e-02  1.1245312e-01]
 [ 1.1409521e-03  3.6983326e-01 ... -3.4610277e-01 -3.4792548e-01]
 [ 2.5911796e-01 -3.9517123e-01 ... 5.8505309e-01  3.6908010e-01]
 [-2.8727052e-01 -5.1150680e-02 ... -1.9637148e-01 -1.5587148e-01]
 [ 3.1303680e-01  2.3338445e-01 ... 9.1499090e-04 -2.0590121e-01]]
Tłumaczenie maszynowe z Keras

Argument return_state warstwy GRU

inp = keras.layers.Input(batch_shape=(2,3,4))
gru_out2, gru_state = keras.layers.GRU(10, return_state=True)(inp)
print("gru_out2.shape = ", gru_out2.shape)
print("gru_state.shape = ", gru_state.shape)
gru_out2.shape =  (2, 10)
gru_state.shape =  (2, 10)

GRU return_state

Tłumaczenie maszynowe z Keras

Argument return_sequences warstwy GRU

inp = keras.layers.Input(batch_shape=(2,3,4))
gru_out3 = keras.layers.GRU(10, return_sequences=True)(inp)
print("gru_out3.shape = ", gru_out2.shape)
gru_out3.shape =  (2, 3, 10)

GRU return_sequences

Tłumaczenie maszynowe z Keras

Czas na ćwiczenia!

Tłumaczenie maszynowe z Keras

Preparing Video For Download...