Paun 2018 - Pooled and Unpooled Models Multinomial Dawid-Skene MACE

Summary

The simplest annotation model (MULTINOM) assumes all annotators share one response distribution per true class. Dawid & Skene (1979) give every annotator their own confusion matrix; MACE (Hovy et al. 2013) instead gives each annotator a credibility and a spamming distribution. Both unpooled models are latent class models whose latent variable is the item’s true class.

Overview

Notation: items , annotators , classes , annotation positions for item ; = annotator of the -th annotation of item ; = true class; = label given; = vector of ones.

Main Content

MULTINOM (pooled; Albert & Dodd 2004; Carpenter 2008)

for each class ; prevalence ; ; . One response distribution per true class, shared by every annotator (“same ability”).

Dawid-Skene (D&S; unpooled)

for each annotator and class (row of the confusion matrix ); ; ; . Marginal likelihood (summing out ): . Dawid & Skene (1979) fit by EM (MLE); here, fixed Dirichlet priors regularize and posteriors are sampled with HMC.

MACE (Hovy et al. 2013; unpooled)

Per annotator: spamming preference , credibility . Per item: . Per annotation: spam indicator ; if then , else .

Difference. D&S has free parameters per annotator and captures systematic confusions (e.g., PR mistaken for DN). MACE has per annotator and models a pure spamming strategy: with credibility and concentrated on one class it exactly describes “always answers DN”. A D&S spammer’s confusion matrix has identical rows, so their label carries no information about the true class and their contribution cancels in the posterior (Passonneau & Carpenter 2014).

Posterior over true class (D&S)

. Majority vote implicitly corresponds to every annotator having the same symmetric confusion matrix ( if , equal off-diagonal otherwise) with a flat prior; this is an interpretation, not a claim made in the paper.

Examples

Dawid-Skene by EM on simulated data

Setup. 300 binary items, 6 annotators with accuracies (the last two near-spammers), all annotators label all items. Solution. Initialise posteriors from vote proportions; iterate (M) estimate and confusion matrices from soft counts, (E) update class posteriors. Result (seed 1). D&S recovers 92.3% of true labels versus 87.7% for majority vote, and estimated per-annotator accuracy (diagonal means) is . Interpretation. Down-weighting uninformative raters beats one-person-one-vote.

import numpy as np
def dawid_skene(y, K, iters=50):
    """y: list of (item, annotator, label). Returns class posteriors T, prevalence pi, confusion CM[J,K,K]."""
    I = max(i for i,_,_ in y)+1; J = max(j for _,j,_ in y)+1
    T = np.zeros((I,K))
    for i,j,l in y: T[i,l]+=1
    T /= T.sum(1, keepdims=True)                   # majority-vote init
    for _ in range(iters):
        pi = T.mean(0)
        CM = np.full((J,K,K), 0.01)                # small smoothing (Dirichlet-like)
        for i,j,l in y: CM[j,:,l] += T[i]
        CM /= CM.sum(2, keepdims=True)
        logT = np.tile(np.log(pi), (I,1))
        for i,j,l in y: logT[i] += np.log(CM[j,:,l])
        T = np.exp(logT-logT.max(1,keepdims=True)); T /= T.sum(1,keepdims=True)
    return T, pi, CM

PyMC-style sketch (untested; marginalise the latent class with logsumexp):

import pymc as pm, pytensor.tensor as pt
with pm.Model():
    pi = pm.Dirichlet("pi", np.ones(K))
    beta = pm.Dirichlet("beta", np.ones(K), shape=(J, K, K))     # beta[j, true, observed]
    # log_lik[i,k] = log pi[k] + sum_n log beta[j_n, k, y_n]
    ll = pt.log(pi)[None, :] + pt.zeros((I, K))
    ll = pt.inc_subtensor(ll[item_idx], pt.log(beta[ann_idx, :, label]))
    pm.Potential("lik", pm.math.logsumexp(ll, axis=1).sum())

Connections

See Also

Paun 2018 - Partially Pooled Models Hierarchical D&S ItemDiff LogRndEff · Paun 2018 - Evaluation Protocol and Results Tables