LLM 시대, LangChain(랭체인)으로 배우는 AI 소프트웨어 개발
Self-Consistency(자기 일관성) (Wang et al. 2023)은 LLM이 동일한 문제를 여러가지 방법으로 해결하고 응답을 집계하여 응답의 신뢰성을 높이는 기술입니다. 이 방법을 사용하면 모델 출력의 변동을 억제하고 정확성을 향상시킬 수 있습니다.
Wang 논문에서는 Self-Consistency를 적용할 때의 답변을 병합하는 방법으로 다수결(Voting)과 확률(Probability)의 2가지 접근법이 소개되어 있습니다.
1. 다수결(Voting) 접근법: LLM이 생성한 여러 댇답에 대해 가장 자주 나타내는 대답을 최종 대답으로 선택합니다. 구체적으로는 다음 단계를 사용하여 답변을 병합합니다.
① LLM에 같은 문제를 여러번 풀어 응답을 생성합니다.
② 생성된 답변을 클러스터링하고 동일한 의미의 응답을 그룹화합니다.
③ 각 그룹의 응답수를 집계하여 가장 많은 응답을 포함하는 그룹을 특정합니다.
④ 가장 많은 답변을 포함한 그룹에서 대표적인 답변을 최종적인 답변으로 선택합니다.
2. 확률(Probability) 접근법: 이 접근법은 LLM이 생성한 여러 대답에 대해 각 대답의 생성확률을 계산하고 확률이 가장 높은 대답을 최종 대답으로 선택합니다. 응답 생성 확률은 응답에 포함된 각 토큰의 생성 확률을 곱하여 계산할 수 있습니다. Transformer가 출력할 확률은 과거의 토큰열을 조건으로 한 다음 토큰의 조건부 확률입니다. 각 토큰의 생성 확률의 곱은 전체 응답의 우도를 나타내므로 생성확률이 높은 응답은 더 자연스럽고 친절한 응답으로 해석할 수 있습니다.
그럼 실제로 다수결을 사용하여 Self-Consistency를 적용해 보겠습니다. 다음은 GSM8K 벤치마크(Cobbe et al, 2021)에 포함된 산술문장 문제입니다.
여기서도 기계번역으로 한국어로 한것을 사용합니다.
참고로 '단계별로 생각해 봅시다'는 Zero-Shot CoT 프롬프트의 지시로서 저자가 추가한 문언입니다. 이것을 ChatGTP-4.5에서 나온 결과를 보여줍니다. 결과는 Self-Consistency를 적용하여 보다 시노리할 수 있는 답변을 얻을 수 있습니다.
실제로 GSM8K 문제에서 무작우리ㅗ 추출한 100문제에 대해 투표수를 1에서 40까지 변화시켜 Self-Consistency를 적용한 결과를 아래 그림과 같이 나타납니다. 투표수가 6회까지는 정답률이 향상되고 있지만, 그 이상의 횟수에서는 그다지 변화가 보이지 않습니다. 이는 투표수가 일정수 이상이 되면 정답률이 포화되기 때문입니다. Self-Consistency는 LLM 출력의 변동을 억제하고 보다 신뢰할 수 있는 결과를 얻는 효과적인 방법이지만, 투표수를 적절하게 설정해야 합니다.
프롬프트 체인은 복잡한 작업을 간단한 부분 작업으로 나누고 순서대로 처리하여 LLM 성능을 향상시키는 기술입니다. 이 기술의 기본 아이디어는 복잡한 작업을 부분작업으로 나누고 각 하위 프롬프트가 특정 부분 작업에 초점을 맞추는 것입니다. 그리고 이전 단계의 출력을 다음 단계의 입력으로 사용하여 전체 작업을 효과적으로 해결합니다.
프롬프트 체인을 적용하는 단계는 다음과 같습니다.
복잡한 작업을 분석하고 간단한 부분 작업으로 나눕니다.
각 부분 태스크에 해당하는 서브 프롬프트를 작성하십시오.
서브 프롬프트를 순서대로 실행하고 각 단계의 출력을 다음 단계의 입력으로 사용합니다.
마지막 서브 프롬프트의 출력을 최종 출력으로 합니다.
여기에서는 조금 복잡한 프롬프트의 예로서 다음과 같은 프롬프트를 생각해 봅시다.
이 프롬프트를 ChatGPT-4.5를 통해 나온 결과는 아래와 같습니다.
이번에는 프롬프트 체인을 적용해 봅시다. 첫번째, 이 작업은 다음 2가지 작업으로 나눌 수 있습니다.
대규모 언어 모델의 가장 중요한 특징을 3개 추출합니다.
추출된 특징을 300자 이내에 요약합니다.
이러한 작업에 대한 프롬프트를 디자인하면 다음과 같은 프롬프트와 응답을 얻을 수 있습니다. 첫번째 프롬프트는 다음과 같습니다.
두번째 프롬프트는 첫번째 프롬프트의 출력을 입력으로 다음과 같습니다.
위와 같이 3가지 특징이 추출되고 그것을 통해 300자 이내에 출력을 요약합니다.
따라서, 프롬프트 체인을 사용하면 복잡한 작업을 효과적으로 해결할 수 있습니다.
©2024-2025 GAEBAL AI, Hand-crafted & made with Damon Jaewoo Kim.
GAEBAL AI 개발사: https://gaebalai.com
AI 강의 및 개발, 컨설팅 문의: https://talk.naver.com/ct/w5umt5