Instruction Following Evaluation › Human Evaluation

Michael BrenndoerferDecember 20, 202511 min read
Language AI HandbookAll chapters
Part 36 of 67Instruction Tuning
Chapter 271Instruction Following Evaluation › Human Evaluation
Reading section 3 of 9 · Human Evaluation · 11 minSection 3 of 9 · 11 min

Book contents

Section 3 of 9 · 11 min read

Instruction Following Evaluation › Human EvaluationOne section · Sections in this chapter3 / 9 ↓
Reading tools Definitions & inline links

Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.

Article links

Make inline references clickable

Human evaluation remains the gold standard for assessing instruction following. Asking people gives the most direct answer about whether a response answers accurately and is useful in its context. If we want to build models that satisfy users, their judgment is the ultimate measure of success. However, human evaluation introduces its own complexities that practitioners must understand and handle carefully.

Think of human evaluation as commissioning a review of a restaurant by professional food critics. Their assessments are authoritative and fine-grained, capturing dimensions that no automated system can fully replicate: whether the ambiance matched the occasion, whether the waiter's recommendations were trustworthy, whether the portion sizes felt appropriate for the price. But professional reviews take time and money, and each one reflects the critic's particular palate and expectations. Scaling to thousands of reviews per week requires a different approach.

The basic trade-off in human evaluation is between quality and scale. Individual expert judgments are high-quality but expensive and slow. Crowdsourced judgments from platforms like Amazon Mechanical Turk scale readily but require careful quality control because worker incentives and expertise vary. Arena-style judgments from real users scale naturally and reflect authentic preferences, but the data arrives slowly and unevenly across model pairs.

Pairwise Comparison

The most common human evaluation protocol presents evaluators with two responses to the same instruction and asks them to select the better one. This approach uses a basic insight from psychology: humans are materially better at making relative comparisons than absolute judgments. When asked to rate a response on a 1-10 scale, different evaluators may have wildly different internal calibrations, and even the same evaluator may shift their standards over the course of a long evaluation session. But when asked which of two responses is better, people tend to agree more consistently:

In[10]:
Code
# Pairwise comparison interface structure
pairwise_task = {
    "instruction": "Explain why the sky is blue in simple terms.",
    "response_a": """The sky appears blue because of a phenomenon called
Rayleigh scattering. When sunlight enters Earth's atmosphere, it collides
with gas molecules. Blue light has a shorter wavelength than other colors,
so it scatters more in all directions. When you look up, you see this
scattered blue light coming from all parts of the sky.""",
    "response_b": """The sky is blue because blue light bounces around more
than other colors when sunlight hits the air. Think of it like throwing different sized balls at a bunch of tiny pins. Smaller balls (blue light)
bounce around everywhere, while bigger balls (red light) go straight through.
So when you look up, you see all that bouncing blue light!""",
    "options": ["A is better", "B is better", "Tie"],
}
Out[11]:
Console
INSTRUCTION: Explain why the sky is blue in simple terms.

============================================================
RESPONSE A:
The sky appears blue because of a phenomenon called
Rayleigh scattering. When sunlight enters Earth's atmosphere, it collides
with gas molecules. Blue light has a shorter wavelength than other colors,
so it scatters more in all directions. When you look up, you see this
scattered blue light coming from all parts of the sky.

============================================================
RESPONSE B:
The sky is blue because blue light bounces around more
than other colors when sunlight hits the air. Think of it like throwing different sized balls at a bunch of tiny pins. Smaller balls (blue light)
bounce around everywhere, while bigger balls (red light) go straight through.
So when you look up, you see all that bouncing blue light!

============================================================
Options: ['A is better', 'B is better', 'Tie']

In this example, Response A gives a scientific explanation, while Response B uses an intuitive analogy. The "better" response depends on the user's intent. This shows the subjectivity of the task. If the instruction had specified "explain to a child," most evaluators would prefer Response B. Without that specification, different evaluators may legitimately reach different conclusions based on their assumptions about the target audience. This is not a failure of the evaluation protocol; it is an accurate reflection of the real ambiguity in what "good" means for open-ended instructions.

Pairwise comparison has several advantages. It is cognitively easier than assigning absolute scores because humans are better at relative judgments. It also directly measures what we care about: which model produces more preferred outputs. Additionally, pairwise comparisons naturally aggregate into preference rankings that can inform training through methods like RLHF, creating a direct connection between evaluation methodology and model improvement. The preference signal collected during evaluation is precisely the signal needed to train reward models in the RLHF pipeline.

