Reliability & agreement

Span-level agreement calculator

Cohen's kappa cannot score span annotation, because coders create the units by choosing where each span starts and ends. Mark spans as two annotators and see what the standard replacement — pairwise F1 with a declared matching rule — actually reports.

Free · No sign-up · Runs entirely in your browser

Score two annotators' spans

Mark spans on the passage below as annotator A, then as annotator B, and watch all four SemEval-2013 matching schemes disagree about how well they did. Nothing is uploaded.

Marking as

Label

Select any stretch of the passage to add a span for annotator A. Existing spans are listed below and can be removed.

The participant paused, then said the words came out sideways, and that the thoughts kept slipping away before she could finish them. Later she described the room as unusually bright. Her speech drifted between topics without a clear thread, and she lost the question twice.

Annotator A — 5 spans

  • [34, 61)derailment“the words came out sideways”
  • [72, 132)derailment“the thoughts kept slipping away before she could finish them”
  • [154, 182)perceptual“the room as unusually bright”
  • [195, 235)derailment“drifted between topics without a clear t”
  • [246, 273)derailment“she lost the question twice”

Annotator B — 5 spans

  • [16, 22)perceptual“paused”
  • [34, 61)derailment“the words came out sideways”
  • [72, 132)derailment“the thoughts kept slipping away before she could finish them”
  • [154, 182)perceptual“the room as unusually bright”
  • [203, 233)derailment“between topics without a clear”

All four SemEval-2013 schemes

These are the same two sets of spans scored four ways. The spread between them is why an F1 reported without its scheme is uninterpretable.

SchemeBoundariesLabelOverlap scores asPRF1
StrictMust match exactlyMust matchIncorrect (no credit)0.600.600.60
ExactMust match exactlyIgnoredIncorrect (no credit)0.600.600.60
PartialOverlap is enoughIgnoredHalf credit0.700.700.70
TypeSome overlap requiredMust matchCorrect (full credit)0.800.800.80

Counts for the partial scheme: 3 correct, 1 partial, 1 missed, 1 spurious.

Boundary IoU

Mean IoU over aligned pairs

0.94

4 pairs aligned

F1 at IoU ≥ 0.50

0.80

Binary credit, as object detection scores boxes

Raise it until loose boundaries stop counting.

  • [34,61) ↔ [34,61)1.00
  • [72,132) ↔ [72,132)1.00
  • [154,182) ↔ [154,182)1.00
  • [195,235) ↔ [203,233)0.75

Pairwise F1 is not chance-corrected. It happens to equal positive specific agreement (Hripcsak & Rothschild, 2005), and token-level kappa converges to it as the non-entity class grows. If you need a chance-corrected figure for spans, the option is Krippendorff's unitizing alpha (1995), which this tool does not compute.

Copies all four schemes with their counts, so the number never travels without its scheme.

Reference · for the curious

Why spans need F1 and IoU, and what kappa cannot tell you about them

Span annotation breaks chance-corrected agreement, and not for a fixable reason. Cohen's kappa scores a fixed roster of items that every coder rates into the same categories, and to correct for chance it needs the cell where both coders said "no". Span work never supplies that cell, because the coders decide where the units are before deciding what to call them.

The missing negative class

In a categorisation task — rating each of forty interview turns as present or absent for a symptom — the items are given and the negatives are countable. In span or named-entity work the items are not given at all. As Hripcsak and Rothschild (2005) put it, when annotators mark phrases in a document there is no fixed denominator: they choose the spans, so the number of things that could have been marked but were not is unbounded. You cannot count the non-entities in a paragraph any more than you can count the sentences you did not write.

The standard replacement is pairwise F1. Treat one annotator as the reference, compute F1 = 2·P·R / (P+R), and because F1 is symmetric the value is the same whichever annotator you call gold (Deléger et al., 2012) — which is precisely the property an agreement measure needs. Our full write-up of span-level agreement works through the arithmetic; this tool runs it.

The matching rule moves the number more than the annotators do

A span match is whatever you define it to be, and the field's reference point is SemEval-2013 Task 9, which scores four ways depending on whether boundaries must line up exactly and whether the label must also agree. On the worked example this page loads, the same two sets of spans score 0.60 under strict and exact, 0.70 under partial, and 0.80 under type. Nothing about the annotation changed.

That is why the scheme belongs in every reported figure. "F1 = 0.82" without it is like a temperature without the unit. A de-identification pipeline that redacts a whole phrase can live with partial matching; a task extracting an exact dose string cannot.

A correction we owe our own readers

One detail here is easy to get wrong, and we did. Under the type scheme, an overlapping span whose label matches earns full credit, not half. The half-credit category exists only in the partial scheme. An earlier version of our explainer said type awarded 0.5, which made it look harsher than it is; this tool follows the reference implementation, and the post has been corrected. Type is the most forgiving of the four schemes on boundaries while staying strict about labels.

Boundary IoU, and why it is the same idea as image overlap

Boundary IoU divides the length two spans share by the total length they cover: IoU = |A∩B| / |A∪B|. It runs from 0 to 1, and it is what "partial match" quietly rests on — when a scheme says two spans are similar enough, IoU is the natural way to make enough precise.

The kinship with image segmentation is exact rather than metaphorical. Marking a span is choosing a start and end on a line; marking a mask is choosing a region in a plane; both are unitising a continuum, and both are scored by intersection over union. Object detection accepts a predicted box when IoU clears a threshold, and span evaluation can accept a coder's span the same way — which the threshold slider above does. Our Dice ↔ IoU converter handles the two-dimensional case, including the Dice identity and why the same metric misleads on small structures.

