CoolFace
Datasetpublic

yuanxin112/morphbench-verb-cloze

MorphBench — contextual verb-inflection cloze (EN / DE / FR) A verb in a natural sentence is replaced by the marker [x]. The prompt gives the lemma and a partial feature bundle; the sentence supplies exactly the missing dimension. The model generates the surface form. prompt : cloze lemma=<L> context=<sentence with [x]> feats=<partial feats> -> gold : the inflected surface form The benchmark exists to test whether a morphology-aware tokenizer helps a small LM inflect words it… See the full description on the dataset page: https://huggingface.co/datasets/yuanxin112/morphbench-verb-cloze.

sourceHugging Facecc-by-nc-sa-4.0updated 29d agoView on Hugging Face
0likes58downloads
Dataset Card

MorphBench — contextual verb-inflection cloze (EN / DE / FR)

A verb in a natural sentence is replaced by the marker [x]. The prompt gives the lemma and a partial feature bundle; the sentence supplies exactly the missing dimension. The model generates the surface form.

prompt : cloze lemma=<L> context=<sentence with [x]> feats=<partial feats> ->
gold   : the inflected surface form

The benchmark exists to test whether a morphology-aware tokenizer helps a small LM inflect words it has seen little of. That question is only answerable if the items are stratified by how much the model actually saw during pre-training, which is what the 2x2 cell field is for.

Configs and splits

python
from datasets import load_dataset
ds = load_dataset("yuanxin112/morphbench-verb-cloze", "de")          # "en" | "de" | "fr"
ds["test_lemhigh_formlow"]                  # the headline cell
splitENDEFR
train360160003542
dev4681000493
test105127401119
test_lemhigh_formlow92824259
test_lemhigh_formhigh800800800
test_lemlow_formlow7586857
test_lemlow_formhigh842483

test is the union of the four cell splits; use whichever is convenient.

What is withheld, and what the sentence has to supply

configphenomenon`feats` giveswithheldcue in the sentence
deagree_presv;ind;prsperson + numberthe subject (nsubj)
deagree_pastv;ind;pstperson + numberthe subject
deptcpv;ptcp— (participle formation)an auxiliary licenses the reading
fragree_presV;IND;PRSperson + numberthe subject
fragree_impV;IND;IPFV;PSTperson + numberthe subject
fragree_psV;IND;PFV;PSTperson + numberthe subject
fragree_futV;IND;FUTperson + numberthe subject
fragree_cndV;CONDperson + numberthe subject
fragree_sbjvV;SBJV;PRSperson + numberthe subject
enagree_presV;IND;PRSperson + numberthe subject
enpastV;IND[;P;N]tenseanother past finite verb in the sentence
enptcp_vs_pastV;PSTVerbForman auxiliary (have/be)

Two of these are not on the person/number axis.

en/ptcp_vs_past withholds VerbForm. The feats string is identical for both answers; only the sentence decides:

The revolt [x] two weeks to be suppressed.        -> took     (no auxiliary)
the custom group fields are [x] .                 -> hidden   (auxiliary)

It is restricted to the UniMorph lemmas whose participle actually differs from their past; for regular verbs the two are syncretic (walked/walked) and there would be nothing to decide.

de/ptcp is participle formation — the ge-circumfix (ge-macht, ge-fahren), its absence on -ieren verbs (studiert) and inseparable prefixes (verstanden), and the infix on separable ones (auf-ge-kommen). Only tokens whose auxiliary is present are taken, so the sentence licenses the participle reading. German does not get the two-way version: its finite half would be a machte vs machten person/number choice that feats cannot state without leaking the answer, so it would compete with agree_past for the same tokens and strip it of every 3sg item. English has no such conflict because walked is person/number-invariant.

English needs the second axis. Outside be (excluded as an auxiliary) no English verb varies its past form by person or number — walked fills all six slots — so withholding person+number there would leave the subject carrying no information at all. German and French have no such problem (their past cells average 4.0 and 5.1–5.8 distinct forms over the six person/number slots in UniMorph), which is why they use one axis throughout.

Per config:

  • enagree_pres 527, past 462, ptcp_vs_past 62
  • deagree_pres 1052, agree_past 888, ptcp 800
  • fragree_pres 550, agree_imp 196, agree_ps 154, agree_fut 118, agree_cnd 63, agree_sbjv 38

Frequency stratification (cell)

Two axes, each split low/high at 1 occurrence per million words of that language's pre-training corpus (~11 occurrences in these ~10M-word corpora):

  • lemma_other_freq — how often the model saw this verb through its other forms (the UniMorph paradigm total minus the target form). Excluding the target is what keeps the two axes independent; a paradigm total that included it would make form_high imply lemma_high and collapse the grid into a triangle.
  • form_freq — how often it saw this exact surface string.
