Efficiently Estimating Data Efficiency for Language Model Fine-tuning
Gyung Hyun Je, Colin Raffel
TL;DR
This work tackles the problem of predicting how many fine-tuning examples a language model needs to achieve a target performance, a quantity highly variable across tasks. It defines data efficiency as the area under the task-specific performance curve over a maximum budget and introduces CoS-Low, a predictor based on the median cosine similarity of per-sample gradients computed on low-confidence examples, using only a small labeled set. By mapping a predicted AUC to a data-efficiency curve via a simple power function, the method can estimate the required data budget with low error (MAE ~0.086) and substantial cost savings across 30 real-world tasks. The approach generalizes across model families, extends to out-of-distribution tasks, and provides a practical tool to optimize annotation and fine-tuning effort in resource-constrained settings.
Abstract
While large language models (LLMs) demonstrate reasonable zero-shot capability across many downstream tasks, fine-tuning is a common practice to improve their performance. However, a task's data efficiency--i.e., the number of fine-tuning examples needed to achieve a desired level of performance--is often unknown, resulting in costly cycles of incremental annotation and retraining. Indeed, we demonstrate across a curated set of 30 specialized tasks that performant LLMs may struggle zero-shot but can attain stronger performance after fine-tuning. This motivates the need for methods to predict a task's data efficiency without requiring incremental annotation. After introducing a concrete metric that quantifies a task's data efficiency, we propose using the gradient cosine similarity of low-confidence examples to predict data efficiency based on a small number of labeled samples. We validate our approach on a diverse set of tasks with varying data efficiencies, attaining 8.6% error in overall data efficiency prediction and typically eliminating hundreds of unnecessary annotations on each task. Our experiment results and implementation code are available on GitHub.
