Multi-Objective Fine-Tuning for Enhanced Program Repair with LLMs
<|reference_start|>Multi-Objective Fine-Tuning for Enhanced Program Repair with LLMs: Large language models (LLMs) have demonstrated remarkable capabilities on a broad spectrum of downstream tasks. Within the realm of software engineering, specialized tasks on code, such as program repair, present unique challenges, necessitating fine-tuning to unlock state-of-the-art performance. Fine-tuning approaches proposed in the literature for LLMs on program repair tasks are however generally overlooking the need to reason about the logic behind code changes, beyond syntactic patterns in the data. High-performing fine-tuning experiments also usually come at very high computational costs. With MORepair, we propose a novel perspective on the learning focus of LLM fine-tuning for program repair: we not only adapt the LLM parameters to the syntactic nuances of the task of code transformation (objective 1), but we also specifically fine-tune the LLM with respect to the logical reason behind the code change in the training data (objective 2). Such a multi-objective fine-tuning will instruct LLMs to generate high-quality patches.   We apply MORepair to fine-tune four open-source LLMs with different sizes and architectures. Experimental results on C++ and Java repair benchmarks show that the implemented fine-tuning effectively boosts LLM repair performance by 7.6% to 10% in Top-10 repair suggestions. We further show that our fine-tuning strategy yields superior performance compared to the incumbent state-of-the-art in fine-tuned models for program repair, Fine-tune-CoT and RepairLLaMA.<|reference_end|>
@article{yang2024multi-objective,
    title={Multi-Objective Fine-Tuning for Enhanced Program Repair with LLMs},
    author={Boyang Yang, Haoye Tian, Jiadong Ren, Hongyu Zhang, Jacques Klein,
  Tegawend'e F. Bissyand'e, Claire Le Goues, Shunfu Jin},
    journal={arXiv preprint arXiv:2404.12636},
    year={2024},
    archivePrefix={arXiv},
    eprint={2404.12636},
    primaryClass={cs.SE}
}