Chain of Code: Reasoning with a Language Model-Augmented Code Emulator

­무무치킨자몽·2023년 12월 26일
0

논문 리뷰

목록 보기
15/15

https://twitter.com/i/status/1733169631949701425

아직 LLM에 대해서 잘 알지는 못 하지만 지금까지 논문을 읽으면서 느낀 점은 Vision task에 비해서 LM 영역은 general task 수행 능력을 위해서 정말 다양한 시도를 하고 있구나 였다.
Chain of Code도 그러한 시도 중 하나인 듯 하다.
이 논문은 LM의 code-driven reasoning 성능을 향상시키기 위한 간단하고 효과적인 extension으로써 Chain of Code를 공개했다. 그리고 LMulator라 하여 실행 가능한 코드는 interpreter로 실행하고 불가능한 것은 LM을 활용해 emulate하는 방식을 제안한다.

Chain of Thought

이는 복잡한 task를 작은 task로 쪼개어 처리할 수 있게 하는 기법 중 하나로 LM이 코드를 생성하고 실행해보도록 하여 추론 능력을 향상시키고자 한다. 그동안 LLM은 수학 문제처럼 추론 단계가 이어지는 형식의 문제에 약하다고 여겨져 왔는데, 이를 타파한 것이다.
'Chain-of-Thought Prompting Elicits Reasoning in Large Language Models'라는 논문에서 문제의 인과 관계에 대해서 차근차근 step 별로 풀어서 전개하면 LLM이 정답에 더 잘 도달할 수 있는 개념을 제시했다. 이는 문제에서 바로 답을 추론하는 것이 아니라 "문제~풀이 과정~답"과 같은 형식을 추구하는 형태로 prompt를 구성하는 기법으로 어느 정도 그 효능이 증명되었다.

위와 같은 방식으로, LLM이 sequence의 빈칸을 채우면서 문장을 생성하는 특징을 반영하여 task의 중간 과정을 단계 별로 풀이하듯이 수행하도록 했을 때 성능이 좋아진 것을 확인할 수 있었다.

위는 Chain of Thought의 예시들이다.

한계

그러나 위와 같은 방식으로는 semantic task와 같이 코드로 표현하기 어려운 것들이 있어 다룰 수 있는 task의 한계가 있었다. 이를 보완하기 위해 제안된 것이 Chain of Code이다. 이는 Chain-of-Thought의 간단한 확장으로 LM 코드 중심 추론을 개선하는 이 접근법은 프로그램의 의미론적 하위 작업을 의사 코드로 형식화하여 인터프리터가 정의되지 않은 동작을 명시적으로 포착하고 LM으로 시뮬레이션하도록 넘겨주도록 권장하며, 빅벤치 하드에서 생각의 사슬보다 12% 향상된 84%를 달성한다.

Chain of Code: Reasoning with an LMulator

LMulator는 natural language, pseudocode, running code 세 개의 조합으로 이뤄져 있으며, Code Generation과 Code Execution 두 단계로 구성되어 있다.

  1. Code Generation: 해결해야 할 Task가 주어지면 CoC는 code 구조로 추론의 하위 단계를 생성한다. 이 코드는 문제를 통해 추론하는 틀을 제공하며, 명시적 코드, 의사 코드 혹은 자연어 형태일 수 있다.
  2. Code Execution: CoC의 핵심 기여는 추론 단계의 코드 생성일 뿐만 아니라 코드의 실행 방식이다. 코드가 생성된 뒤에 Interpreter가 코드 실행을 시도하고, 코드가 성공적으로 실행되면 program status가 update되며 실행이 계속된다. 그러나 코드가 실행되지 않거나 예외가 발생하면 언어 모델을 사용해 실행 시뮬레이션을 진행한다. 이후 LM의 출력에 의해 프로그램 status가 갱신되고 실행이 지속된다. 이 때문에 이를 언어모델과 에뮬레이터의 합성어, LMulator라고 하는 것이다. 이러한 간단한 변경으로 의미론과 수치론을 혼합한 코드에 대한 다양한 새로운 응용이 가능하게 되었다.

후에, Code Implementation을 통해 python (이 논문에서는 python 언어만 고려함)의 try and except를 사용해 program state를 유지하며 어떻게 response를 출력할지 결정할 때는 CoT를 이용한다.

CoC의 장점은
1. code의 장점과 LM의 semantic & commonsense knowledge를 결합함으로써 코드로 표현 불가능한 문제를 처리할 수 있게 되었다.
2. 고품질 데이터로부터 얻어낼 수 있는 LM의 코딩 능력을 활용한다.
3. formal & expressive한 코드를 작성하면서 강력한 연산 도구를 활용할 수 있다.
4. CoT와 같은 intermediate steps 기반의 추론 기술의 장점을 그대로 상속했다.

profile
눈 앞에 치킨 무와 파닭 치킨과 자몽 주스가 있을 때 지었던 닉네임

0개의 댓글