모델 생성시 계속 반복되는 문제

honeychicc·2024년 11월 1일

파인튜닝된 모델이 문장을 무한히 생성하는 문제는 주로 다음과 같은 원인에서 발생할 수 있습니다. 각 경우에 따라 해결 방법을 제시해 드리겠습니다.

  1. 생성 길이 제한 설정

모델이 무한 생성되는 것을 방지하기 위해 최대 생성 길이를 제한할 수 있습니다. generate() 함수를 사용할 때 max_length 또는 max_new_tokens 파라미터를 설정하여, 생성할 수 있는 토큰 수를 제한할 수 있습니다.

generated_text = model.generate(input_ids, max_length=50)

max_length=50으로 설정하면 최대 50개의 토큰까지만 생성하며, 이후 자동으로 멈추게 됩니다.

  1. 반복 패턴 방지 (Repetition Penalty)

모델이 특정 패턴을 반복하여 무한히 생성하는 경우, 반복 패널티를 적용할 수 있습니다. 이를 통해 동일한 단어 또는 패턴의 반복이 억제됩니다.

generated_text = model.generate(input_ids, max_length=50, repetition_penalty=1.2)

repetition_penalty 값을 1보다 큰 값으로 설정하면 반복되는 패턴을 억제할 수 있습니다.

  1. 토큰 종료 조건 설정 (Stop Token)

모델이 특정 문장 생성이 완료되면 종료할 수 있도록 종료 토큰(stop token)을 설정합니다. 예를 들어, eos_token_id를 지정하여 모델이 해당 토큰을 생성하면 자동으로 중지되도록 할 수 있습니다.

generated_text = model.generate(input_ids, max_length=50, eos_token_id=tokenizer.eos_token_id)

eos_token_id는 모델이 생성하는 텍스트에서 종료 신호 역할을 합니다. 토크나이저의 eos_token_id가 설정된 경우, 해당 토큰이 생성되면 텍스트 생성을 중단합니다.

  1. Top-k 샘플링과 Top-p 샘플링 활용

무한 반복 패턴이 발생하는 원인은 모델이 항상 높은 확률의 토큰을 생성하는 데서 비롯될 수 있습니다. 이를 방지하기 위해 Top-k 또는 Top-p (nucleus) 샘플링을 사용해 불확실성을 추가할 수 있습니다.

generated_text = model.generate(input_ids, max_length=50, top_k=50, top_p=0.9)

top_k=50은 상위 50개의 확률이 높은 토큰 중 하나를 무작위로 선택하게 하고, top_p=0.9는 누적 확률이 0.9에 도달하는 범위 내에서만 토큰을 샘플링하도록 제한합니다.

  1. 길이 기준 패널티 (Length Penalty) 설정

길이 패널티를 설정해 모델이 짧은 답변을 생성하도록 유도할 수 있습니다. length_penalty를 1보다 작은 값으로 설정하면 모델이 긴 답변을 피하고 짧은 답변을 생성하게 됩니다.

generated_text = model.generate(input_ids, max_length=50, length_penalty=0.8)

length_penalty=0.8은 길이가 길어질수록 점수가 낮아지도록 합니다.


위의 방법들을 조합하여, 모델이 무한 생성되는 문제를 방지할 수 있습니다. 특히 max_length와 eos_token_id를 활용해 특정 조건에서 생성을 중단하도록 하는 방법이 기본적이고 효과적입니다.

0개의 댓글