generate()는 토큰마다 상태가 바뀌는 반복문이야
model.generate()는 GenerationConfig를 읽으며 다음 토큰을 하나씩 고르는 상태 기계야. do_sample과 num_beams로 전략을, max_new_tokens로 길이를, temperature·top_p·top_k·repetition_penalty로 분포를, eos_token_id와 stop_strings로 종료 조건을 정해.
목적에 맞는 전략 하나를 골라
- Greedy는 매 단계 가장 확률이 높은 토큰을 골라. 결정적이어야 하는 도구 호출, JSON, 코드 완성의 출발점이야.
- Sampling은 확률 분포에서 토큰을 뽑아 다양성을 만들어. 대화와 창작에서는
temperature=0.7,top_p=0.9정도에서 시작해 조정해. - Beam search는 여러 후보 문장을 함께 탐색해. 번역이나 요약처럼 최선의 한 문장을 찾을 때 유용하지만 beam 수만큼 계산량이 늘어.
끝내는 조건까지 생성 설정이야
eos_token_id가 틀리거나 빠지면 모델이 끝났어야 할 자리에서도 계속 생성할 수 있어. 지시형 모델은 <|eot_id|>나 <|end_of_turn|>처럼 종료 토큰을 여러 개 쓸 수 있으니 목록으로 넘겨. 임의 문자열에서 멈춰야 하면 더 느리지만 유연한 stop_strings를 사용해.