Übersetzungen erstellen
Jetzt kannst du französische Übersetzungen mit einem Inferenzmodell erstellen, das mit Teacher Forcing trainiert wurde.
Dieses Modell (nmt_tf
) wurde über 50 Epochen mit 100.000 Sätzen trainiert und hat bei einem Validierungssatz von über 35.000 Sätzen eine Genauigkeit von etwa 98 % erreicht. Es kann etwas länger dauern, bis diese Übung startet, weil das trainierte Modell erst geladen werden muss. Du hast die Funktion „ sents2seqs()
“ zur Verfügung. Du hast auch zwei neue Aufgaben bekommen:
word2onehot(tokenizer, word, vocab_size)
das Folgendes akzeptiert:
tokenizer – Ein Keras-
Tokenizer
-ObjektWort – Eine Zeichenfolge, die ein Wort aus dem Vokabular darstellt (z. B. „
'apple'
“).vocab_size – Größe des Vokabulars
probs2word(probs, tok)
das Folgendes akzeptiert:
probs – Eine Ausgabe aus dem Modell der Form
[1,<French Vocab Size>]
tok – Ein Keras-
Tokenizer
sobjekt
Du kannst dir den Quellcode für diese Funktionen ansehen, indem du in der Konsole „ print(inspect.getsource(word2onehot))
“ und „ print(inspect.getsource(probs2word))
“ eingibst.
Diese Übung ist Teil des Kurses
Maschinelle Übersetzung mit Keras
Anleitung zur Übung
- Sag mit dem Encoder den Anfangszustand des Decoders (
de_s_t
) voraus. - Sag voraus, was der Decoder machen wird und wie er dann aussieht, indem du die letzte Vorhersage (Ausgabe) und den letzten Zustand als Eingaben nimmst. Denk dran, den neuen Status rekursiv zu generieren.
- Hol die Wortzeichenfolge aus der Wahrscheinlichkeitsausgabe mit der Funktion „
probs2word()
“. - Wandle die Wortzeichenfolge mit der Funktion „
word2onehot()
“ in eine One-Hot-Sequenz um.
Interaktive Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
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")