Generowanie tłumaczeń
Teraz wygenerujesz tłumaczenia na język francuski, korzystając z modelu inferencyjnego wytrenowanego z użyciem Teacher Forcing.
Ten model (nmt_tf) był trenowany przez 50 epok na 100 000 zdaniach i osiągnął około 98% dokładności na zbiorze walidacyjnym liczącym ponad 35 000 przykładów. Inicjalizacja tego ćwiczenia może potrwać nieco dłużej, ponieważ wytrenowany model musi zostać załadowany. Masz do dyspozycji funkcję sents2seqs(). Udostępnione zostały również dwie nowe funkcje:
word2onehot(tokenizer, word, vocab_size), która przyjmuje:
- tokenizer – obiekt klasy
Tokenizerz biblioteki Keras - word – łańcuch znaków reprezentujący słowo ze słownika (np.
'apple') - vocab_size – rozmiar słownika
probs2word(probs, tok), która przyjmuje:
- probs – wyjście modelu o kształcie
[1,<French Vocab Size>] - tok – obiekt klasy
Tokenizerz biblioteki Keras
Możesz podejrzeć kod źródłowy tych funkcji, wpisując w konsoli print(inspect.getsource(word2onehot)) oraz print(inspect.getsource(probs2word)).
To ćwiczenie jest częścią kursu
Tłumaczenie maszynowe z Keras
Instrukcje do ćwiczenia
- Przewidź początkowy stan dekodera (
de_s_t) za pomocą enkodera. - Przewidź wyjście i nowy stan dekodera, używając poprzedniego przewidywania (wyjścia) oraz poprzedniego stanu jako danych wejściowych. Pamiętaj, aby rekurencyjnie generować nowy stan.
- Pobierz łańcuch znaków słowa z wyjścia probabilistycznego, korzystając z funkcji
probs2word(). - Przekształć łańcuch znaków słowa w sekwencję one-hot, używając funkcji
word2onehot().
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
en_sent = ['the united states is sometimes chilly during december , but it is sometimes freezing in june .']
print('English: {}'.format(en_sent))
en_seq = sents2seqs('source', en_sent, onehot=True, reverse=True)
# Predict the initial decoder state with the encoder
de_s_t = ____.predict(____)
de_seq = word2onehot(fr_tok, 'sos', fr_vocab)
fr_sent = ''
for i in range(fr_len):
# Predict from the decoder and recursively assign the new state to de_s_t
de_prob, ____ = ____.predict([____,____])
# Get the word from the probability output using probs2word
de_w = probs2word(____, fr_tok)
# Convert the word to a onehot sequence using word2onehot
de_seq = word2onehot(fr_tok, ____, fr_vocab)
if de_w == 'eos': break
fr_sent += de_w + ' '
print("French (Ours): {}".format(fr_sent))
print("French (Google Translate): les etats-unis sont parfois froids en décembre, mais parfois gelés en juin")