GLiNER β€” Abstract Election-Law Entity Extraction

Fine-tune of knowledgator/gliner-multitask-large-v0.5 for extracting abstract propositional entities from U.S. election-law and civic-governance text.

This model is part of the ELG-KG (Election Law Graph β€” Knowledge Graph) pipeline by Citizen Codex. It complements citizencodex/gliner2-entities-v1 (which handles concrete named entities like Person, Organization, Election) by detecting seven abstract / propositional types that characterize what a document says rather than who it names.

Entity types

  1. Proposition β€” any discrete proposition about the world asserted in the text (bare factual claim, attributed utterance content, a denial, or a methodologically grounded finding). Truth-neutral.
  2. AdministrativeAction β€” a discrete decision, order, ruling, certification, approval, denial, suspension, or enforcement action by an agency, board, commission, or executive official.
  3. LegislativeAction β€” a procedural act by a legislature on legislation (passage, markup, vote, amendment, veto, enactment, failure).
  4. Challenge β€” a formal adversarial objection or contest against an election result, regulation, procedure, or administrative decision.
  5. Investigation β€” a formal inquiry, examination, audit, or probe into an election-related issue.
  6. Meeting β€” a specific formal deliberative gathering of a board, commission, committee, or legislative chamber.
  7. FundingAllocation β€” a grant, appropriation, reimbursement, or budgeted allocation supporting election-related programs or jurisdictions.

See the type definitions document for full INCLUDE / EXCLUDE / DISAMBIGUATE rules with examples.

Performance

Holdout F1 on 289 gold spans (164 test chunks) at per-type val-picked thresholds:

Type Threshold F1
Proposition 0.20 0.477
AdministrativeAction 0.20 0.391
LegislativeAction 0.20 0.400
Challenge 0.30 0.556
Investigation 0.20 0.471
Meeting 0.20 0.706
FundingAllocation 0.30 0.714
macro 0.531

At a single global threshold of 0.2:

  • macro F1: 0.555
  • micro F1: 0.502

Baseline comparison: a custom DeBERTa-v3-large multi-label BIO head trained on the same corpus reaches macro F1 ~0.21 β€” this model (same-size encoder, different head + pretrained initialization) more than doubles that.

An A/B comparison of label schemes (canonical ontology names vs. descriptive phrase labels) on identical data and hyperparameters showed the raw scheme outperforming the alternative by ~+0.04 macro F1 at the best global threshold.

Sentence-level attribution

When each predicted span is attributed to the sentence it belongs to (for downstream KG evidence-unit assignment), attribution accuracy matches span-level F1 β€” no signal is lost in the collapse to sentence granularity. LegislativeAction and Challenge have near-100% attribution precision (when predicted, they're in the right sentence).

Usage

Canonical ontology labels are used verbatim at train and inference time β€” no relabeling needed.

from gliner import GLiNER

model = GLiNER.from_pretrained("citizencodex/gliner2-entities-abstract")

labels = [
    "Proposition",
    "AdministrativeAction",
    "LegislativeAction",
    "Challenge",
    "Investigation",
    "Meeting",
    "FundingAllocation",
]

text = (
    "OLYMPIA -- The Office of the Secretary of State certified candidates and "
    "ballot measures to the Nov. 5 General Election, establishing the slate "
    "of choices to appear on ballots this fall. DOJ opened an investigation "
    "into Georgia's voter roll purges."
)

# Threshold 0.2 maximizes macro F1 globally.
entities = model.predict_entities(text, labels, threshold=0.2)
for ent in entities:
    print(f"[{ent['label']}] {ent['text']} (score {ent['score']:.3f})")

Training details

  • Base: knowledgator/gliner-multitask-large-v0.5 (token-level BIO; DeBERTa-v3-large encoder + BiLSTM + independent per-token-per-label head).
  • Training data: 778 windowed chunks / 1462 annotations from 763 documents (a merged + deduplicated corpus across 11 curation runs).
  • Steps: 5,000 (batch 2).
  • Optimizer: AdamW, lr_encoder=1e-5, lr_others=5e-5, warmup ratio 0.1.
  • Loss: focal BCE with Ξ³=2 for class-imbalance handling.
  • Negative sampling ratio: 1.0.
  • Label scheme: raw ('Proposition' … 'FundingAllocation').

Corpus composition

Split Docs Proposition AA LA Challenge Investigation Meeting FA
train 566 975 157 31 35 66 61 117
val 79 172 21 13 11 9 8 19
test 118 195 24 10 13 11 8 22

30.4% of windows are zero-annotation negative contexts (for training suppression on non-propositional text).

Limitations

  • Rare-type coverage is thin: Challenge (35 train anns) and LegislativeAction (31 train anns) remain the weakest types in volume. Despite this, Challenge F1 is strong (0.56–0.73) because the surviving patterns after dedup are highly canonical; LegislativeAction remains mid-range (0.40) due to genre skew toward first-person hearing language.
  • Genre distribution is election-law-specific: primary sources (DOJ press releases, EAC OIG HAVA audits, state BOE minutes, Congressional hearings) and election journalism (AP, Reuters, Votebeat, electionline). Not expected to generalize well to general news or unrelated domains.
  • Investigation F1 is bounded (~0.47) because the test set is dominated by EAC OIG HAVA-audit template text. A more diverse Investigation benchmark would likely report different numbers.
  • AdministrativeAction F1 is also ~0.39 β€” the hardest type at this scale. Motion-without-vote patterns (common in board minutes) and agency-action-without-clear-actor patterns (common in press releases) fire inconsistently.

Citation

If you use this model, please cite the ELG-KG project.

@misc{elgkg-abstract-2026,
  title = {Abstract-Entity Extraction for Election-Law Knowledge Graphs},
  author = {Citizen Codex},
  year = {2026},
  howpublished = {\url{https://github.com/citizencodex/ELG-KG}},
}
Downloads last month
9
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support