메인 콘텐츠로 건너뛰기

모드 붕괴를 피하고 LLM의 다양성을 되살리는 간단한 프롬프트 기법: Verbalized Sampling

요약

문제: LLM이 똑같은 답변만 반복한다?

예전에 ChatGPT나 Claude에게 "커피에 대한 농담을 해줘"라고 하면 놀랍게도 거의 같은 농담만 반복하는 현상이 있었습니다.

  • "왜 커피가 경찰서에 신고했을까? 도둑맞았거든! (mugged)"

이것이 바로 mode collapse(모드 붕괴) 현상입니다. 학습된 LLM은 다양한 답변을 할 수 있지만, 사람의 피드백으로 추가 학습(RLHF)을 거치면서 "가장 평범한" 답변만 하게 되는 것이죠.

여러가지 아이디어를 낼 때도 특정한 아이디어로 수렴하는 경우도 많습니다. 가장 확률이 높은 경우로 수렴하기 때문이죠.

또 LLM 은 나의 의견에 동조하는 현상도 있습니다. 프롬프트 자체가 해당 언어 자체의 벡터 공간으로 이동해서 결과를 생성하기 때문이죠. 다양한 경우의 수를 살펴보고 올바른 옵션이나 답을 찾아야 하는 상황에서는 좋지 않죠.

그렇다면 어떻게 하면 이 모드 붕괴를 피하고 다양한 결과를 얻을 수 있을 까요? 논문 Verbalized Sampling: How to Mitigate Mode Collapse and Unlock LLM Diversity 을 통해 새로운 프롬프트 기법을 알려드리겠습니다.

바로 "Verbalized Sampling" 말로 설명된 샘플링이라는 프롬프트 기법입니다.

왜 이런 일이 발생할까?

연구팀은 이 모드 붕괴 현상의 근본 원인을 전형성 편향에서 찾았습니다. 사람들은 익숙하고 전형적인 텍스트를 더 선호하는 경향이 있고, 이것이 학습 데이터에 반영되어 LLM이 점점 더 단조로워진다는 것입니다.

해결책: Verbalized Sampling (VS)

놀랍게도 해결책은 매우 간단합니다. 프롬프트를 바꾸는 것만으로 다양성을 1.6~2.1배 향상시킬 수 있습니다!

기본 프롬프트 변경 방법

기존 방식 (Direct Prompting):

커피에 대한 농담을 해줘

Verbalized Sampling 방식:

커피에 대한 농담 5개를 생성하고, 각각의 확률을 함께 제시해줘

이렇게 하면:

  • ☕ "Espresso가 모든 문제를 해결하진 못하지만, 시도는 해볼 만해" (확률: 0.12)

  • ☕ "Error 404: Coffee를 찾을 수 없습니다. 인간을 재시작하세요" (확률: 0.07)

  • ☕ "라떼가 심리치료를 받으러 간 이유는? 거품이 너무 많아서" (확률: 0.15)

  • ☕ "콜드브루는 자아를 찾으려 갭이어를 떠난 커피" (확률: 0.07)

  • ☕ "커피: 분노조절 치료보다 저렴하니까" (확률: 0.06)

실전 프롬프트 템플릿

논문에서 제공하는 실전 프롬프트는 다음과 같습니다:

📝 창작 글쓰기용 (시, 이야기, 농담)

다음 입력에 대해 5개의 가능한 응답을 생성해주세요. 
각 응답은 <response> 태그로 구분하고, 
<text><probability>를 포함해주세요.
가독성이 좋게 출력하세요.
  
전체 분포에서 무작위로 샘플링해주세요.

사용자 프롬프트: 곰에 대한 짧은 이야기를 써주세요

💬 대화 시뮬레이션용

당신은 자연스럽게 대화하는 페르소나입니다.
채팅 파트너에게 줄 수 있는 가능한 응답 5개를 생성해주세요.

JSON 형식으로 반환하되, "responses" 키에 다음을 포함:
- text: 응답 문자열
- probability: 0.0~1.0 사이의 발생 확률

JSON 객체만 출력하세요.

🎯 다양성 조절하기

확률 임계값을 조절하여 다양성 수준을 제어할 수 있습니다:

5개의 응답을 생성하되, 각 응답의 확률이 {threshold} 이하가 되도록 
분포의 꼬리(tail)에서 샘플링해주세요.
  • threshold = 1.0: 일반적인 다양성

  • threshold = 0.1: 높은 다양성

  • threshold = 0.01: 매우 높은 다양성 (극단적)

세 가지 VS 변형

1. VS-Standard (표준)

가장 기본적인 형태. 분포와 확률을 직접 요청합니다.

2. VS-CoT (추론 포함)

단계별 사고 과정을 먼저 "reasoning" 필드에 작성한 후,
응답들을 확률과 함께 생성해주세요.

품질이 더 향상되지만 약간 느립니다.

3. VS-Multi (다중 턴)

여러 번에 나눠서 물어봅니다:

  • 1번째: "5개 응답과 신뢰도를 알려줘"

  • 2번째: "5개를 더 알려줘"

  • 반복...

실제 성능

✅ 효과가 입증된 작업들

  1. 창작 글쓰기: 다양성 1.6~2.1배 증가

  2. 대화 시뮬레이션: 인간과 유사한 행동 패턴 생성

  3. 열린 질문: 더 현실적인 답변 분포

  4. 합성 데이터 생성: 다운스트림 작업 성능 향상

✅ 유지되는 것들

  • 정확도: 사실 정확도 유지

  • 안전성: 유해 콘텐츠 거부율 97% 이상 유지

실전 팁

💡 언제 사용하면 좋을까?

  1. 브레인스토밍: 다양한 아이디어가 필요할 때

  2. 창작 활동: 시, 이야기, 코드 등 창의적 콘텐츠 생성

  3. 시뮬레이션: 다양한 인간 행동 패턴이 필요할 때

  4. 데이터 증강: 학습용 다양한 예제가 필요할 때

💡 주의사항

  1. 토큰 비용: N개 응답을 생성하므로 비용이 증가

  2. 모델 역량: 큰 모델일수록 효과가 더 좋음 (GPT-4, Claude Sonnet 등)

  3. 작업 특성: 정답이 하나인 수학 문제보다는 창의적 작업에 적합

JSON 형식 응답 받기

모델이 정확한 JSON을 반환하도록 하려면:

다음 형식의 유효한 JSON 객체로만 응답하세요:

{
  "responses": [
    {
      "text": "응답 내용",
      "probability": 0.15
    }
  ]
}

설명 없이 JSON 객체만 출력하세요.
백틱(```)을 사용하지 마세요.
JSON 외 다른 텍스트를 포함하지 마세요.

결론

Verbalized Sampling은 추가 학습 없이 프롬프트만 바꿔서 LLM의 다양성을 극적으로 향상시킬 수 있는 간단하면서도 강력한 기법입니다.

만약 여러분이 어떤 답을 찾고 있고 다양한 옵션을 검토해야 하는 상황이라면 다음과 같이 해보세요.

핵심은 "하나의 답변을 줘"가 아니라 "여러 답변과 그 확률 분포를 보여줘"라고 요청하는 것입니다. 이렇게 하면 모델이 사전학습 때 학습한 다양한 지식을 다시 활용하게 됩니다.

오늘부터 ChatGPT나 Claude를 사용할 때 이 기법을 적용해보세요!