CoolFace
Datasetpublic

mjbommar/opengloss-v2.1-qrels

Superseded by OpenGloss v2.2 (2026-09-08): 148,292 live lexemes and 288,304 senses — tier 5 closes the WordNet gap (38,100 entries imported from Princeton WordNet 3.0 and enriched), inflected-form headwords are folded onto their lemmas, and every inherited field carries a migrate provenance record. v2.1 stays published for reproducibility. OpenGloss v2.1 — Qrels A ready-to-score retrieval benchmark built from the release's own graph. The listwise config gives one query with… See the full description on the dataset page: https://huggingface.co/datasets/mjbommar/opengloss-v2.1-qrels.

sourceHugging Facecc-by-4.0updated 17d agoView on Hugging Face
0likes189downloads
Dataset Card
Superseded by [OpenGloss v2.2](https://huggingface.co/datasets/mjbommar/opengloss-v2.2-qrels) (2026-09-08): 148,292 live lexemes and 288,304 senses — tier 5 closes the WordNet gap (38,100 entries imported from Princeton WordNet 3.0 and enriched), inflected-form headwords are folded onto their lemmas, and every inherited field carries a migrate provenance record. v2.1 stays published for reproducibility.

OpenGloss v2.1 — Qrels

A ready-to-score retrieval benchmark built from the release's own graph. The listwise config gives one query with its whole graded candidate list; the docs config is the document corpus those candidate ids address; and qrels.trec at the repo root is the same judgements in standard trec_eval format. Grades are 3 (the query's own sense), 2 (a direct synonym), 1 (a direct hypernym, a co-hyponym, or a polysemous entry's encyclopedia article) and 0 (everything else). The tiers are disjoint by construction: no document is offered twice at two grades for one query.

Part of the OpenGloss v2.1 release family — 16 datasets built from one store of 109,633 lexemes and 250,003 live senses, all joinable on derived ids. See Related datasets for the rest.

What's new in v2.1 vs v1.3

  1. 1.Schema v3. Every lexeme carries a kind discriminator (simplex, compound, phrasal verb, idiom, proper noun, abbreviation, affix, function word); every sense carries a controlled domain leaf from a fixed ~160-leaf taxonomy instead of free text; every example carries the character span of the headword occurrence inside it.
  2. 2.Renditions, not one string. A definition is a set: the canonical one plus rewrites at four reading levels and in four registers, each produced in a single call from the canonical text so they say the same thing at different altitudes.
  3. 3.A sense graph, not a word graph. Typed relations resolve to sense ids wherever the target's entry exists in the release, so bank --hypernym--> financial institution points at a meaning rather than at a string.
  4. 4.Retrieval data is first-class. Synthetic per-sense queries in eight styles, grounded QA pairs, mined word-in-context pairs, MS MARCO-style triples with graph-derived hard negatives, and graded TREC qrels — all derivable from, and consistent with, the same entries.
  5. 5.Derivable identifiers everywhere. v1.3 published a positional id for lexemes and senses (3d_model_noun_0) and nothing below that. v2.1 gives every rendition, edge, query, QA pair and provenance record an id computable from the row alone, and never renumbers: a retired sense is tombstoned, so the ids after it keep their meaning.
  6. 6.Per-field provenance. Which model wrote a field, how many tokens it took, what it cost — published as its own dataset.

What changed since v2.0

v2.0 (2026-09-05) covered the frequency-ranked single words. v2.1 adds tier 4: the function words the core ranking had excluded on purpose, and every remaining v1.3 entry at Wikipedia frequency ≥ 10 — mostly multiword compounds ("natural selection", "catalog number"), plus names and rarer single words. That doubles the lexeme count and changes the mix: v2.0 was 99.8% single words; a third of v2.1 is multiword.

v2.0 (2026-09-05)v2.1 (2026-09-07)
Lexemes54,724109,633
Live senses137,314250,003
Multiword entries (compounds, phrasal verbs, idioms)8636,366
Proper nouns10,36517,073
Function words114462
Gloss renditions1,129,9751,684,865
Example sentences1,398,2972,163,329
Live relations735,3181,574,438
Synthetic queries1,330,3111,304,650
QA pairs750,348736,010
Pretraining documents617,1751,111,044
Pretraining words196,390,946331,888,239
Pretraining tokens (cl100k_base)275,659,096471,451,693
Judge score, Opus, 40-entry samples70.2 (core + tier 2), 66.7 (tier 3)70.2 (core + tier 2), 66.7 (tier 3), 67.0 (tier 4)

Schema. No column was added, removed or retyped in any existing dataset. Three things did change:

  • —tier gains the value tier4 (it was core, tier2 or tier3).
  • —One new dataset, opengloss-v2.1-inflections: a flat surface-form → lemma lookup (plural, past tense, participles, comparative, superlative, derivations) built from the morphology that the lexicon already carried nested.
  • —New provenance note prefixes on tombstones and edges, all reversible and all counted in the store audit: phantom_pos: (a v1.3 part-of-speech block whose glosses defined a component word rather than the compound — 11,440 blocks retired), regen: (relations regenerated for senses that had lost every edge to judging), and retyped: contrast (synonym edges the contrast paragraphs showed to be hypernym or hyponym).

Not row-compatible with v2.0. Lexeme, sense, rendition, edge, query and QA ids are stable for every entry v2.0 had. The derived training sets (retrieval-pairs, retrieval-triples, qrels) re-sample negatives over the larger pool, so their rows differ; and the store-wide quality passes run for v2.1 retired ~3,000 senses of the v2.0 entries (phantom part-of-speech blocks and near-duplicate senses), so those senses are now tombstoned rather than live. Treat v2.1 as a new release, not a delta.

Scope: fewer headwords, far more per headword

v2.1 is not a superset of v1.3. It covers 109,633 of v1.3's 205,988 lexemes — every frequency-ranked single word, plus the compounds and names at Wikipedia frequency ≥ 10 — and spends the difference on depth. If you need breadth of vocabulary, use v1.3; if you need graded renditions, resolved relations, spans, or retrieval supervision, use v2.1.

v1.3v2.1
Lexemes205,988109,633
Senses565,604250,003
Definition renditions per sense1 canonical1 canonical + up to 8 graded
Relation targetsbare stringsresolved to sense ids
Retrieval training datacompanion setsqueries, QA, triples, qrels
Per-field provenancenomodel, tokens and cost per call

Key statistics

Lexemes109,633
Live senses250,003
Rows in this dataset1,805,540
docs_written359,618
entries_scanned109,633
listwise_queries_written1,445,922
qrels_written12,016,960
queries_considered1,445,922
senses_considered250,003

By tier

  • —core — top 10K by composite frequency
  • —tier2 — ranks to ~42K
  • —tier3 — the rest of the frequency-ranked single words
  • —tier4 — stopwords, plus compounds and names at Wikipedia frequency ≥ 10
TierLexemesLive senses
core10,00033,405
tier231,88675,326
tier312,83825,593
tier454,909115,679

Coverage by tier

The release was built in 4 frequency-ranked passes (core, tier2, tier3 and tier4) and they did not all receive the same stages. This table is per-field and per-tier so the gaps are visible rather than averaged away.

FieldOf`core``tier2``tier3``tier4`
Canonical glosssense100.0%100.0%100.0%100.0%
Controlled domain tagsense100.0%100.0%100.0%100.0%
Gloss at 4 reading levelssense100.0%99.9%99.9%100.0%
Gloss in 4 registerssense100.0%100.0%0.0%0.0%
At least one examplesense100.0%99.9%99.8%99.5%
Examples at 4 reading levelssense99.0%99.6%99.7%99.5%
At least one relationsense99.4%99.2%99.3%99.2%
Synthetic retrieval queriessense100.0%100.0%0.0%0.0%
Grounded QA pairssense99.8%99.6%0.0%0.0%
Etymologylexeme100.0%100.0%99.8%100.0%
Lexical explanationlexeme100.0%100.0%100.0%100.0%
Encyclopedia (neutral)lexeme100.0%100.0%100.0%100.0%
Encyclopedia at grade 5 + college (core entries also carry grade 1 and grade 10)lexeme100.0%100.0%100.0%100.0%
Contrast paragraphslexeme72.8%55.1%0.0%0.0%

Files

FilesConfigRowsShardsSize
data/listwise/train-*.parquetlistwise1,445,9223245.9 MB
data/docs/train-*.parquetdocs359,6181109.1 MB

Fields

Config listwise

1,445,922 rows, one row per query, with its whole graded candidate list.

FieldTypeDescription
query_idstringThe query's id; matches column 1 of qrels.trec.
querystringThe query text.
query_sourcestringgenerated or gloss_pseudo.
sense_idstringThe sense the query belongs to. Join key.
lexeme_idstringThat sense's entry id.
candidateslist<struct<id, text, grade>>The graded candidate documents: id into the docs config, text, and grade 0–3.
n_candidatesint32Length of candidates.
tierstringTier of the query's entry.

One real row:

json
{
  "query_id": "a:determiner:0#grade_5/plain",
  "query": "Use “a” before one countable thing when you mean any single member of a group.",
  "query_source": "gloss_pseudo",
  "sense_id": "a:determiner:0",
  "lexeme_id": "a",
  "candidates": [
    {
      "id": "a:determiner:0",
      "text": "Indefinite article preceding singular count nouns to indicate one unspecified group member.",
      "grade": 3
    },
    {
      "id": "one:determiner:0",
      "text": "A cardinal numeral determiner used to designate a single item in a countable set, modifying the noun that follows.",
      "grade": 2
    },
    {
      "id": "single:adjective:0",
      "text": "Being one in number; not accompanied by or combined with another of the same kind.",
      "grade": 2
    },
    "… 8 more of 11"
  ],
  "n_candidates": 11,
  "tier": "tier4"
}

Config docs

359,618 rows, one row per document in the retrieval corpus.

FieldTypeDescription
doc_idstringA sense id (the document is that sense's canonical gloss) or a {lexeme_id}:encyclopedia id.
textstringThe document text.
lexeme_idstringThe entry the document belongs to. Join key.
tierstringTier of that entry.

One real row:

json
{
  "doc_id": "a:determiner:0",
  "text": "Indefinite article preceding singular count nouns to indicate one unspecified group member.",
  "lexeme_id": "a",
  "tier": "tier4"
}

Loading it

python
from datasets import load_dataset

# configs: "listwise", "docs"
ds = load_dataset("mjbommar/opengloss-v2.1-qrels", "listwise", split="train")
print(ds)
print(ds[0])

The shards are plain parquet, so nothing forces you through datasets — read them straight, locally or over hf://:

python
import polars as pl

df = pl.read_parquet("hf://datasets/mjbommar/opengloss-v2.1-qrels/data/listwise/train-*.parquet")
print(df.head())
python
import duckdb

duckdb.sql("SELECT count(*) FROM 'hf://datasets/mjbommar/opengloss-v2.1-qrels/data/listwise/train-*.parquet'").show()

Beside the parquet shards this repo carries:

  • —qrels.trec — The graded judgements in standard trec_eval format: query_id 0 doc_id grade, one per line.

Score a run with pytrec_eval

python
import pytrec_eval
from huggingface_hub import hf_hub_download

path = hf_hub_download(
    "mjbommar/opengloss-v2.1-qrels", "qrels.trec", repo_type="dataset"
)
with open(path, encoding="utf-8") as handle:
    qrels = {}
    for line in handle:
        qid, _, docid, grade = line.split()
        qrels.setdefault(qid, {})[docid] = int(grade)

# run = {query_id: {doc_id: score}} from your own retriever
evaluator = pytrec_eval.RelevanceEvaluator(qrels, {"ndcg_cut_10", "recall_100"})
results = evaluator.evaluate(run)

Identifiers, and how they compose

Every id is derived from structure, never randomly minted, so a consumer can recompute one from a row and join across the whole family without a lookup table. Sense positions are stable across regenerations: a retired sense is tombstoned, not removed, so the indices after it never shift.

IdShapeExample
Lexemeslugify(headword)abseil
Sense{lexeme_id}:{pos}:{index} (zero-based)abseil:verb:0
Rendition{owner_id}#{reading_level}/{register}abseil:verb:0#grade_5/plain
Entry-level owner{lexeme_id}:encyclopedia / :explanationabseil:encyclopedia
Edge{source_sense_id}-{type}->{target_lexeme_id}abseil:verb:0-synonym->rappel
Query{sense_id}#q{n} (zero-based)abseil:verb:0#q3
QA pair{sense_id}#qa{n} (zero-based)abseil:verb:0#qa3
Provenance recordp{n} within its entry (one-based)p12

An edge id keys on the target's slug, not on the target's sense, so resolving a target never changes the id of the edge that found it.

Reading levels and registers

A rendition is keyed on a (reading_level, register) pair. The canonical rendition of every field is (neutral, plain); everything else is a rewrite of it.

`reading_level`Who it is written forRough CCSS band
neutralThe canonical text: an adult general reader, no level targeted—
grade_1Beginning readers; short sentences, common wordsK–1
grade_5Upper elementary4–5
grade_10Secondary9–10
collegeUndergraduate and above; technical vocabulary allowed11–CCR
`register`What changesReading it
plainNothing — the neutral registerThe default
informalConversational, contractions, everyday wordsHow you'd say it to a friend
formalFull forms, precise hedging, no contractionsHow you'd write it in a report
technicalDomain vocabulary, exact conditionsHow a specialist would state it
marketingBenefit-first, persuasive framingA genre, not a formality level

marketing sits on the register axis for convenience but is a genre value rather than a point on the formality scale — worth remembering if you train a formality classifier on this column.

Related datasets

Everything below is built from the same store and joins on lexeme_id / sense_id.

DatasetGrainWhat it holds
`opengloss-v2.1-lexicon`one row per lexemeOne row per lexeme: kind, morphology, etymology, encyclopedia, contrasts, sense ids, provenance summary.
`opengloss-v2.1-senses`one row per live senseOne row per live sense: canonical gloss, 8 gloss renditions, examples, resolved relations, synthetic queries, grounded QA pairs.
`opengloss-v2.1-definitions`one row per gloss renditionOne row per gloss rendition (canonical included): reading level, register, text, readability grade.
`opengloss-v2.1-examples`one row per example renditionOne row per example sentence with the headword's character span, its reading level and register.
`opengloss-v2.1-encyclopedia`one row per encyclopedia rendition · one row per lexical-explanation renditionOne row per encyclopedia article rendition, plus an explanation config for the "why this word" prose.
`opengloss-v2.1-etymology`one row per entry with an etymologyOne row per entry with an etymology: prose summary, ordered language trail, cognates, references.
`opengloss-v2.1-inflections`one row per inflected, derived or lemma formOne row per inflected or derived form, plus the lemma itself: a flat form→lemma lookup.
`opengloss-v2.1-relations`one row per live relation edge · one row per removed relation edgeOne row per semantic edge, resolved to target sense ids; a tombstoned config recovers the edges the reconcile pass removed.
`opengloss-v2.1-queries`one row per synthetic queryOne row per synthetic retrieval query, across eight query styles, tagged to the sense it should retrieve.
`opengloss-v2.1-qa-pairs`one row per question/answer pairOne row per grounded question/answer pair, with the rendition ids the answer cites.
`opengloss-v2.1-contrasts`one row per contrast paragraphOne row per "X vs Y" paragraph on a synonym/antonym/confusable edge, with a verdict on the edge.
`opengloss-v2.1-provenance`one row per provenance recordOne row per recorded generation call: stage, model, tokens, cost, run id — the audit trail.
`opengloss-v2.1-retrieval-pairs`one row per mined pairWord-in-context and doc2query-shaped (texta, textb, label) pairs mined from the store for free.
`opengloss-v2.1-retrieval-triples`one row per (query, positive, negative) tripleMS MARCO-style (query, positive, negative) triples whose hard negatives come from the graph.
`opengloss-v2.1-qrels` (this one)one row per query, with its whole graded candidate list · one row per document in the retrieval corpusGraded TREC relevance judgements (0–3) plus the document corpus and listwise candidate lists.
`opengloss-v2.1-pretrain`one row per rendered documentEntries serialised into plain-prose dictionary, thesaurus, encyclopedia and usage-note documents.

Known limitations

  • —It is synthetic. Every string here was written by a language model against a schema, not transcribed from a corpus or checked by a lexicographer. It is well-formed and internally consistent; it is not attested usage, and it will contain confident errors. Do not use it as ground truth about what a word means.
  • —Judge scores 70.2/100 (core + tier 2) and 66.7/100 (tier 3). A different model family (Claude Opus) scored fixed 40-entry stratified samples at the close of each build. Sample statistics, not per-entry guarantees, and the judge is itself a model.
  • —Relation precision is the weakest axis. Relations were judged for validity and the ones that failed were demoted rather than asserted; symmetric reciprocity finished at 94.3% for synonyms and 95.3% for antonyms, and 1,890 senses were left with no relation at all. Treat a single edge as a hypothesis, not a fact; treat the aggregate graph as usable.
  • —`core`, `tier2`, `tier3` and `tier4` are deliberately partial. 109,633 lexemes across core, tier2, tier3 and tier4 received the text stages (glosses, examples, encyclopedia) but not the queries, QA pairs, contrasts or register renditions. The coverage table above gives the exact per-field share; nothing is hidden behind an average.
  • —The encyclopedia is entry-level. One article per headword, about the headword as a whole. On a polysemous entry it is not a description of any one sense, and it is never used as a positive for one (D-71). It is entry-level reference prose, not a specialist article.
  • —Pseudo-queries. A sense with no written query falls back to its grade_5/plain gloss standing in as one; query_source says which happened, and a pseudo-query is a paraphrase of the document it is supposed to retrieve, which makes it easier than a real query. Filter on query_source == 'generated' for the harder set.

Citation

bibtex
@misc{bommarito2025opengloss,
  title  = {OpenGloss: A Synthetic Encyclopedic Dictionary and Semantic Knowledge Graph},
  author = {Bommarito, Michael J., II},
  year   = {2025},
  eprint = {2511.18622},
  archivePrefix = {arXiv},
  url    = {https://arxiv.org/abs/2511.18622}
}

License

Released under Creative Commons Attribution 4.0 International (CC-BY 4.0). Attribution to the OpenGloss project is required; commercial use is permitted.