Word embedding 기반 모델 학습
이 연습에서는 word embedding을 사용하는 기계 번역 모델의 학습 과정을 구현해 보세요. 이전 연습과 달리, 단어는 원-핫 인코딩 벡터가 아닌 단일 숫자로 표현됩니다. 전체 데이터를 배치로 순회하며 여러 epoch에 걸쳐 모델을 학습합니다.
이 연습에서는 문장 리스트 형태의 학습 데이터(tr_en, tr_fr)가 제공됩니다. 학습 시간이 너무 길어질 수 있으므로 실제 데이터 중 극히 일부(1000문장)만 사용합니다. 또한 이전 연습에서 구현한 sents2seqs() 함수와 모델 nmt_emb가 주어집니다. 인코더 입력은 en_x, 디코더 입력은 de_x로 표기한다는 점을 기억하세요.
이 연습은 강의의 일부입니다
Keras로 배우는 Machine Translation
연습 안내
sents2seqs()함수를 사용해 원-핫 인코딩 없이 프랑스어 문장의 배치 한 개를 가져오세요.de_xy에서 마지막 단어를 제외한 모든 단어를 가져오세요.de_xy_oh(원-핫 인코딩된 프랑스어 단어)에서 첫 번째 단어를 제외한 모든 단어를 가져오세요.- 배치 한 개의 데이터로 모델을 학습하세요
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
for ei in range(3):
for i in range(0, train_size, bsize):
en_x = sents2seqs('source', tr_en[i:i+bsize], onehot=False, reverse=True)
# Get a single batch of French sentences with no onehot encoding
de_xy = ____('target', ____[i:i+bsize], ____=____)
# Get all words except the last word in that batch
de_x = de_xy[:,____]
de_xy_oh = sents2seqs('target', tr_fr[i:i+bsize], onehot=True)
# Get all words except the first from de_xy_oh
de_y = de_xy_oh[____,____,____]
# Training the model on a single batch of data
nmt_emb.train_on_batch([____,____], ____)
res = nmt_emb.evaluate([en_x, de_x], de_y, batch_size=bsize, verbose=0)
print("{} => Loss:{}, Train Acc: {}".format(ei+1,res[0], res[1]*100.0))