Chain of Code: Redeneren met een Taalmodel-Versterkte Code Emulator
Chain of Code: Reasoning with a Language Model-Augmented Code Emulator
December 7, 2023
Auteurs: Chengshu Li, Jacky Liang, Andy Zeng, Xinyun Chen, Karol Hausman, Dorsa Sadigh, Sergey Levine, Li Fei-Fei, Fei Xia, Brian Ichter
cs.AI
Samenvatting
Code biedt een algemene syntactische structuur om complexe programma's te bouwen en precieze berekeningen uit te voeren wanneer het wordt gecombineerd met een code-interpreter -- we veronderstellen dat taalmodellen (LMs) het schrijven van code kunnen benutten om Chain of Thought-redenering te verbeteren, niet alleen voor logische en rekenkundige taken, maar ook voor taalkundige taken (en in het bijzonder die welke een mix van beide zijn). Beschouw bijvoorbeeld het aanmoedigen van een LM om code te schrijven die het aantal keren telt dat het sarcasme detecteert in een essay: de LM zou kunnen worstelen met het schrijven van een implementatie voor "detect_sarcasm(string)" die door de interpreter kan worden uitgevoerd (het omgaan met de edge cases zou onoverkomelijk zijn). Echter, LMs kunnen nog steeds een geldige oplossing produceren als ze niet alleen worden gebruikt om de code te schrijven, maar ook om selectief de interpreter te "emuleren" door het verwachte resultaat van "detect_sarcasm(string)" en andere regels code te genereren (bijvoorbeeld die de interpreter niet kon compileren). In dit werk stellen we Chain of Code (CoT) voor, een eenvoudige maar verrassend effectieve uitbreiding die de code-gestuurde redenering van LMs verbetert. Het kernidee is om LMs aan te moedigen taalkundige sub-taken in een programma te formatteren als flexibele pseudocode, zodat de compiler expliciet ongedefinieerd gedrag kan opvangen en kan overdragen om te simuleren met een LM (als een "LMulator"). Experimenten tonen aan dat Chain of Code Chain of Thought en andere baseline-methoden overtreft op een verscheidenheid aan benchmarks; op BIG-Bench Hard behaalt Chain of Code 84%, een verbetering van 12% ten opzichte van Chain of Thought. CoT schaalt goed met zowel grote als kleine modellen, en verbreedt het scala aan redeneervragen die LMs correct kunnen beantwoorden door "in code te denken". Projectwebpagina: 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/.