การเตรียมข้อมูล
ขั้นตอนต่อไปคือการเตรียมข้อมูลสำหรับโมเดลใหม่ที่มี input สองชุดและ output หนึ่งชุด input ทั้งสองได้แก่ คำภาษาอังกฤษที่เข้ารหัสแบบ one-hot และคำภาษาฝรั่งเศสที่เข้ารหัสแบบ one-hot โดยตัดคำสุดท้ายออก
ส่วน output คือคำภาษาฝรั่งเศสที่เข้ารหัสแบบ one-hot โดยตัดคำแรกออก กล่าวคือ ใน decoder คำภาษาฝรั่งเศสแต่ละคำที่เป็น input จะมี output เป็นคำถัดไป แบบฝึกหัดนี้จะช่วยให้เข้าใจวิธีนำไปใช้งาน
มีฟังก์ชัน sents2seqs(), en_text และ fr_text เตรียมไว้ให้แล้ว
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Machine Translation ด้วย Keras
คำแนะนำการฝึกหัด
- สร้าง encoder inputs หนึ่ง batch (ตั้งแต่
iถึงi+bsize) โดยใช้ฟังก์ชันsents2seqs()(เข้ารหัสแบบ one-hot และกลับลำดับ) - สร้าง decoder inputs และ outputs หนึ่ง batch (ตั้งแต่
iถึงi+bsize) โดยใช้ฟังก์ชันsents2seqs()(เข้ารหัสแบบ one-hot) - แยก decoder inputs (คำภาษาฝรั่งเศสทั้งหมดยกเว้นคำสุดท้าย) จาก
de_xyโดย slicing บน time dimension - แยก decoder outputs (คำภาษาฝรั่งเศสทั้งหมดยกเว้นคำแรก) จาก
de_xy
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
bsize = 250
for i in range(0, len(en_text), bsize):
# Get the encoder inputs using the sents2seqs() function
en_x = ____('source', ____[____:____], onehot=True, reverse=____)
# Get the decoder inputs/outputs using the sents2seqs() function
de_xy = sents2seqs('target', ____[____:____], onehot=True)
# Separate the decoder inputs from de_xy
de_x = de_xy[:,____,:]
# Separate the decoder outputs from de_xy
de_y = de_xy[:,____,:]
print("Data from ", i, " to ", i+bsize)
print("\tnp.argmax() => en_x[0]: ", np.argmax(en_x[0], axis=-1))
print("\tnp.argmax() => de_x[0]: ", np.argmax(de_x[0], axis=-1))
print("\tnp.argmax() => de_y[0]: ", np.argmax(de_y[0], axis=-1))