Reliability & agreement
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
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
Annotator B — 5 spans
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.
| Scheme | Boundaries | Label | Overlap scores as | P | R | F1 |
|---|---|---|---|---|---|---|
| Strict | Must match exactly | Must match | Incorrect (no credit) | 0.60 | 0.60 | 0.60 |
| Exact | Must match exactly | Ignored | Incorrect (no credit) | 0.60 | 0.60 | 0.60 |
| Partial | Overlap is enough | Ignored | Half credit | 0.70 | 0.70 | 0.70 |
| Type | Some overlap required | Must match | Correct (full credit) | 0.80 | 0.80 | 0.80 |
Counts for the partial scheme: 3 correct, 1 partial, 1 missed, 1 spurious.
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.
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
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.
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.
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.
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 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Span-level agreement calculator · tagaroo.ai/materials/span-agreement-calculator · figures verified against primary sources 2026-07-30. Educational scoring aid, not a diagnosis, and not reviewed by a licensed clinician.