Decomposition 기법의 주요 오류는 하위 문제에서 발생한 오류가 전파되는 것
--> 오류 1) 문맥에서 잘못된 정보를 추출하는 문제
--> 오류 2) 모든 정보를 수집하지 못하고 누락이 발생하는 문제
문제의 적절한 분해 수는 성능에 도움이 됨
문제를 분해 하기에는 난해한 질문도 있음
Least-to-Most Prompting
CoT 프롬프트에서 해결하기 어려운 추론 문제를 풀기 위해 제안된 기법
복잡한 문제를 간단한 순차적인 하위 문제들로 분해하 후 순차적으로 해결하는 기법
이전에 푼 하위 문제가 다음 하위 문제를 푸는데 도움을 주는 방식
Least-to-Most Prompting은 교육 심리학에서 가져온 개념
학생이 최소한의 도움으로 시작해, 어려움이 생길 때 점진적으로 도움을 늘리는 방식
하위 문제로 분해하고 순차적으로 해겷하는 기법
이 기법만으로도 모델 개선효과를 낸다
이 기법의 오류는 중간 과정에서 하위 문제와 현재 문제를 연결할 때 주로 발생한다
서로 다른 도메인에서는 이 프롬프트를 일반화해서 사용하기 어려움
동일한 도메인 내에서도 일반화하기 어려움
Decomposed Prompting
Least-to-Most Prompting과 유사한 기법. 보다 하위 작업 처리에 최적화된 기법이다
특정 하위 작업을 위해 미리 설계한 프롬프트를 재사용하는 기법
특정 하위 작업 처리를 위한 별도 프로그램을 모듈식으로 활용하는 기법
각 하위 작업 처리를 특정 LLM이나 Agent에 위임할 수 있다.
Decomposer는 복잡한 작업을 처리하기 위해 프로그램을 생성한다.
프로그램은 하위 작업의 함수,입력,결과를 순서대로 나열한 것이다
프로그램의 하위 작업들은 순서대로 컨트롤러가 알아서 처리한다.
복잡한 문제를 하위 문제로 분할하고 그 하위 작업을 최적화 시키는 기법
계층적 분해 뿐 아니라 재귀적인 분해를 통해서도 해결하는게 가능함
Least-to-Most Prompting보다 확장성이 있다
하위 문제 분해와 처리에 필요함 프롬프트를 모두 설계해야함
Tree of Thought
문제 해결을 위해 다양한 해결 전략을 탐색하도록 만드는 기법
ToT는 트리처럼 여러 생각을 탐색할 수 있다
LLM과 CoT의 추론 문제의 한계를 극복하기 위해 나온 기법
이미 뛰어난 성능을 보이는 작업에서는 이 기법을 적용할 필요가 없음
다양한 생각을 탐색하는 기법이니 많은 자원 소모가 발생할 수 있음
작업에 맞게 생각을 생성하고 평가하는 프롬프트를 설계해야 함
ToT Framework
문제 해결 과정을 어떻게 생각 단계로 분해할 것인가? -> 생각 분해
각 중간 생각 상태에서 다음 생각은 어떻게 생성할 것인가? -> 생각 생성기
생각들은 어떻게 평가할 것인가? -> 상태 평가기
생각은 어떻게 탐색할 것인가? -> 탐색 알고리즘
Plan-ans-solve
문제를 해결하기 전에 먼저 계획을 수립하고 세운 계획에 따라 하위 작업을 수행하는 기법
Zero-shot CoT 기법처럼 간단하게 프롬프트 지침만으로 적용해볼 수 있음
Zero-shot CoT 기법의 문제점인 계산 오류와 단계 누락 오류를 해결하기 위해 나옴
--> 계산 오류 : 잘못된 계산으로 인해 오답을 유도하는 오류
--> 단계 누락 오류 : 여러 단계가 필요한 경우 중간 추론 단계가 누락되어서 발생하는 오류
--> 의미 오해 오류 : 문제를 잘못 이해하거나 추론의 일관성이 부족해 발생하는 오류
PS 프롬프트 기법은 문제를 이해하고 하위 작업으로 나눈 뒤, 단계별로 수행하는 방법
Zero-shot CoT 처럼 프롬프트에 문구를 추가하는 것만으로도 적용할 수 있는 기법
산술 추론, 상식 추론과 같은 분야에서 Zero-shot CoT보다 일관되게 우수한 성능을 보임
기호적 추론 분야에서 Few-shot CoT보다 우수한 성능을 보임
Skeleton-of-Thought
LLM이 최종 응답을 완료하는데 걸리는 응답 시간을 줄이기 위해 나옴
인간의 글쓰기 방식을 참고해서 제안된 기법
인간은 글을 쓸 때 전체적인 구조나 뼈대를 잡은 후 각 부분을 채워나가는 식으로 글을 작성
LLM이 응답의 구조를 먼저 만든 뒤 각 부분을 병렬로 처리해 내용을 완성시킴
두 가지 단계로 구성됨
--> 1) Skeleton 단계 : 답변의 골격 또는 주요 포인트들을 생성하는 단계
--> 2) Point-Expanding 단계 : 각 골격 또는 포인트를 확장해서 응답을 완료하는 단계
모든 포인트가 응답이 완료되면 최종 응답이 만들어짐
SoT는 최종 답변을 만들기 위해 독립적인 포인트들로 분리해서 병렬로 처리하는 기법
응답 시간을 크게 단축시킬 수 있다
독립적인 포인트들로 분리시킬 수 없는 질문도 있다
SoT를 실용적으로 구현하기 위해서는 별도의 라우터 모듈을 적용해야 할 수 있다
라우터 모둘의 구현은 LLM+라우팅 프롬프트 or 작은 언어 모델을 라우터로 훈련
현재의 SoT는 독립적인 포인트들로 분리될 때만 사용 가능
Graph-of-Thought를 이용해서 포인트들을 그래프로 구조화해서 처리하는 것도 가능