모드 붕괴를 피하고 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.6~2.1배 증가
대화 시뮬레이션: 인간과 유사한 행동 패턴 생성
열린 질문: 더 현실적인 답변 분포
합성 데이터 생성: 다운스트림 작업 성능 향상
✅ 유지되는 것들
정확도: 사실 정확도 유지
안전성: 유해 콘텐츠 거부율 97% 이상 유지
실전 팁
💡 언제 사용하면 좋을까?
브레인스토밍: 다양한 아이디어가 필요할 때
창작 활동: 시, 이야기, 코드 등 창의적 콘텐츠 생성
시뮬레이션: 다양한 인간 행동 패턴이 필요할 때
데이터 증강: 학습용 다양한 예제가 필요할 때
💡 주의사항
토큰 비용: N개 응답을 생성하므로 비용이 증가
모델 역량: 큰 모델일수록 효과가 더 좋음 (GPT-4, Claude Sonnet 등)
작업 특성: 정답이 하나인 수학 문제보다는 창의적 작업에 적합
JSON 형식 응답 받기
모델이 정확한 JSON을 반환하도록 하려면:
다음 형식의 유효한 JSON 객체로만 응답하세요:
{
"responses": [
{
"text": "응답 내용",
"probability": 0.15
}
]
}
설명 없이 JSON 객체만 출력하세요.
백틱(```)을 사용하지 마세요.
JSON 외 다른 텍스트를 포함하지 마세요.결론
Verbalized Sampling은 추가 학습 없이 프롬프트만 바꿔서 LLM의 다양성을 극적으로 향상시킬 수 있는 간단하면서도 강력한 기법입니다.
만약 여러분이 어떤 답을 찾고 있고 다양한 옵션을 검토해야 하는 상황이라면 다음과 같이 해보세요.
핵심은 "하나의 답변을 줘"가 아니라 "여러 답변과 그 확률 분포를 보여줘"라고 요청하는 것입니다. 이렇게 하면 모델이 사전학습 때 학습한 다양한 지식을 다시 활용하게 됩니다.
오늘부터 ChatGPT나 Claude를 사용할 때 이 기법을 적용해보세요!