การสร้างคำแปลจากโมเดล

Machine Translation ด้วย Keras

Thushan Ganegedara

Data Scientist and Author

โมเดลเดิม vs โมเดลใหม่

Encoder decoder repeat vector

Encoder decoder which input

Machine Translation ด้วย Keras

โมเดลที่ผ่านการฝึกแล้ว

Teacher Forcing trained model

Machine Translation ด้วย Keras

Decoder ของ inference model

  • รับข้อมูลเข้า

    • คำที่เข้ารหัสแบบ one-hot
    • state input (รับ state จาก timestep ก่อนหน้า)
  • ผลลัพธ์ที่ได้

    • state ใหม่
    • การทำนาย (คือ คำ)
  • ป้อนคำที่ทำนายได้และ state กลับเข้าโมเดลแบบวนซ้ำ

Machine Translation ด้วย Keras

Inference model แบบสมบูรณ์

  • Inference model พร้อม recursive decoder

Encoder recursive decoder

  • Inference model จากบทก่อนหน้า Encoder decoder previous
Machine Translation ด้วย Keras

ความสำคัญของ token sos และ eos

  • sos บ่งบอกจุดเริ่มต้นของการแปล (เช่น ประโยคภาษาฝรั่งเศส)

    • ป้อน sos เป็นคำแรกให้ decoder แล้วทำนายต่อเรื่อยๆ
  • eos บ่งบอกจุดสิ้นสุดของการแปล

    • หยุดทำนายเมื่อโมเดลทำนายคำว่า eos
  • กำหนดความยาวสูงสุดที่โมเดลจะทำนายไว้เป็นมาตรการป้องกัน

Machine Translation ด้วย Keras

กำหนด encoder สำหรับการสร้างคำแปล

  • นำเข้า layers และ Model

    # Import Keras layers
    import tensorflow.keras.layers as layers
    from tensorflow.keras.models import Model
    
  • กำหนด layers ของโมเดล

    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)
    
  • กำหนดออบเจกต์ Model

    encoder = Model(inputs=en_inputs, outputs=en_state)
    
Machine Translation ด้วย Keras

กำหนด decoder สำหรับการสร้างคำแปล

  • กำหนด Input layers ของ decoder
de_inputs = layers.Input(shape=(1, fr_vocab))
de_state_in = layers.Input(shape=(hsize,))
  • กำหนด layers ขั้นกลางของ decoder
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)
  • กำหนด Model ของ decoder
decoder = Model(inputs=[de_inputs, de_state_in], outputs=[de_pred, de_state_out])
Machine Translation ด้วย Keras

การคัดลอกค่าน้ำหนัก

  • ดึงค่าน้ำหนักของ layer l1
    • w = l1.get_weights()
  • กำหนดค่าน้ำหนักของ layer l2 ด้วย w
    • l2.set_weights(w)
  • ในโมเดลนี้มี layer ที่มีค่าน้ำหนักอยู่ 3 layer
    • Encoder GRU, Decoder GRU และ Decoder Dense
en_gru_w = tr_en_gru.get_weights()
en_gru.set_weights(en_gru_w)

ซึ่งสามารถเขียนย่อได้เป็น

en_gru.set_weights(tr_en_gru.get_weights())
Machine Translation ด้วย Keras

การสร้างคำแปล

en_sent = ['the united states is sometimes chilly during 
           december , but it is sometimes freezing in june .']
  • แปลงประโยคภาษาอังกฤษให้เป็น sequence
en_seq = sents2seqs('source', en_st, onehot=True, reverse=True)
  • ดึง context vector
de_s_t = encoder.predict(en_seq)
  • แปลง "sos" (คำแรกที่ป้อนให้ decoder) ให้เป็น sequence
de_seq = word2onehot(fr_tok, 'sos', fr_vocab)
Machine Translation ด้วย Keras

การสร้างคำแปล

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 + ' '
Machine Translation ด้วย Keras

มาฝึกกันเถอะ!

Machine Translation ด้วย Keras

Preparing Video For Download...