문장은 어떻게 만들어질까요?
앞 장에서는 Token을 소개했습니다.
이제 모델은 일련의 Token을 받았습니다. 그런데 이 Token을 어떻게 이어서 문장으로 만들까요?
먼저 아직 끝나지 않은 문장을 보겠습니다.
I love
다음에는 무엇이 올 수 있을까요?
이해를 돕기 위해 단순화한 가상의 후보 목록을 만들어 보겠습니다.
you 30%
this 18%
music 12%
it 8%
...
이 숫자들은 예시일 뿐 실제 모델의 출력이 아닙니다.
모델은 현재 맥락에 따라 다음에 나올 수 있는 Token의 확률 분포를 계산하고, 사용하는 디코딩 전략에 따라 하나를 선택합니다.
you를 선택했다면 현재 내용은 다음과 같이 바뀝니다.
I love you
그다음 모델은 새 내용을 다시 맥락에 넣고 다음 Token을 예측합니다.
I love
I love you
I love you too
I love you too.
이 과정은 생성 종료 표시가 나오거나, 출력 제한에 도달하거나, 시스템이 다른 방식으로 중단할 때까지 반복됩니다.
여기서 특히 바로잡아야 할 점이 있습니다. Tokenizer는 텍스트와 Token ID 사이의 변환만 담당합니다. 텍스트를 나눌 때 각 Token에 영원히 변하지 않는 답변 확률을 부여하는 것이 아닙니다.
확률은 모델이 생성하는 동안 현재 맥락에 따라 계산합니다. 같은 단어라도 다른 문장에 들어가면 그다음에 나올 가능성이 큰 내용도 달라집니다.
같은 질문에서 왜 다른 답이 나올까요?
아주 간단한 실험을 해 볼 수 있습니다.
서로 영향을 주지 않는 대화창 두 개를 새로 열고 각각 다음 문장을 입력하세요.
옛날에 어린 왕자가 살았습니다
두 답은 비슷하게 시작해도 뒤에는 서로 다른 이야기로 이어질 수 있습니다.
왜 그럴까요?
많은 생성 과정이 매 단계에서 항상 점수가 가장 높은 Token만 고르지 않고 샘플링을 하기 때문입니다. 한 번 다른 선택을 하면 뒤의 맥락도 달라지고, 전체 답변 역시 다른 경로를 따라 생성됩니다.
이 밖에도 모델 버전, 시스템 지침, 대화 기록, 도구가 반환한 내용과 서버 측 구현이 결과에 영향을 줄 수 있습니다.
따라서 “같은 문장을 입력했다”는 사실만으로 두 실행의 모든 조건이 완전히 같았다고 할 수는 없습니다.
Temperature란 무엇인가?
Temperature(온도)는 일부 모델 인터페이스에서 제공하는 샘플링 매개변수입니다.
직관적으로 말하면 후보 Token의 확률 분포가 얼마나 집중되는지를 조정합니다.
- Temperature가 낮으면 일반적으로 확률이 높은 후보가 더 우세해져 출력이 한쪽으로 모입니다.
- Temperature가 높으면 일반적으로 더 많은 후보가 선택될 기회를 얻어 출력이 다양해지지만 더 불안정해질 수도 있습니다.
Temperature는 “창의성 스위치”가 아니며 사실을 자동으로 더 정확하게 만들어 주지도 않습니다.
정보 추출, 분류 또는 고정 형식 출력을 할 때는 보통 일관성을 더 중요하게 봅니다. 브레인스토밍을 할 때는 더 많은 변화를 받아들일 수도 있습니다.
어느 경우든 결과는 확인해야 합니다.
Temperature는 얼마로 설정해야 할까요?
모든 작업에 적합한 고정 숫자는 없습니다.
모델과 인터페이스에 따라 Temperature 지원 여부, 허용 범위, 다른 샘플링 매개변수와 함께 사용하는 방식이 달라질 수 있습니다. 일반 채팅 제품도 매번 생성에 사용한 전체 매개변수를 공개하지 않을 수 있습니다.
그러므로 “웹 버전 기본값은 0.7이다” 또는 “특정 값이 가장 좋다”라는 말을 일반적인 결론으로 받아들이면 안 됩니다.
더 신뢰할 수 있는 방법은 실제로 하려는 작업을 여러 번 시험하고, 설정에 따른 결과를 본 뒤 사용할 값을 정하는 것입니다.
해당 인터페이스가 Temperature를 지원하는지, 어느 범위까지 설정할 수 있는지는 지금 사용하는 플랫폼의 최신 공식 문서를 확인해야 합니다. Temperature가 매우 낮아도 출력이 매번 같다는 보장은 없으므로 중요한 결과는 계속 확인해야 합니다.
다시 프롬프트 엔지니어링으로
무작위성을 이해하면 모델을 매번 같은 결과를 반환하는 데이터베이스 쿼리처럼 여기지 않게 됩니다.
Prompt의 역할은 가능한 답을 필요한 범위에 더 가깝게 만드는 것이고, 검증의 역할은 이번 결과를 실제로 사용할 수 있는지 확인하는 것입니다.
이전 장: Token이란 무엇인가?
다음 장: 좋은 출력을 얻는 여섯 가지 방법