ChatPaper.aiChatPaper

Цепочка кода: Рассуждения с использованием языковой модели, дополненной эмулятором кода

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

December 7, 2023
Авторы: Chengshu Li, Jacky Liang, Andy Zeng, Xinyun Chen, Karol Hausman, Dorsa Sadigh, Sergey Levine, Li Fei-Fei, Fei Xia, Brian Ichter
cs.AI

Аннотация

Код предоставляет общую синтаксическую структуру для создания сложных программ и выполнения точных вычислений в сочетании с интерпретатором кода — мы предполагаем, что языковые модели (LMs) могут использовать написание кода для улучшения рассуждений в стиле "Цепочки Мысли" (Chain of Thought) не только для логических и арифметических задач, но и для лингвистических (и особенно для тех, которые представляют собой смесь обоих типов). Например, рассмотрим задачу, в которой LM предлагается написать код, подсчитывающий количество случаев сарказма в эссе: LM может столкнуться с трудностями при написании реализации функции "detect_sarcasm(string)", которая могла бы быть выполнена интерпретатором (обработка крайних случаев может оказаться непреодолимой). Однако LM всё же может предложить корректное решение, если использовать её не только для написания кода, но и для выборочной "эмуляции" интерпретатора, генерируя ожидаемый результат функции "detect_sarcasm(string)" и других строк кода (например, тех, которые интерпретатор не смог бы скомпилировать). В данной работе мы предлагаем "Цепочку Кода" (Chain of Code, CoT) — простое, но удивительно эффективное расширение, улучшающее рассуждения LM, основанные на коде. Основная идея заключается в том, чтобы побудить LM форматировать лингвистические подзадачи в программе в виде гибкого псевдокода, который компилятор может явно обрабатывать для выявления неопределённых поведений и передавать их на симуляцию с помощью LM (в качестве "LMулятора"). Эксперименты показывают, что "Цепочка Кода" превосходит "Цепочку Мысли" и другие базовые подходы на различных тестах; на BIG-Bench Hard "Цепочка Кода" достигает 84%, что на 12% выше, чем у "Цепочки Мысли". CoT хорошо масштабируется как для больших, так и для маленьких моделей и расширяет круг задач на рассуждение, которые LM могут корректно решать, "думая в коде". Веб-страница проекта: https://chain-of-code.github.io/.
English
Code provides a general syntactic structure to build complex programs and perform precise computations when paired with a code interpreter -- we hypothesize that language models (LMs) can leverage code-writing to improve Chain of Thought reasoning not only for logic and arithmetic tasks, but also for linguistic ones (and in particular, those that are a mix of both). For example, consider prompting an LM to write code that counts the number of times it detects sarcasm in an essay: the LM may struggle to write an implementation for "detect_sarcasm(string)" that can be executed by the interpreter (handling the edge cases would be insurmountable). However, LMs may still produce a valid solution if they are used not only to write the code, but also to selectively "emulate" the interpreter by generating the expected output of "detect_sarcasm(string)" and other lines of code (e.g., that the interpreter could not compile). In this work, we propose Chain of Code (CoT), a simple yet surprisingly effective extension that improves LM code-driven reasoning. The key idea is to encourage LMs to format linguistic sub-tasks in a program as flexible pseudocode that the compiler can explicitly catch undefined behaviors and hand off to simulate with an LM (as an "LMulator"). Experiments demonstrate that Chain of Code outperforms Chain of Thought and other baselines across a variety of benchmarks; on BIG-Bench Hard, Chain of Code achieves 84%, a gain of 12% over Chain of Thought. CoT scales well with large and small models alike, and broadens the scope of reasoning questions that LMs can correctly answer by "thinking in code". Project webpage: https://chain-of-code.github.io/.
PDF334December 15, 2024