종료 토큰(EOS)를 예측하는 방법

Soogyung Gwon·2026년 5월 30일

구름을잡아라

목록 보기
66/76

지정해 준 최대 길이 (max_length)에 도달하기 전이라도 모델은 스스로 문장이 끝났다고 판단하면 생성 조기 종료를 결정한다.

1. 종료 토큰(EOS) 예측 방식

기본적으로 "다음에 올 가장 확률이 높은 토큰"을 단어장에서 하나씩 뽑아내는 방식으로 문장을 생성한다.(Auto-regressive 방식)

모델(Transformer 등)이 문맥을 다 읽고 나면, 마지막 레이어에서 문장의 의미를 담은 고차원 벡터 (Hidden state 벡터)가 출력된다. 이 벡터를 가지고 단어장을 만들게 된다.
(이 단어장에는 일반적인 단어뿐만 아니라 문장의 끝을 의미하는 특수 토큰인 [EOS] (, <|endoftext|> 등등..)가 포함되어 있다.)

이 벡터들을 Linear Layer(선형 레이어)에 통과시키면 각 단어가 다음에 올만한 자격이 얼마나 되는지 나타내는 "가점"이 나온다. (Logits)

Logits 상태로는 확률을 쓸 수 없기 때문에 모든 점수를 0과 1사이의 확률값으로 변환하고 총합이 1이 되도록 소프트맥스 함수를 적용한다.

연산을 거치면 단어장 내의 모든 토큰에 확률이 부여된다. 문장이 마무리될 시점이 되면 모델 내부의 Attention 메커니즘이 연산을 통해 [EOS] 토큰의 가점을 가장 높게 주므로 다음과 같은 활률 분포가 만들어진다.

[사과]: 0.01%
[먹었다]: 0.05%
[EOS] (종료 토큰): 89.4%
[그리고]: 1.2%

이제 이 확률 분포를 바탕으로 토큰을 실제로 선택한다. 설정된 디코딩 방식에 따라 결정된다.

  • Greeddy Search: 가장 단순한 방식으로, 확률이 가장 높은 토큰을 무조건 뽑는다.
  • Sampling: 확률 분포를 기반으로 무작위 추출을 한다.

2. 지정된 길이 (max length) 외의 생성을 멈추는 기준들

EOS 토큰 예측 외에도 실제 서빙 환경이나 파인 튜닝(Inference)단계에서 생성을 멈추게 하는 여러 장치들이 있다.

1) 정지 단어/시퀀스 설정(Steop Sequences): 특정 단어나 기호가 나오면 생성을 멈추는 방식

예시:

  • Chatbot을 만들 때 stop sequence를 \nUser:(줄바꿈 후 유저 입력 표시)로 설정해 두면, 모델이 AI 답변을 마치고 유저의 차례를 흉내 내어 글을 쓰기 직전에 딱 멈춘다.

  • RAG 환경이나 Few-shot 러닝에서 템플릿이 깨지거나 모델이 혼자서 북 치고 장구 치며 1인 2역 하는 것을 막을 때 필수적으로 사용된다.

2) 패널티 제어 (반복 생성 차단)

  • Repetition Penalty: 이미 생성한 토큰이 또 나오면 확률을 깎아버려 다른 단어(또는 EOS)를 고르게 유도한다.

  • No Repeat N-Gram Size: 3글자 또는 4글자 이상의 동일한 어구가 반복되면 강제로 확률을 0으로 만들어 생성을 우회시키고 종료를 돕는다.

3) 휴리스틱 및 포스트 프로세싱 (Post-processing)

  • 시스템 단에서 문장 부호(예: ., ?, !)를 기준으로 생성을 끊는 방법. 모델이 EOS를 내뱉지 않고 미완성된 문장(예: "따라서 이 문제는 매우 중요한...")으로 길어지다가 제한에 걸릴 것 같으면, 마지막 온점까지만 잘라서 유저에게 보여주는 정제 작업을 거치기도 한다.
profile
오랜시간 망설였던 코딩을 다시 해보려고 노력하고 있는 사람

0개의 댓글