작성
·
384
0
predictions, _ = self.transformer([encoder_input, output], training=False)
# seq_len dimension에서 last token을 선택합니다.
predictions = predictions[:, -1:, :] # (batch_size, 1, vocab_size)
predicted_id = tf.argmax(predictions, axis=-1)
트랜스포머 최종 결과값으로
batch x seq_len x vocab_size 로 단어의 갯수만큼 확률 분포를 구하는 것을 이해했습니다.
그리고 추론단계의 번역이므로 1개의 단어씩 output으로 뽑아야 한다는 것도 알겠는데요.
위 코드에서 생성을 위해 seq_len dimension에서 last token을 선택하는 이유(predictions[:, -1:, :] 부분) 는 무엇인가요?
답변 1
1
Transformer 모델에서 추론 단계는 각 시간 단계마다 새로운 토큰을 생성하고 이를 입력 시퀀스에 추가하는 방식으로 진행됩니다.
즉, 먼저 입력 시퀀스는 시작 토큰만을 가지고 있습니다. 그 다음, Transformer는 이 시작 토큰을 기반으로 첫 번째 토큰을 예측하게 됩니다. 그 후 이 예측된 토큰은 입력 시퀀스에 추가되어, 이번에는 두 개의 토큰을 가진 시퀀스를 기반으로 두 번째 토큰을 예측하게 됩니다. 이 과정이 반복되며 전체 번역문을 생성하게 됩니다.
이 때 predictions[:, -1:, :]
코드는 매 시간 단계마다 생성된 마지막 토큰 (즉, 가장 최근에 생성된 토큰)을 선택하게 됩니다. 이 토큰은 다음 시간 단계의 입력으로 사용되어, 새로운 토큰을 생성하는데 사용되게 됩니다. 이렇게 생성된 각 토큰들이 결합되어 최종 번역문을 형성하게 됩니다.
따라서 predictions[:, -1:, :]
는 Transformer의 추론 과정에서 매 시간 단계마다 생성된 가장 최신의 토큰을 선택하는 코드입니다.