모델에서 번역 생성

Keras로 배우는 Machine Translation

Thushan Ganegedara

Data Scientist and Author

이전 모델 vs 새 모델

인코더-디코더 반복 벡터

인코더-디코더 어느 입력?

Keras로 배우는 Machine Translation

학습된 모델

Teacher Forcing 학습된 모델

Keras로 배우는 Machine Translation

추론 모델의 디코더

  • 입력

    • 원-핫 인코딩된 단어
    • 상태 입력(이전 시점의 상태 사용)
  • 출력

    • 새 상태
    • 예측값(단어)
  • 예측된 단어와 상태를 다시 입력으로 재귀적으로 넣습니다

Keras로 배우는 Machine Translation

완전한 추론 모델

  • 재귀 디코더를 갖춘 추론 모델

인코더 재귀 디코더

  • 이전 장의 추론 모델 인코더-디코더 이전
Keras로 배우는 Machine Translation

sos/eos 토큰의 역할

  • sos는 번역의 시작(예: 프랑스어 문장)을 표시합니다.

    • 디코더의 첫 단어로 sos를 넣고 계속 예측합니다
  • eos는 번역의 끝을 표시합니다.

    • 모델이 예측한 단어가 eos이면 예측을 멈춥니다
  • 안전장치로 모델의 최대 예측 길이를 설정합니다

Keras로 배우는 Machine Translation

생성기 인코더 정의

  • 레이어와 Model 임포트

    # Import Keras layers
    import tensorflow.keras.layers as layers
    from tensorflow.keras.models import Model
    
  • 모델 레이어 정의

    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)
    
Keras로 배우는 Machine Translation

생성기 디코더 정의

  • 디코더 Input 레이어 정의
de_inputs = layers.Input(shape=(1, fr_vocab))
de_state_in = layers.Input(shape=(hsize,))
  • 디코더 중간 layers 정의
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 = Model(inputs=[de_inputs, de_state_in], outputs=[de_pred, de_state_out])
Keras로 배우는 Machine Translation

가중치 복사

  • 레이어 l1의 가중치 가져오기
    • w = l1.get_weights()
  • 레이어 l2에 w로 가중치 설정
    • l2.set_weights(w)
  • 본 모델에는 가중치가 있는 레이어가 3개입니다
    • 인코더 GRU, 디코더 GRU, 디코더 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())
Keras로 배우는 Machine Translation

번역 생성

en_sent = ['the united states is sometimes chilly during 
           december , but it is sometimes freezing in june .']
  • 영어 문장을 시퀀스로 변환
en_seq = sents2seqs('source', en_st, onehot=True, reverse=True)
  • 컨텍스트 벡터 얻기
de_s_t = encoder.predict(en_seq)
  • "sos"(디코더의 시작 단어)를 시퀀스로 변환
de_seq = word2onehot(fr_tok, 'sos', fr_vocab)
Keras로 배우는 Machine Translation

번역 생성

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 + ' '
Keras로 배우는 Machine Translation

이제 번역해 봅시다!

Keras로 배우는 Machine Translation

Preparing Video For Download...