관심있는 NLP 논문을 읽어보고 간단히 정리했습니다.
혹시 부족하거나 잘못된 내용이 있다면 댓글 부탁드립니다 🙇♂️
[Google DeepMind, Stanford University, University of California, Berkeley]
- LM의 code-driven reasoning 능력을 향상시켜주는 간단하면서도 효과적인 extension, Chain of Code (CoC) 공개
- 실행 가능한 코드는 interpreter로 실행해보고, 그럴 수 없는 것은 LM을 활용하여 emulate하는 방식, LMulator 도입
1. Introduction
- 복잡한 문제를 여러 세부 태스크로 쪼개어 처리하는 Chain of Thought (CoT) 방식이 크게 주목을 받음
- LM으로 하여금 코드를 생성하고 실행해보도록 하는 것이 LM의 추론 능력을 향상시키는 데 도움이 되는 것으로 잘 알려져 있음
- 그러나 코드로 표현하기 어려운 semantic 태스크도 존재함
2. Realted Work
- Language Model Reasoning
- few-shot prompting, abstract reasoning
- Chain of Thought, least-to-most, ScratchPad (code simulation ability)
- graphical structure, mixture of expert-based sampling
- Language Model Tool Use
- 모델로 하여금 수학 문제를 풀기 위한 계산기, 코드 인터프리터, 데이터 베이스 등을 사용하도록 하는 방식
- Language Model Program Synthesis
- LM을 programming assistants로 활용
- robotics, agents, vision
3. Contributions
- Chain of Code, an approach towards reasoning with language models through writing and executing code
- CoC는 code의 범위를 벗어나는 semantic reasoning problems도 처리 가능한 방식임
4. Chain of Code: Reasoning with LMulator
natural language, pseudocode, and running code, 세 개의 조합으로 이뤄짐
Code Generation과 Code Execution, 두 단계로 구성
4.1. Chain of Code Generation
- 풀어야 할 문제가 주어지면 structure of code로 reasoning substeps를 생성
4.2. Chain of Code Execution
- 일단 코드가 작성되면 code interpreter로 실행해 봄 (python)
- 코드가 실행되지 않거나 exception이 발생하는 경우, LM이 simulate
- 이를 LM과 code emulator를 합쳐 LMulator라고 명명함
- semantics & numerics을 요구하는 code에 대응할 수 있게 됨
4.3. Chain of Code Implementation
- python의 try and except를 사용하여 program state를 유지
- 어떻게 respond할 지를 결정할 때는 CoT 방식을 이용
4.4. Chain of Code Abilities
- code의 장점과 LM의 semantic & commonsense knowledge를 결합함으로써 코드로 표현되기 어려운 문제들을 처리할 수 있게 됨
- 고품질 데이터로부터 얻어낼 수 있는 LM의 코딩 능력을 적극적으로 활용
- formal 하면서도 expressive한 구조의 코드를 작성. 동시에 강력한 연산 도구들을 활용
- CoT와 같은 intermediate steps 기반의 추론 테크닉이 지니는 장점을 그대로 상속
6. Experiments
- Model & Baseline
- CoC (Interweave), CoC (try python except LM), CoC (try python except LM state), Direct QA, CoT
- few-shot prompting, cross-task prompting
- OpenAI models: text-ada-001, text-baggage-001, text-curie-001, text-davinci-003 / PaLM-2 / gpt-3.5 turbo, gpt-4
- Benchmarks
- BIG-Bench: semantic reasoning, numerical reasoning, combination of both
- GSM8K
- Results
- How well does CoC perform overall across a variety of tasks?
- CoC는 human baseline을 포함한 다양한 method보다 엄청난 우위를 보여줌
- Which types of problems does CoC perform best?
- LM이 지닌 semantic reasoning 능력과 code 실행 결과를 조합함으로써 flexibility를 확인함
- How does each aspect of CoC affects overall performance?
- program state를 유지하는 것이 모델 성능 향상에 긍정적인 영향을 줌
- How does CoC scale with model size?
- 모델 사이즈를 키우더라도 CoC 방식이 유효하다는 것을 확인함
- 심지어 작은 사이즈의 모델에서도 효과적이라는 것을 관측 (unlike CoT)
- How does CoC perform as a general-purpose reasoner, with prompt examples from different problems rather than the same problem (which we term cross-task prompting)?
- 모델 사이즈가 충분히 크다면 CoC가 direct prompting을outperform하는 결과
- How does CoC compare with instruciton tuned chat models with and without tools?
- "directly answer" (Direct)와 "think step by step" (CoT) 둘다 CoC (Interweave)에 크게 압도된 결과
- How well does CoC perform overall across a variety of tasks?
7. Insights
Chain of X 시리즈는 정말 끝도 없이 나오는 것 같습니다.
그런데 정말 별 거 아닌 것처럼 느껴지는 아이디어를 잘 발전시켰다는 생각이 드는 논문이었습니다.
실행이 불가능한 코드만을 LM으로 simulate하게 하다니..
매 시점의 state를 기록함으로써 interpreter와 LM의 간극을 이어주었다는 점이 굉장이 흥미롭습니다.
또 하나 재밌는 것은 robotics로의 접목입니다.
문제를 코드만으로 정의하기 어려우면서도 모델의 일반화 성능을 확인하기 딱 좋은 분야이기 때문이죠.
물론 아직까지는 파이썬의 내장 함수나 모듈만으로 처리 가능한 문제들을 다루고 있지만,
이를 다양하게 확장할 수 있다면 어떤 분야에 또 활용이 가능할지 기대가 됩니다.