Paun 2018 - Partially Pooled Models Hierarchical D&S ItemDiff LogRndEff

Summary

Hierarchical priors let the data decide how much annotators (or items) are alike. HIERD&S puts Normal priors on confusion-matrix logits; ITEMDIFF models item difficulty only; LOGRNDEFF combines annotator ability and item difficulty in a logistic (Rasch-like) subtractive structure.

Overview

All three use softmax-link logits instead of Dirichlet rows: annotator ability is a logit vector for responses when the true class is .

Main Content

Hierarchical Dawid-Skene (HIERD&S)

Class-level hyperparameters: , . Annotator abilities . Prevalence , , . Partial pooling regularises annotators with few annotations toward the population mean; it asymptotes to unpooled D&S when is large and to the pooled model when .

Item difficulty (ITEMDIFF; extends Carpenter's "Beta-Binomial by Item")

Class-level difficulty means and s.d.’s ; ; item difficulty vector ; . No annotator structure. Each item’s label distribution is its own.

Logistic random effects (LOGRNDEFF; Carpenter 2008)

Annotator ability as in HIERD&S () and item difficulty with . Annotation:

The subtractive “ability minus difficulty” is the Rasch-model structure (see Bürkner 2021 - IRT Model Classes 1PL 2PL and Extensions).

Remark. The name “difficulty” is slightly misleading in ITEMDIFF: without annotator parameters it indicates the most likely annotation classes. The paper therefore uses an independent model-confidence (entropy) measure of difficulty.

Examples

How partial pooling acts on a sparse annotator

Setup. Annotator A labelled 3 items (3 correct); population mean accuracy 0.8 with between-annotator s.d. (logit scale) 0.5. Solution. Unpooled D&S would estimate accuracy near 1 (or Dirichlet-smoothed ~0.8 with a flat prior); HIERD&S shrinks toward 0.8 in proportion to relative to the data precision. Interpretation. Partially pooled models avoid the predictive overfitting seen for unpooled D&S/MACE on small datasets (WSD).

PyMC-style non-centered sketch (untested):

with pm.Model():
    zeta = pm.Normal("zeta", 0, 1, shape=(K, K))
    omega = pm.HalfNormal("omega", 1, shape=(K, K))
    z = pm.Normal("z", 0, 1, shape=(J, K, K))
    beta = zeta + omega * z                       # non-centered
    # then softmax(beta[j, c_i]) as the response probabilities

Connections

See Also

Paun 2018 - Evaluation Protocol and Results Tables