• 카테고리

    질문 & 답변
  • 세부 분야

    자연어 처리

  • 해결 여부

    미해결

트랜스포머 추론 단계에서 질문드립니다.

23.08.04 18:15 작성 조회수 290

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의 추론 과정에서 매 시간 단계마다 생성된 가장 최신의 토큰을 선택하는 코드입니다.