인프런 커뮤니티 질문&답변

David님의 프로필 이미지
David

작성한 질문수

딥러닝을 활용한 자연어 처리 (NLP) 과정 (기초부터 ChatGPT/생성 모델까지)

실습 - Encoder-Decoder 기계 번역 모델 만들기 - part2

LSTM Decoder 모델에서 train 모델과 inference 모델 관련 질문드립니다.

작성

·

317

0

 # decoder 는 [h, c] 를 initial state 로 사용
decoder_inputs_ = Input(shape=(max_len_kor,), name="Decoder_Input")

# decoder word embedding 은 pre-trained vector 를 사용 않음
decoder_embedding = Embedding(num_words_kor, EMBEDDING_DIM)
decoder_inputs_x = decoder_embedding(decoder_inputs_)

Q 1-1. training state에서는 위와 같이 decoder input이 한 문장의 seq를 모두 input으로 넣어주는데, 이는 teacher forcing을 위해 매 step 마다 seq 데이터(한 문장 데이터)를 input으로 모두 사용하기 때문인 것인가요?

 

decoder_inputs_single = Input(shape=(1,), name='Decoder_input')
x = decoder_embedding(decoder_inputs_single)

Q 1-2. inference state에서는 위와 같이 input size가 1인 이유는, 매번 step마다 하나의 단어(번역할 단어=최초 <sos>, 그 후부터 이전 step의 output)만 input으로 사용하기 때문인가요?

 

Q2. LSTM encoder의 경우 encoder output, h, c를 최종 산출물로 리턴해주는데요. h와 c가 context vector로 decoder의 input으로 입력된다고 이해하였습니다. 그렇다면, 번역 모델에서 encoder output은 어떤 값을 갖고 있으며 어떤 용도로 사용될 수 있을까요?

 

감사합니다!

 

답변 1

1

YoungJea Oh님의 프로필 이미지
YoungJea Oh
지식공유자

Q1-1 답변) 네, 맞습니다. LSTM 기반의 디코더 모델에서 훈련 단계에서 전체 문장의 시퀀스를 한번에 입력으로 넣어주는 것은 "teacher forcing"을 구현하기 위함입니다.

Q1-2 답변) 네, 맞습니다. 추론(inference) 단계에서 디코더의 입력 크기가 1인 이유는 각 시간 단계에서 디코더에게 하나의 단어만 입력으로 제공하기 때문입니다. 추론 단계에서는 보통 <sos> (시작 토큰)으로 디코더를 시작하고, 디코더의 출력은 다음 시간 단계의 입력이 됩니다. 이 과정을 EOS(End of Sentence) 토큰이 출력될 때까지 또는 최대 문장 길이에 도달할 때까지 반복합니다.

Q2 답변) encoder_outputs은 LSTM 셀의 모든 시간 단계에서의 출력을 나타냅니다. 이 정보는 sequence-to-sequence 모델에서 어텐션 메커니즘(attention mechanism)을 구현할 때 사용될 수 있습니다. 어텐션 메커니즘은 디코더가 입력 시퀀스의 모든 부분에 동일한 중요도를 두는 것이 아니라, 각 시간 단계에서 중요한 부분에 '주목(attention)'을 하도록 도와줍니다. 이를 위해 encoder_outputs이 사용됩니다. Attention 을 사용하지 않는 초창기 방식의 단순 seq-to-seq 모델에서는 context vector h, c만 사용하고 encoder-output은 사용되지 않습니다. 그러나 Transformer 가 나온 이후에는 번역기에 LSTM 이 사용되지 않으므로 이런 논의가 실무적으로는 큰 도움이 되지 않을 것 같습니다.

David님의 프로필 이미지
David
질문자

감사합니다 :)

David님의 프로필 이미지
David

작성한 질문수

질문하기