출력 길이 조절
max_length
: 생성할 토큰의 최대 길이 수 (입력 프롬프트 + 새로 생성할 토큰의 수)
max_new_tokens
: 입력 프롬프트의 길이를 무시하고 새로 생성할 최대 토큰 수
min_length
: 생성할 시퀀스의 최소 길이 (입력 프롬프트 + 새로 생성할 토큰의 수)
min_new_tokens
: 입력 프롬프트의 길이를 무시하고 새로 생성할 최소 토큰 수
early_stopping
: beam search 기법 활용 시, True로 설정하면 더 나은 후보를 찾을 가능성이 없을 경우 생성을 중지함 (EOS 토큰이 나올 경우 중단)
생성 방식 조절
do_sample
: 생성의 각 시점에서 모델이 예측한 토큰의 확률 분포를 이용해 토큰을 샘플링 한 뒤 문장을 완성
temperature
: 샘플링 확률 분포의 첨도를 조절함 (0에 가까울수록 균등분포에 가까워짐) - 일관성 없이 횡설수설하는 결과물을 생성해낼 때 큰 수로 활용하면 유리 [기본값 = 1]
top_k
: 가장 확률이 높은 k개의 next token만 사용하고 해당 단어들에 대해 확률 질량을 재분배함 (첫 단어가 잘못 선택 될 경우 끝까지 잘못된 결과를 낳을 가능성 존재)
top_p
: 누적 확률이 p에 다다르는 최소한의 단어 집합으로부터 샘플링 시도 (가장 높은 확률을 갖는 단어부터 시작해, 확률 합이 p가 될때까지 샘플링 후보에 토큰 추가) [0 ~ 1]
repeating_penalty
: 이미 생성된 단어에 대해 그 확률을 낮춰줘 다시 등장할 가능성을 낮춤 - 반복 등장에 대한 페널티 [기본값 = 1 (페널티 없음)]
no_repeat_ngram_size
: 설정한 n 그램 크기의 토큰 모임은 생성 결과에서 단 한번만 등장 가능
num_beams
: beam search 방식을 위한 변수 [기본값 = 1 (greedy search 사용)]
diversity_penalty
: beam search 방식을 활용할 때, 특정 타임스텝에서 다른 그룹의 빔 결과와 동일한 토큰을 생성하는 경우 페널티 부여
bad_words_ids
: 토큰 ID 중, 생성 결과에 나타나면 안되는 토큰의 ID list
force_words_ids
: 토큰 ID 중, 생성 결과에 반드시 나타나야 하는 토큰의 ID list
활용 예시
outputs = model.generate(input_ids,
do_sample = True, # 샘플링 전략 활용
max_length = 50, # 최대 출력 길이
min_length = 10, # 최소 출력 길이
tok_p = 0.95, # 누적 확률이 0.95 이상인 후보군에서만 선택
num_return_sequences = 3 # 3개의 결과물 도출
)
Appendix
- min_length, min_new_tokens는 주로 비교적 긴 요약문을 필요로 할때 EOS 토큰이 특정 길이 이전에는 나타나지 않도록 강제하기 위해 활용