Planning In Natural Language Improves LLM Search For Code Generation
<|reference_start|>Planning In Natural Language Improves LLM Search For Code Generation: While scaling training compute has led to remarkable improvements in large language models (LLMs), scaling inference compute has not yet yielded analogous gains. We hypothesize that a core missing component is a lack of diverse LLM outputs, leading to inefficient search due to models repeatedly sampling highly similar, yet incorrect generations. We empirically demonstrate that this lack of diversity can be mitigated by searching over candidate plans for solving a problem in natural language. Based on this insight, we propose PLANSEARCH, a novel search algorithm which shows strong results across HumanEval+, MBPP+, and LiveCodeBench (a contamination-free benchmark for competitive coding). PLANSEARCH generates a diverse set of observations about the problem and then uses these observations to construct plans for solving the problem. By searching over plans in natural language rather than directly over code solutions, PLANSEARCH explores a significantly more diverse range of potential solutions compared to baseline search methods. Using PLANSEARCH on top of Claude 3.5 Sonnet achieves a state-of-the-art pass@200 of 77.0% on LiveCodeBench, outperforming both the best score achieved without search (pass@1 = 41.4%) and using standard repeated sampling (pass@200 = 60.6%). Finally, we show that, across all models, search algorithms, and benchmarks analyzed, we can accurately predict performance gains due to search as a direct function of the diversity over generated ideas.<|reference_end|>
@article{wang2024planning,
    title={Planning In Natural Language Improves LLM Search For Code Generation},
    author={Evan Wang, Federico Cassano, Catherine Wu, Yunfeng Bai, Will Song,
  Vaskar Nath, Ziwen Han, Sean Hendryx, Summer Yue, Hugh Zhang},
    journal={arXiv preprint arXiv:2409.03733},
    year={2024},
    archivePrefix={arXiv},
    eprint={2409.03733},
    primaryClass={cs.LG cs.AI cs.CL}
}