The token-level shortcut, and why it flatters itself

There is a tempting workaround: chop the text into tokens, label each one inside-a-span or outside, and run kappa on that fixed grid. Now the items are countable and kappa is defined. The catch is that tokenisation invents the negative class the task lacks — every whitespace-separated word that nobody marked becomes an item both coders agreed on. On a long document that class dominates, so agreement looks near-perfect for the same reason kappa breaks on pixels, and token-level kappa converges to F1 as the non-entity class grows (Hripcsak & Rothschild, 2005). It is a useful diagnostic, not a substitute.

If your labels really are categorical over a fixed item set, kappa is the right tool and our inter-rater reliability calculator computes the whole family with confidence intervals. Deciding between the two is the subject of our guide to choosing an agreement coefficient. Span-level coding of the TLC scale's signs is the case where this page applies: the boundaries of a stretch of disorganised speech are a judgement, and two competent coders routinely disagree about them by a clause.

How the alignment works, and why not greedily

Before anything can be scored, the two annotators' spans have to be matched one-to-one. This tool pairs identical boundaries first — those are the same span, and no optimisation should trade one away — then aligns the remainder with a dynamic program that maximises the number of overlapping pairs, and total IoU as a tiebreak.

The obvious alternative, taking the highest-IoU pair repeatedly, is genuinely worse rather than merely inelegant. Given reference spans [0,10) and [10,30) against system spans [5,28) and [28,100), greedy takes the single best pair and strands the other two spans, finding one match where two exist. Under half-credit scoring that changes the reported F1.

What this tool does not do

It does not compute Krippendorff's unitizing alpha, which is the principled chance-corrected measure for this setting (Krippendorff, 1995) and considerably harder to interpret. It scores two annotators at a time, not a panel. Its tokeniser splits on whitespace and nothing else, which is deliberate — a deterministic rule anyone can reproduce is worth more in a diagnostic than correct punctuation handling. And the passage it loads is synthetic, written for this page: no real transcript content appears anywhere in these materials.

Frequently asked questions

Why can't I use Cohen's kappa for span annotation?

Because kappa needs a fixed roster of items and a countable negative class, and span annotation supplies neither. In a categorisation task the items are given and you can count the cases where both coders said no. In span or named-entity work the coders create the units by deciding where each span begins and ends, so the number of things that could have been marked but were not is unbounded — you cannot count the non-entities in a paragraph. Without that cell the chance correction has nothing to work from (Hripcsak & Rothschild, 2005). The standard replacement is pairwise F1 with an explicitly declared matching rule.

What are the four SemEval-2013 matching schemes?

Strict requires both the boundaries and the label to match exactly. Exact requires the boundaries to match and ignores the label. Partial accepts any overlap and awards a half-credit partial match. Type requires the label to match and accepts loose boundaries, counting an overlapping span with the right label as fully correct. On the same two sets of spans these can differ substantially — the worked example on this page gives 0.60 under strict and exact, 0.70 under partial and 0.80 under type. That spread is why an F1 reported without naming its scheme is uninterpretable.

Does the type scheme give an overlapping span half credit or full credit?

Full credit. This is a genuinely common confusion, and an earlier version of our own explainer had it wrong. In SemEval-2013 as implemented by the reference nervaluate package, the half-credit partial category exists only in the partial scheme; under the type scheme, any overlap combined with a matching label counts as correct. The distinction matters because it makes type the most forgiving of the four schemes on boundary disagreements while remaining strict about labels.

How is boundary IoU used to score text spans?

It is the intersection over the union of the two spans measured in character or token offsets: IoU = |A∩B| / |A∪B|, running from 0 for no overlap to 1 for identical spans. It is the one-dimensional cousin of the overlap metric computer vision uses on regions, and the kinship is exact rather than loose — marking a span is unitising a line, marking a box is unitising a plane. Thresholding IoU, for example at 0.5, turns overlap into a yes-or-no match, which is the device object detection uses to accept or reject a predicted box. Reporting the distribution of pairwise IoU across matched spans says something about boundary discipline that a single F1 hides.

Is pairwise F1 a real agreement measure, or just a system-evaluation metric?

It is a legitimate inter-annotator agreement measure for span tasks. You treat one annotator as the reference and compute F1 for the other; because F1 is symmetric, the value is the same whichever annotator you call gold (Deléger et al., 2012), which is exactly the property an agreement measure needs. For this setting the balanced F-measure is numerically identical to positive specific agreement (Hripcsak & Rothschild, 2005). What it is not is chance-corrected. If you need that, Krippendorff's unitizing alpha models the continuum and the coders' choice of boundaries (Krippendorff, 1995), at the cost of being considerably harder to compute and explain.

Written by Enrique Gutiérrez, PhD (Computer Science) — founder of Tagaroo and Associate Professor of Computer Science, working on inter-rater reliability, measurement and annotation methodology (ORCID).

Last verified: 30 July 2026. Formulas, thresholds and cited figures on this page were checked against their original sources on that date. Every calculation runs in your browser; nothing you enter is transmitted or stored.

This is the measurement Tagaroo was built around

Span-level evidence is the core of how Tagaroo works: every rating stays linked to the stretch of transcript that justifies it, and agreement on those spans is computed as coders work rather than reconstructed afterwards from exported offsets.

Try Tagaroo free