PAL (Programaided Language Models)
PAL(Programaided Language Models)은 Gao et al. (2022)이 제안한 접근법으로, LLM이 자연어로 된 문제를 읽고, 문제 해결 과정을 단계적으로 프로그램으로 변환해 실행하는 방식입니다. 기존의 ChainofThought(CoT) 방식이 중간 추론 단계를 텍스트로 표현했다면, PAL은 이 단계를 코드로 표현해 Python 인터프리터와 같은 실행 환경에서 결과를 도출합니다.
PAL의 특징은 다음과 같습니다:
1. 코드 기반 추론: 중간 단계를 코드로 변환하여 문제 해결의 명확성과 정확성을 높입니다.
2. 런타임 실행: 생성된 코드를 실행하여 답변을 얻음으로써 LLM의 계산 오류를 최소화합니다.
3. 확장성: 수학, 날짜 계산, 데이터 변환 등 다양한 작업에 활용 가능합니다.
PAL은 문제 해결을 위해 다음과 같은 단계를 수행합니다:
(1) 자연어 문제 입력
사용자는 LLM에 자연어로 된 문제를 입력합니다.
예: "Roger는 5개의 테니스 공을 가지고 있습니다. 그는 각각 3개의 테니스 공이 들어 있는 2개의 캔을 샀습니다. 총 테니스 공의 개수는 몇 개인가요?"
(2) 코드 생성
LLM은 문제를 코드로 변환합니다. 코드에는 변수 정의와 계산 논리가 포함됩니다.
예:
python
tennis_balls = 5
bought_balls = 2 3
answer = tennis_balls + bought_balls
(3) 코드 실행
Python 인터프리터와 같은 런타임 환경에서 코드를 실행하여 결과를 도출합니다.
출력: 11
(4) 출력 제공
실행 결과를 사용자에게 반환합니다.
예: "Roger는 총 11개의 테니스 공을 가지고 있습니다."
장점
1. 계산 정확도: 코드 실행을 통해 LLM의 계산 실수를 방지.
2. 가독성: 복잡한 문제 해결 과정을 명시적으로 표현.
3. 다양한 도메인 지원: 수학적 문제, 날짜 계산, 데이터 변환 등에서 높은 성능.
CoT와의 차이점
더 자세히 알아보기
이 이미지는 Chain-of-Thought(CoT)와 Program-aided Language models의 문제 해결 방식을 비교하고 있습니다. 두 접근 방식의 차이점을 분석해보겠습니다:
1. Chain-of-Thought 접근 방식 (왼쪽):
- 자연어로 단계별 풀이를 설명
- 더 서술적이고 일반적인 영어 문장 사용
- 첫 번째 예제는 정확하게 해결했으나
- 두 번째 예제에서 계산 오류 발생 (X 표시)
- 중간 계산 과정이 덜 구조화되어 있음
2. Program-aided 접근 방식 (오른쪽):
- 프로그래밍 변수와 유사한 명명 규칙 사용
- 각 단계를 명확한 변수에 할당
- 수식을 명시적으로 표현
- 계산 과정이 더 구조화되고 추적 가능
- 두 문제 모두 정확하게 해결 (✓ 표시)
주요 장점들:
1. 구조화된 변수 사용:
- tennis_balls = 5
- bought_balls = 2 * 3
- loaves_baked = 200
- loaves_sold_morning = 93
2. 명확한 수식 표현:
- answer = tennis_balls + bought_balls
- answer = loaves_baked - loaves_sold_morning - loaves_sold_afternoon + loaves_returned
3. 추적 가능성:
- 각 단계가 변수로 저장되어 검증이 용이
- 오류 발생 시 어느 단계에서 문제가 있는지 파악하기 쉬움
이 비교는 프로그래밍적 접근 방식이 복잡한 수학 문제 해결에 있어 더 정확하고 신뢰할 수 있는 결과를 제공할 수 있음을 보여줍니다.
1) 수학 문제 해결
복잡한 계산 문제를 코드로 변환해 정확한 결과를 도출.
2) 날짜 및 시간 계산
예: "오늘은 2023년 2월 27일이다. 25년 전에 태어난 날짜를 MM/DD/YYYY 형식으로 알려줘."
코드 생성 및 실행:
python
today = datetime(2023, 2, 27)
born = today relativedelta(years=25)
answer = born.strftime('%m/%d/%Y')
3) 데이터 변환
사용자 요청에 따라 데이터를 원하는 형식으로 변환.
4) 프로그래밍 교육
코드를 자동으로 생성하고 실행 결과를 제공하여 프로그래밍 학습 지원.
학습 자료
논문: [Gao et al., 2022 논문]( https://arxiv.org/abs/2201.00000 )
Python 프로그래밍 기초 및 데이터 처리 개념.
실습 환경
LangChain: PAL 구현을 위한 Python 기반 프레임워크.
OpenAI API: LLM과 Python 코드를 통합하는 데 유용.
Jupyter Notebook: 코드 작성 및 실행 환경.
필요 기술
Python 및 datetime 모듈에 대한 이해.
PyTorch나 TensorFlow를 활용한 LLM 학습 및 응용.
아래는 날짜 계산 문제를 해결하기 위한 PAL 코드 예시입니다:
from datetime import datetime
from dateutil.relativedelta import relativedelta
문제: 오늘은 2023년 2월 27일이다. 25년 전에 태어난 날짜를 구하시오.
today = datetime(2023, 2, 27)
born = today relativedelta(years=25)
answer = born.strftime('%m/%d/%Y')
print(f"태어난 날짜는 {answer}입니다.")
출력:
태어난 날짜는 02/27/1998입니다.
PAL은 LLM의 계산 능력과 Python 코드 실행 환경을 결합하여 더욱 강력하고 정확한 문제 해결 도구를 제공합니다. 이 접근법은 특히 수학적 계산, 시간 처리, 데이터 변환 등에서 큰 잠재력을 가지고 있습니다.