The key insight is that pairwise comparisons produce ordinal information (A is better than B) rather than cardinal information (A scores 7.3, B scores 6.1). Ordinal information is sufficient for ranking models and for training reward models, which is why pairwise comparison has become the dominant paradigm in both evaluation and preference-based fine-tuning.

Rating Scales

Alternative approaches use rating scales where evaluators score individual responses. This method offers different trade-offs: while potentially less reliable at the individual judgment level, it gives richer information about specific dimensions of quality:

In[12]:
Code
# Likert scale evaluation criteria
evaluation_criteria = {
    "helpfulness": {
        "description": "Does the response address the user's request?",
        "scale": {
            1: "Completely unhelpful, ignores the instruction",
            2: "Mostly unhelpful, partially addresses instruction",
            3: "Somewhat helpful, addresses main points",
            4: "Helpful, addresses instruction well",
            5: "Very helpful, thoroughly addresses instruction",
        },
    },
    "accuracy": {
        "description": "Is the information in the response correct?",
        "scale": {
            1: "Completely inaccurate",
            2: "Mostly inaccurate",
            3: "Mixed accuracy",
            4: "Mostly accurate",
            5: "Completely accurate",
        },
    },
    "coherence": {
        "description": "Is the response well-organized and easy to follow?",
        "scale": {
            1: "Incoherent, disorganized",
            2: "Difficult to follow",
            3: "Somewhat organized",
            4: "Well-organized",
            5: "Excellently structured",
        },
    },
}
Out[13]:
Console
Human Evaluation Rating Criteria:

HELPFULNESS: Does the response address the user's request?
  1: Completely unhelpful, ignores the instruction
  2: Mostly unhelpful, partially addresses instruction
  3: Somewhat helpful, addresses main points
  4: Helpful, addresses instruction well
  5: Very helpful, thoroughly addresses instruction

ACCURACY: Is the information in the response correct?
  1: Completely inaccurate
  2: Mostly inaccurate
  3: Mixed accuracy
  4: Mostly accurate
  5: Completely accurate

COHERENCE: Is the response well-organized and easy to follow?
  1: Incoherent, disorganized
  2: Difficult to follow
  3: Somewhat organized
  4: Well-organized
  5: Excellently structured

Rating scales let more granular feedback and can identify specific weaknesses. For instance, a model might consistently score high on helpfulness but low on accuracy, revealing that it generates plausible-sounding but incorrect information. This diagnostic capability makes rating scales particularly useful during model development, where understanding the nature of failures is as important as measuring overall quality. However, they suffer from calibration issues: different evaluators may interpret "4 out of 5" differently, and even individual evaluators may shift their standards over the course of a long evaluation session.

The multi-dimensional nature of rating scales also reveals trade-offs that pairwise comparison can obscure. A response might score highly on helpfulness and coherence while scoring poorly on accuracy. A pairwise comparison would produce a single preference judgment that shows the evaluator's personal weighting of these dimensions. Rating scales make those dimensions explicit. This gives more actionable feedback for model improvement: you can see that Response A is better because it is more accurate, even though Response B is more clearly written.

Inter-Annotator Agreement

A necessary concern in human evaluation is whether different evaluators agree. We measure this using inter-annotator agreement metrics. Agreement measurement matters because it tells us whether quality differences between responses are clear and objective, or whether subjective factors dominate the evaluation. High agreement suggests the evaluation is measuring something real and stable. Low agreement indicates either that the responses are similar in quality, that the evaluation criteria are ambiguous, or that the task itself admits multiple valid interpretations:

In[14]:
Code
import numpy as np


def cohens_kappa(rater1, rater2):
    """
    Calculate Cohen's Kappa for two raters.
    Measures agreement beyond chance.
    """
    r1 = np.array(rater1)
    r2 = np.array(rater2)

    observed_agreement = np.mean(r1 == r2)

    categories = np.unique(np.concatenate([r1, r2]))
    expected_agreement = 0
    for cat in categories:
        p1 = np.mean(r1 == cat)
        p2 = np.mean(r2 == cat)
        expected_agreement += p1 * p2

    if expected_agreement == 1:
        return 1.0
    kappa = (observed_agreement - expected_agreement) / (1 - expected_agreement)
    return kappa


# Example: Two annotators rating 20 response pairs
# 1 = A is better, 2 = B is better, 3 = Tie
rater1_judgments = [1, 1, 2, 1, 3, 2, 1, 1, 2, 2, 1, 3, 1, 2, 1, 2, 1, 1, 3, 2]
rater2_judgments = [1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 3, 1, 2, 1, 3, 1, 2, 3, 2]

