Generative AI/Prompt Engineering

Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning by Large Language Models

youngerjesus 2024. 11. 2. 07:04

https://arxiv.org/abs/2305.04091


Abstract:

  • 현 시점에서 다단계 추론 문제를 해결하기 위해서 가장 많이 사용되는 프롬프트 기법이 Few-shot Chain-of-Thought (CoT) 프롬프트 임.
  • 그치만 이는 수작업으로 만들어진 추론 예시가 몇 개 필요하다는 단점이 있음. 그래서 개발된게 Zero-shot CoT 기법.
  • 하지만 Zero-shot-CoT는 계산 오류, 단계 누락 오류, 의미 오해 오류라는 세 가지 문제점을 가지고 있다고 함:
    • 계산 오류:
      • 수치 계산에서 오류가 발생하는 것.
    • 단계 누락 오류:
      • 전체 추론 과정에서 중간 단계를 누락시키는 경우
    • 의미 오해 오류:
      • 문제의 의미를 완전히 이해하지 못하는 오류
  • 저자가 제안하는 기법인 Plan-and-Solve 프롬프트 기법은 여기서 단계 누락 오류를 해결하기 위한 기법임.
  • PS 프롬프트는 두 가지 구성 요소로 이뤄져있는데 먼저 전체 작업을 하위 작업으로 처리하는 계획을 세우고, 그 다음 그 계획에 따라서 실행하는 것.
  • 그리고 저자는 PS 프롬프트에서 계산 오류를 줄이고 추론 단계의 품질을 향상시키기 위한 PS+ 프롬프트도 만들었다고 함.
  • 이렇게 만들어진 프롬프트를 3가지 추론 작업에서 실험해봤을 때 이전의 Zero-shot CoT 기법보다 일관되게 성능이 뛰어났다고 한다.
  • 코드 Github 는 여기임. https://github.com/AGI-Edgerunners/Plan-and-Solve-Prompting

 

 

Introduction:

  • Zero-shot CoT가 다단계 추론 작업에서 성공을 거뒀음에도 불구하고 발견한 문제점:
    • 계산 오류(7%의 테스트 예제): 잘못된 계산으로 인해 오답을 유도하는 오류
    • 단계 누락 오류(12%의 테스트 예제): 여러 단계가 필요한 경우 중간 추론 단계가 누락되어 발생하는 오류
    • 의미 오해 오류(27%의 테스트 예제): 문제의 의미를 잘못 이해하거나 추론 단계의 일관성이 부족하여 발생하는 오류
  • Zero-shot CoT에서 발생하는 단계 누락 오류를 해결하기 위해, 저자들은 Plan-and-Solve(PS) 프롬프팅을 제안.
  • PS 프롬프트는 두 가지 구성요소로 이뤄져있음:
    • 계획 수립: 문제를 먼저 이해하고 전체 작업을 더 작은 하위 작업으로 나누는 계획을 세움
    • 계획 실행: 세운 계획에 따라 하위 작업을 단계별로 수행
    • 계획을 실행한 이후에 정답을 추출하기 위해서 "따라서 답은 " (Therefore, the answer is 이라는 문구가 추가됨.
    • 정확하게는 아래의 이미지를 참고

 

 

PS+ 프롬프트 간략하게:

  • Zero-shot CoT의 계산 오류를 해결하고 생성된 추론 단계의 품질을 향상시키기 위해, PS 프롬프팅에 더 상세한 지침을 추가헀음.
  • 보면 "관련 변수와 해당 숫자를 추출한다" 와 "중간 결과를 계산한다(계산과 상식에 유의)" 가 있음.
    • 중간 결과를 계산한다의 의미: 모델이 문제를 해결하는 과정에서 단순히 수치를 계산하는 것에 그치지 않고, 상식적인 맥락을 고려하여 논리적으로 타당한 중간 결과를 도출하도록 유도하는 지침.

 

 

PS 프롬프트:

  • 입력된 문제를 해결하면서 잘못된 계산과 추론 단계 누락으로 인한 오류를 피하는 것이 목표임.
  • 이를 위해서 두 가지 기준을 만족하는 템플릿을 구성하는게 목표:
    • LLM이 하위 작업을 결정하고 이를 수행하도록 유도해야 함
    • LLM이 계산과 중간 결과에 더 많은 주의를 기울이도록 안내하여, 가능한 한 정확하게 수행되도록 해야함.
  • 하위 작업을 결정하고 이를 수행하도록 유도하는 방법:
    • 프롬프트에 다음 지침을 추가한다.
    • "먼저 문제를 이해하고 이를 해결하기 위한 계획을 세워봅시다. 그런 다음, 그 계획을 수행하여 단계별로 문제를 해결해 봅시다.” (Let’s first understand the problem and devise a plan to solve the problem. Then, let’s carry out the plan and solve the problem step by step.”)
    • 이러한 프롬프트를 LLM에 전달하면, LLM은 추론 과정을 출력하게 되고, 기본적으로 탐용적 디코딩 전략에 따라서 1개의 출력을 생성하게 됨.
  • 계산과 중간 결과에 더 많은 주의를 기울이도록 안내하여 정확한 계산을 수행하도록 유도하는 방법:
    • "계산에 유의" (pay attention to calculation) 이라는 문구를 추가해서 더 정확하게 계산하도록 함.
    • "관련 변수와 해당 숫자를 추출한다" (extract relevant variables and their corresponding numerals) 라는 문구를 추가해서 LLM 이 문제에서 중요한 정보를 놓치지 않도록 지시한다.
    • LLM이 중요한 변수를 누락하면 추론 단계도 누락될 가능성이 높다고 가정하기 때문임
  • 추가로 "중간 결과를 계산한다" (calculate intermediate results) 라는 문구를 추가해서 관련 있고 중요한 추론 단계를 생성하는 능력을 향상시키도록 유도함.
  • 답변을 추출할 땐 첫 번째 단계에서 생성한 추론 텍스트로부터 최종적인 숫자 답변을 추출하도록 추가적인 프롬프트를 구성함. 답변을 추론 과정과 분리함으로써, 모델의 정확도를 평가하기가 쉬워질거임.

 

 

전체적인 실험 요약:

  • 산술 추론: Zero-shot CoT보다 상당히 우수한 성능을 보였으며, 일부 경우 Few-shot 방법과 비슷한 성능을 나타냈음.
  • 상식 추론: Zero-shot CoT보다 우수하지만, Few-shot CoT보다는 성능이 낮았음.
  • 기호적 추론: Zero-shot CoT뿐만 아니라 일부 경우 Few-shot CoT보다도 우수한 성능을 보였음.

 

 

Analysis:

  • 자기 일관성(Self-Consistency)을 사용한 프롬프팅 결과:
    • PS+ 프롬프팅에 SC를 적용한 경우가 SC를 적용하지 않은 경우보다 성능이 크게 향상되었다고 함.
  • LLM은 프롬프트에 더 상세한 지침이 포함될 때 더 높은 품질의 추론 텍스트를 생성할 수 있었다고 함:
    • 프롬프트 설계의 중요성이 강조됨. 더 상세하고 명확한 지침이 LLM 의 성능을 최적화할 수 있다.
    • 아래 테이블 참고