MulaiMulai sekarang secara gratis

Menghasilkan terjemahan

Sekarang Anda akan menghasilkan terjemahan bahasa Prancis menggunakan model inferensi yang dilatih dengan Teacher Forcing.

Model ini (nmt_tf) telah dilatih selama 50 epoch pada 100.000 kalimat dan mencapai sekitar 98% akurasi pada himpunan validasi berisi lebih dari 35.000 data. Latihan ini mungkin membutuhkan waktu lebih lama saat inisialisasi karena model terlatih perlu dimuat. Anda disediakan fungsi sents2seqs(). Anda juga diberi dua fungsi baru:

word2onehot(tokenizer, word, vocab_size) yang menerima:

  • tokenizer - Objek Keras Tokenizer
  • word - String yang merepresentasikan sebuah kata dari kosakata (misalnya 'apple')
  • vocab_size - Ukuran kosakata

probs2word(probs, tok) yang menerima:

  • probs - Keluaran dari model dengan bentuk [1,<French Vocab Size>]
  • tok - Objek Keras Tokenizer

Anda dapat melihat kode sumber fungsi-fungsi ini dengan mengetik print(inspect.getsource(word2onehot)) dan print(inspect.getsource(probs2word)) di konsol.

Latihan ini adalah bagian dari kursus

Penerjemahan Mesin dengan Keras

Lihat Kursus

Petunjuk latihan

  • Prediksi state awal decoder (de_s_t) dengan encoder.
  • Prediksi keluaran dan state baru dari decoder dengan menggunakan prediksi (keluaran) sebelumnya dan state sebelumnya sebagai masukan. Ingat untuk merekursi pembuatan state baru.
  • Dapatkan string kata dari keluaran probabilitas menggunakan fungsi probs2word().
  • Ubah string kata menjadi urutan one-hot menggunakan fungsi word2onehot().

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

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")
Edit dan Jalankan Kode