kappa = cohens_kappa(rater1_judgments, rater2_judgments)
raw_agreement = np.mean(
    np.array(rater1_judgments) == np.array(rater2_judgments)
)
Out[15]:
Console
Raw agreement: 80.0%
Cohen's Kappa: 0.673

Kappa interpretation:
  < 0.20: Poor agreement
  0.21-0.40: Fair agreement
  0.41-0.60: Moderate agreement
  0.61-0.80: Substantial agreement
  0.81-1.00: Almost perfect agreement
Out[16]:
Visualization
Grouped bar chart comparing raw agreement and Cohen's Kappa across five protocol scenarios from random guessing to excellent.
Comparison of raw agreement versus Cohen's Kappa across different evaluation protocol qualities. Kappa corrects for the agreement expected by random chance, giving a more honest measure of evaluator consistency. As protocols improve from poor to excellent, Kappa grows faster than raw agreement because better protocols reduce chance-level guessing as well as real error.

Cohen's Kappa accounts for agreement that would occur by chance. To understand why this correction matters, consider a three-way pairwise evaluation (A wins, B wins, Tie). If evaluators assigned labels randomly, they would agree 33% of the time simply by chance. A raw agreement of 60% sounds promising, but Kappa reveals it corresponds to only moderate agreement beyond what chance predicts. The formula for Cohen's Kappa is:

κ=po−pe1−pe\kappa = \frac{p_o - p_e}{1 - p_e}

where:

  • pop_o is the observed proportion of agreement between the two raters
  • pep_e is the expected proportion of agreement if both raters labeled independently at random, computed as ∑kpk,1⋅pk,2\sum_k p_{k,1} \cdot p_{k,2} where pk,rp_{k,r} is the proportion of category kk assigned by rater rr
  • 1−pe1 - p_e normalizes the maximum possible improvement over chance to 1, so κ\kappa is bounded at 1

The key insight is that the numerator (po−pep_o - p_e) measures how much better than chance the evaluators are performing, while the denominator (1−pe1 - p_e) tells us what the maximum possible improvement would be. Dividing one by the other puts agreement on a 0-to-1 scale where 0 means no improvement over chance and 1 means perfect agreement. Negative values are possible if raters agree less than chance would predict, which typically indicates systematic disagreement rather than random noise.

In the example above, two raters agreed on 80% of cases, and Kappa shows this is substantial agreement after adjusting for chance. This level of agreement is considered acceptable for instruction-following evaluation, though researchers often aim for Kappa above 0.7 before trusting results from a given evaluation protocol.

Challenges in Human Evaluation

Human evaluation faces several practical challenges that limit its use as a primary evaluation mechanism during rapid development cycles.

Cost and scale create an immediate bottleneck. Evaluating thousands of examples across multiple models quickly becomes expensive. A single evaluation comparing two models on 1000 instructions with 3 annotators per comparison requires 3000 human judgments. At typical crowdsourcing rates, this can cost thousands of dollars and take days to complete. During rapid iteration cycles, this latency prevents teams from using human evaluation as a continuous feedback signal.

Evaluator expertise creates a quality problem for technical domains. For instructions requiring specialized knowledge (code debugging, mathematical derivations, scientific explanations), evaluators need domain expertise to judge correctness. A non-programmer might prefer a plausible-looking but buggy code response over a correct but terse one. Recruiting expert evaluators is expensive, and expert pools are often small enough that a few idiosyncratic raters can skew results.

Evaluation bias introduces systematic errors that may not be visible without careful analysis. Humans tend to prefer longer, more detailed responses even when brevity is appropriate. They may also favor responses that match their pre-existing beliefs, regardless of factual accuracy. These biases are particularly problematic because they are shared across evaluator populations, meaning they do not average out when you collect more judgments.

Cognitive load limits evaluation quality over time. Comparing long, complex responses is mentally taxing. Evaluator fatigue leads to increasingly inconsistent judgments during later evaluation sessions, creating temporal patterns in the data that contaminate results. Quality control mechanisms like attention checks and inter-rater agreement monitoring can detect but not eliminate this problem.

These challenges motivate the development of automatic evaluation methods that can scale while approximating human judgment. The goal is not to replace human evaluation entirely but to use it strategically: automatic metrics for rapid iteration, human evaluation for final validation and for calibrating automatic metrics.