cellreading
lem_high+form_lowthe verb is familiar, this form is not — where a morphological tokenizer should win
lem_high+form_highboth familiar — memorisation ceiling
lem_low+form_lownothing to go on — floor
lem_low+form_highthe form is common but the rest of the paradigm is not — a frozen/lexicalised form

A plain seen/unseen split was tried first and rejected: on a 10M-word corpus 93–97% of items land in seen+seen and the interesting cell holds 7–46 rows.

lem_high+form_high is capped at 800 rows per language (it is only a ceiling estimate); the other three cells are taken in full, and rare lemmas are deliberately routed to test rather than train by the split.

Fields

fieldmeaning
prompt, goldwhat the model reads / must produce
lemma, context, featsthe prompt, pre-parsed
phenomenonsee the table above
cell2x2 frequency stratum
form_freq, lemma_other_freqraw counts in the pre-training corpus
form_level, lemma_levellow / high, the two axes of cell
person_numberthe withheld value (3sg, 3pl, …; - where UD leaves English past unmarked)
verbclassEN s_reg/s_ortho/bare/regular/irregular/ptcp/pret; DE strong/weak/ptcp; FR g1/g1_stem/g2/irregular
resourcewhether the form/lemma is in that language's UniMorph
source_treebankUD treebank the sentence came from — needed to filter by licence, see below

Construction guarantees

  • Lemma-disjoint train / dev / test.
  • Sentence-disjoint too. One UD sentence yields one item per finite verb, and those items used to land in different splits, leaving the test answer verbatim in the training copy of the same sentence (35.6% of English test rows before this was fixed). Verified 0 shared sentences.
  • No hand-written cue word lists. An earlier build recovered the tense from an adverb list containing then / once / back / last / soon / later; 8.3% of English test items had only such an adverb as their cue, i.e. the present tense was equally grammatical and the item had no unique answer.
  • Capped per (phenomenon, lemma) so accuracy is not an average over ~20 frequent verbs, and per (phenomenon, person-number) within each cell so a model cannot score well by always emitting the 3sg form.
  • Blank marker `[x]` occurs 0 times in all three pre-training corpora and in no source treebank, and is split into exactly 3 pieces by every tokenizer tested in all three languages — so the marker itself gives no tokenizer a shorter prompt.

Pre-training corpora the frequencies refer to

configcorpustokens
enbabylm_strict_small.txt (BabyLM-style ~10M)~10M
debabylm_deu_10m.txt (BabyLM-style ~10M)~10M
frbabylm_fra_10m.txt (BabyLM-style ~10M)~10M

The counts are only meaningful for a model pre-trained on those corpora. They are not cleaned of CHAT speaker stubs (*TARGET_CHILD: etc.), which make up 4.7% / 9.7% / 7.7% of the EN / DE / FR corpora — the models saw those tokens, so removing them here would misstate exposure.

Licence and attribution

CC BY-NC-SA 4.0. The sentences are derived from Universal Dependencies treebanks, several of which are CC BY-NC-SA; ShareAlike propagates, so the whole dataset carries the most restrictive licence in the mix.

source_treebank is on every row, so a user who needs a permissively licensed subset can filter to it:

python
permissive = {"ewt", "atis", "pud", "gsd", "hdt", "rhapsodie", "parisstories"}
ds = ds.filter(lambda r: r["source_treebank"] in permissive)
configtreebanklicencerows in `test`
enUD_ewtCC BY-SA 4.0421
enUD_gumCC BY-NC-SA 4.0 (NC)337
enUD_linesCC BY-NC-SA 4.0 (NC)202
enUD_partutCC BY-NC-SA 4.0 (NC)34
enUD_pudCC BY-SA 3.028
enUD_gentleCC BY-NC-SA 4.0 (NC)20
enUD_atisCC BY-SA 4.09
deUD_hdtCC BY-SA 4.02171
deUD_gsdCC BY-SA 4.0569
frUD_gsdCC BY-SA 4.0712
frUD_rhapsodieCC BY-SA 4.0105
frUD_sequoiaLGPL-LR89
frUD_parisstoriesCC BY-SA 4.086
frUD_pudCC BY-SA 3.059
frUD_partutCC BY-NC-SA 4.0 (NC)39
frUD_fqbLGPL-LR29

Known limitations

  • French lem_low+form_high has almost no items (the whole of French UD holds ~20). This is a fact about French, not a sampling failure: a frequent form there almost always belongs to a frequent paradigm. Do not report that cell for French.
  • English lem_high+form_low and lem_low+form_low are small (English paradigms have ~4 forms, so a frequent verb's forms are all frequent).
  • Non-3sg present equals the bare lemma in English and German, so a model that blindly copies the lemma scores a non-trivial floor there (EN ~27%, DE ~23%, FR 0%). Compare configs with that in mind.
  • Scoring should be case-insensitive: a handful of golds come from all-caps or headline text.

Citation

Please cite Universal Dependencies and the individual treebanks listed above.