Open parsers: witnesses and tests
This page covers the open parsers Mova uses as witnesses and test references: for English, French, Ukrainian, Latin, Ancient Greek, Biblical Hebrew and Modern Hebrew. It says which licences allow what, how the parsers are used, and which parser serves which role. The papers behind the parsers are in the library.
What it is
Open parsers and their models are supplied separately; Mova does not ship them. They serve three purposes:
- Witnesses for the teacher's trees: where independent parsers agree on a head and the teacher disagrees, the word is a suspect to check first.
- Test references for Mova's own
enparser and for the parsers of the language packages. - Candidates for transparent rule-based components (Link Grammar, ACE + ERG, Grammatical Framework).
A witness runner is configured through CYCLE_NEURAL (tools/cycle). Its inputs and outputs must keep token alignment, and each model's licence is checked apart from its code's licence.
Licences: build vs test
By the data-licence rule (Data and model licences), share-alike, non-commercial and research-only models are for tests and measurements only, never built into Mova or shipped. A permissive code licence does not settle it: a model trained on restricted treebanks needs a data-licence check before any build use.
| parser | tree | model licence | use |
|---|---|---|---|
| UDPipe 1 (UD 2.5), UDPipe 2 (UD 2.15; straka-2018) | UD | CC BY-NC-SA 4.0 | tests only |
| UDify | UD (multilingual BERT) | LINDAT, NC | tests only |
| Stanza (qi-2020) | UD; PTB constituents | Apache-2.0 code; models trained on UD/PTB (some UD treebanks NC: grc/hbo PTNK, he HTB) | tests; build only after a data-licence check |
| Trankit (XLM-R; nguyen-2021) | UD | Apache-2.0; trained on UD | tests |
spaCy en_core_web_* | ClearNLP-style dependencies | MIT (trained on OntoNotes) | tests; build only after a data-licence check |
spaCy fr_core_news_*, fr_dep_news_trf (honnibal-2020) | UD-style, Sequoia labels | LGPL-3.0 | tests |
hopsparser (code) + almanach CamemBERT 2.0 models camembertv2-base-{gsd,sequoia,rhapsodie}, camembertav2-base-{gsd,sequoia,rhapsodie} | UD (biaffine over CamemBERT/CamemBERTa encoders; grobol-2021, antoun-2024) | MIT code; weights MIT per model card; trained on French GSD (CC BY-SA 4.0), Sequoia (LGPL-LR), Rhapsodie (CC BY-SA 4.0) | tests; build only after a data-licence check |
COMBO combo-nlp French (XLM-R base, GSD, UD 2.17) | UD (klimaszewski-2021) | GPL-3.0 code; model CC BY-SA 4.0 | tests only |
Trankit ukrainian (XLM-R base) | UD (nguyen-2021) | Apache-2.0 code; weights licence not stated; trained on UD Ukrainian IU 2.5 (CC BY-NC-SA 4.0) | tests only |
COMBO combo-nlp Ukrainian IU / ParlaMint (XLM-R base, UD 2.17) | UD (klimaszewski-2021) | GPL-3.0 code; IU model CC BY-NC-SA 4.0, ParlaMint model CC BY-SA 4.0 | tests only |
Stanza uk packages iu_*, parlamint_* | UD (qi-2020) | Apache-2.0 code; weights licence not stated; trained on UD Ukrainian IU (CC BY-NC-SA 4.0) or ParlaMint (CC BY-SA 4.0) | tests only |
spaCy uk_core_news_lg, uk_core_news_trf (honnibal-2020) | UD-style | MIT; trained on the silver Ukr-Synth (MIT) with CC0 vectors; encoder ukr-models/xlm-roberta-base-uk | tests; build only after a data-licence check of Ukr-Synth |
Yasuoka *-ukrainian-ud-goeswith (ModernBERT large and base, RoBERTa large WECHSEL) | UD (POS and goeswith subword merging) | card says CC BY 4.0 / MIT; trained on all Ukrainian UD treebanks, so NC-SA applies | tests only |
UDPipe 2 uk_all (UD 2.15) | UD | CC BY-NC-SA 4.0 | tests only; not run (needs the embedding service) |
LatinCy la_core_web_* | UD (harmonised) | MIT | tests |
OdyCy grc_odycy_joint_* | UD (Perseus/PROIEL) | MIT | tests |
GreCy grc_dep_*_trf | UD | not stated | tests only |
| DictaBERT joint (he) | UD (HTB or IAHLT style) | CC BY 4.0; training data not checked | tests |
| YAP (he) | SPMRL labels | Apache-2.0 code; MILA models and lexicon | tests only |
| Stanford CoreNLP | Stanford/UD dependencies, PTB constituents | GPL-3.0 | tests only |
| Berkeley Neural Parser (benepar) | PTB constituents | MIT (trained on PTB) | tests |
| SuPar | dependencies, constituents, semantic dependencies | MIT (trained on PTB/UD/SDP) | tests |
MaltParser + engmalt | Stanford-basic dependencies | BSD code; maltparser.org model terms | tests |
| AllenNLP, EasyCCG, depccg | dependencies, constituents, CCG | Apache-2.0 / MIT (trained on PTB, CCGbank) | tests |
| BLLIP (Charniak–Johnson) | PTB constituents | unclear (trained on PTB/LDC) | tests only |
| Link Grammar | links (hand-written rules) | LGPL-2.1 | candidate for build: transparent rules |
| ACE + ERG 2018 | HPSG + MRS semantics | MIT-like | candidate for build: transparent rules |
| Grammatical Framework + RGL + gf-wordnet | abstract syntax trees | LGPL/BSD | candidate for build: real ASTs |
| syntaxdot (Rust) | dependencies | MIT/Apache-2.0 | code to read; no English model published |
Code only, no pretrained English model: Enju (HPSG), TurboParser, Hexatagger, DiaParser. CLTK has no parser of its own (it wraps Stanza or a large model) and is not set up.
How they are used
- School witnesses.
tools/cycleruns the neural parsers over school sentences (runner path inCYCLE_NEURAL), pretokenized so trees align token by token;tools/parsecmpcompares them andtools/treeagreemerges their agreement with the teacher's trees (Training Mova). Stanza and Trankit (UD, GPU) are the witnesses; a word where both agree on another head than the teacher is a suspect, and spaCytrfagreeing as well puts it at the top of the list. Agreement with a participating witness is not independent accuracy evidence; linguistic quality is measured on an admissible held-out gold set. - Convention, not error. spaCy (ClearNLP) and SuPar (Stanford dependencies) make prepositions and copulas heads of their phrases. Low agreement with UD trees from them is a head-rule difference; use them as witnesses only after conversion. Constituency parsers (Stanza, benepar, SuPar CRF) serve bracket comparisons.
- Language packages. For each language, dev sets are parsed with gold syntactic words (multiword tokens already split, tokenizer off) and scored on all words, punctuation included: LAS on the full label and LAS-b on the label before the colon, each on the parser's own tags. A model trained on the same treebank is not a fair witness; a model from another treebank is fair but measures convention differences as much as quality.
- Mixed-language text. Mova's own parsers are one model per language;
tools/mova-parsecuts a text into language spans withlangseg(English and French by dictionary) and sends each span to its language's model, writing# langper sentence andLang=on switched tokens. The neural witnesses above stay single-language.
Which parser serves which role:
| language | witness for in-treebank style | fair witness (other treebank) | notes |
|---|---|---|---|
| English | Stanza, Trankit | spaCy trf (after head-rule differences) | constituency: Stanza, benepar, SuPar |
| French (GSD) | hopsparser camembertav2-base-gsd, COMBO, Stanza gsd; UDPipe 2, Trankit french | Stanza sequoia (other treebank) | spaCy labels in Sequoia style; measurements in «French witnesses» |
| Ukrainian (IU) | Trankit ukrainian, COMBO IU, spaCy trf (silver Ukr-Synth), Stanza iu_charlm | COMBO ParlaMint, Stanza parlamint_charlm (other treebank); Yasuoka modernbert-large (both) | measurements in «Ukrainian witnesses»; ParlaMint is a second convention, not a better one |
| Latin (LLCT) | Stanza llct, UDPipe 2, LatinCy | none good | LLCT is medieval with its own conventions; for other text compare across treebanks |
| Ancient Greek (PTNK) | Stanza ptnk, UDPipe 2 grc_all | Stanza/Trankit proiel, OdyCy | Perseus/PROIEL models show the register gap of the Greek Pentateuch |
| Biblical Hebrew (PTNK) | Stanza hbo, UDPipe 2 hbo_ptnk | none (the only treebank) | vowel points and cantillation fed as they are |
| Modern Hebrew | UDPipe 2 he_all; Stanza htb (HTB style), Stanza combined and DictaBERT iahlt_ud (IAHLT style) | across the two conventions | YAP only after a label mapping |
Not measured here: raw-text parsing with multiword-token recovery.
French witnesses (measured 2026-11-06)
Dev sets of UD 2.18 French GSD (1476 sentences, 35721 words) and Sequoia (412 sentences, 9999 words), gold tokens (multiword tokens split into syntactic words, tokenizer off), LAS and UAS over all words, punctuation included, on each parser's own output. Speed is sentences per second on the RTX 4000 SFF Ada (GSD dev, model already loaded, one warm-up batch excluded; batch 500 sentences for Stanza and Trankit, 64 for hopsparser, 1 for COMBO). GPU is the peak of the process as seen by nvidia-smi (it includes the allocator cache, so it overstates the need). spaCy lg runs on the CPU. Runner: tools/treeagree/bridge/fr_neural.py; raw results results.jsonl in the run directory fr-parsers-2026-11-06. One run per parser, not repeated; the numbers are deterministic up to GPU arithmetic.
Bold marks a model trained on the treebank of that column (in-treebank style; a development set may have been used for model selection, so these are slightly optimistic); the rest are fair witnesses that carry the convention gap of another treebank. Sorted by the sum of the two LAS.
| parser | GSD LAS / UAS | Sequoia LAS / UAS | sent/s (GSD) | GPU MiB |
|---|---|---|---|---|
COMBO combo-nlp (GSD) | 94.7 / 96.6 | 90.5 / 94.3 | 23 | 3548 |
hopsparser camembertav2-base-gsd | 94.5 / 96.6 | 90.1 / 94.4 | 116 | 10140 |
hopsparser camembertv2-base-gsd | 94.3 / 96.5 | 90.1 / 94.5 | 97 | 9740 |
Stanza combined | 93.3 / 95.6 | 90.7 / 94.0 | 64 | 8100 |
Stanza gsd | 93.7 / 95.9 | 88.8 / 93.3 | 68 | 7604 |
Trankit french (GSD) | 91.0 / 95.5 | 88.2 / 93.7 | 488 | 2588 |
Stanza sequoia | 87.0 / 92.6 | 91.6 / 94.1 | 58 | 7376 |
hopsparser camembertv2-base-sequoia | 83.8 / 89.7 | 87.3 / 90.9 | 188 | 8786 |
hopsparser camembertav2-base-sequoia | 84.0 / 89.5 | 87.2 / 90.8 | 118 | 9206 |
Trankit french-sequoia | 83.3 / 89.0 | 86.6 / 90.2 | 459 | 2606 |
spaCy fr_dep_news_trf | 83.2 / 88.9 | 85.5 / 89.4 | 156 | 1788 |
spaCy fr_core_news_lg | 74.9 / 81.5 | 79.7 / 84.7 | 182 | CPU |
hopsparser camembertav2-base-rhapsodie | 76.6 / 87.2 | 76.0 / 86.2 | 107 | 9206 |
hopsparser camembertv2-base-rhapsodie | 75.8 / 87.4 | 74.9 / 86.3 | 123 | 8786 |
Stanza rhapsodie | 75.3 / 84.6 | 74.5 / 82.9 | 57 | 7498 |
Trankit french-partut | 75.4 / 86.7 | 74.0 / 84.5 | 341 | 2600 |
Stanza partut | 74.5 / 87.6 | 74.9 / 86.7 | 53 | 6658 |
Stanza parisstories | 72.2 / 82.2 | 72.1 / 81.5 | 32 | 7188 |
Trankit french-spoken | 67.8 / 83.6 | 67.9 / 83.4 | 375 | 2526 |
Reading the table:
- Treebank version drift. The hopsparser models were trained on UD 2.9 (model cards: GSD LAS 94.5 for
camembertav2-base-gsd). On GSD dev 2.18 they reproduce that (94.5), but the Sequoia models drop to 87 on Sequoia dev 2.18 (UAS 90.9) although the runner reproduces each card's own parsed dev file exactly (99.99% agreement): the Sequoia annotation changed between the versions, so the Sequoia-trained models are measured against a moved target and Stanzasequoia(retrained on a later version) is the better Sequoia-style witness. Compare these columns only for the version stated. - Spoken and small treebanks (Rhapsodie, ParTUT, ParisStories, Trankit
spoken) are useful only as register witnesses; they score about 75 LAS on written text. - Agreement of the two best GSD-style GPU models (hopsparser
camembertav2-base-gsdand COMBO, both trained on GSD, so not independent): mutual UAS 97.3 on GSD dev; both right on 95.4% of words; at least one right on 97.8%. On Sequoia dev, hopsparsercamembertav2-base-sequoiawith Stanzasequoiaagree on 88.9% (UAS). - Not measured: raw-text parsing, the 2.19 restoration of GSD features, Rhapsodie/ParisStories dev as test sets, UDPipe 2 (needs its server; NC).
Models, revisions and checksums of the hopsparser downloads are in hops/manifest.tsv in the parsers directory of the data tree (outside Git; its own environment with hopsparser 0.8.0; COMBO has another). The COMBO batch mode fails on pretokenized input with combo-nlp 4.0.14 (a lemma-head size mismatch), so the runner parses one sentence at a time.
Recommended French witness set for the Eel's agreement step. GPU pair: hopsparser camembertav2-base-gsd (fast, 94.5 LAS on GSD) and COMBO (94.7); a third GSD-style vote from Stanza gsd if three are wanted. Fair witness: Stanza sequoia (other treebank, 87.0 LAS / 92.6 UAS on GSD dev, and the best Sequoia-style model at 91.6); Trankit french is the fast cheap alternative (488 sent/s, 2.6 GB). Agreement with a participating witness is not independent accuracy evidence (see above); the table says which witnesses carry the GSD convention and which carry another one.
Sources: hopsparser (grobol-2021), CamemBERT 2.0 (antoun-2024), Stanza (qi-2020), Trankit (nguyen-2021), spaCy (honnibal-2020), UDPipe 2 (straka-2018), COMBO (klimaszewski-2021), Universal Dependencies v2 (nivre-2020); GSD (guillaume-2019), Sequoia (candito-2012), Rhapsodie (lacheret-2014).
Ukrainian witnesses (measured 2026-11-06)
Treebanks: UD 2.18 Ukrainian IU (dev 673 sentences, 12606 words; CC BY-NC-SA 4.0 by its README and LICENSE.txt: tests and counts only; the README offers a commercial licence on request) and ParlaMint (dev 739 sentences, 10842 words; CC BY-SA 4.0: tests, as little as possible). Both are the r2.18 tags of UniversalDependencies/UD_Ukrainian-IU and UD_Ukrainian-ParlaMint, the only Ukrainian treebanks in that release, kept outside Git in the research raw-data tree (raw/uk-ud/ud-treebanks-v2.18/). Measured as in the French section: gold tokens (Ukrainian has no multiword tokens), tokenizer off, LAS and UAS over all words, punctuation included, each parser on its own output. Speed is sentences per second on the RTX 4000 SFF Ada (IU dev, model already loaded, one warm-up batch excluded; batch 500 for Stanza and Trankit, 64 for spaCy trf, 1 for COMBO and the goeswith models). GPU is the process peak seen by nvidia-smi (it includes the allocator cache, so it overstates the need). spaCy lg runs on the CPU. Runner: tools/treeagree/bridge/uk_neural.py; raw results results.jsonl in the run directory uk-parsers-2026-11-06. One run per parser, not repeated; the numbers are deterministic up to GPU arithmetic.
Bold marks a model trained on the treebank of that column (in-treebank style; a development set may have been used for model selection, so these are slightly optimistic); the rest are fair witnesses that carry the convention gap of another treebank. Sorted by the sum of the two LAS.
| parser | IU LAS / UAS | ParlaMint LAS / UAS | UPOS IU / PM | sent/s (IU) | GPU MiB |
|---|---|---|---|---|---|
Trankit ukrainian (XLM-R base; IU, UD 2.5) | 91.98 / 94.15 | 84.74 / 92.77 | 98.4 / 98.1 | 306 | 3044 |
Yasuoka modernbert-large-ukrainian-ud-goeswith | 88.56 / 91.63 | 87.38 / 91.46 | 95.8 / 95.7 | 3.3 | 5216 |
COMBO combo-nlp IU (XLM-R base; UD 2.17) | 91.95 / 94.01 | 83.86 / 91.57 | 98.5 / 97.8 | 14.7 | 3546 |
spaCy uk_core_news_trf | 91.91 / 94.15 | 83.62 / 91.63 | 97.9 / 97.5 | 134 | 1994 |
COMBO combo-nlp ParlaMint | 83.91 / 90.85 | 91.02 / 94.39 | 97.2 / 98.9 | 22.6 | 3546 |
Yasuoka roberta-large-wechsel-ukrainian-ud-goeswith | 87.82 / 91.39 | 86.66 / 91.09 | 96.0 / 94.9 | 3.5 | 3822 |
Stanza iu_charlm | 87.74 / 90.83 | 80.49 / 88.68 | 98.0 / 97.9 | 44 | 9148 |
Yasuoka modernbert-base-ukrainian-ud-goeswith | 84.18 / 88.55 | 83.67 / 87.77 | 96.4 / 94.4 | 2.6 | 2814 |
Stanza parlamint_charlm | 78.38 / 85.78 | 88.47 / 92.11 | 96.7 / 99.0 | 43 | 9036 |
spaCy uk_core_news_lg | 86.49 / 89.10 | 80.29 / 88.62 | 97.4 / 97.7 | 176 | CPU |
Stanza iu_nocharlm | 85.40 / 88.88 | 78.56 / 86.64 | 97.1 / 97.6 | 45 | 7682 |
Stanza parlamint_nocharlm | 74.68 / 82.24 | 87.25 / 91.41 | 95.1 / 98.7 | 60 | 7566 |
Mova en parser, own tags (train → dev after en xpos-fill) | 73.33 / 79.60 | 79.28 / 83.48 | n/a | CPU, about 20000 words/s | CPU |
Mova en parser, gold tags | 78.17 / 83.02 | 81.34 / 85.01 | n/a | same | CPU |
Reading the table:
- Two conventions. The IU-trained models (Trankit, COMBO IU, Stanza
iu_*) lose 7 to 9 LAS on ParlaMint at nearly the same UAS (88.7 to 92.8), and the ParlaMint-trained ones lose 7 to 13 LAS on IU: the head structure transfers, the labels do not. We have not analysed which relations differ. Compare LAS columns only with the training treebank in mind; UAS is the fairer cross-treebank number. - spaCy
trfwas not trained on a gold treebank but on the silver Ukr-Synth set (MIT licence; encoderukr-models/xlm-roberta-base-uk) and still scores 91.9 LAS on IU, level with the IU-trained Trankit and COMBO, which suggests the silver labels follow the IU convention. We did not trace how Ukr-Synth was labelled, so the model is neither build-cleared nor independent of IU. - Yasuoka's
goeswithmodels (2025; ModernBERT large and base, RoBERTa large WECHSEL) were trained on all Ukrainian UD treebanks together (the repository'smaker.pyclones everyUD_Ukrainian-*), so they sit between the two conventions. They parse raw text and split words themselves: with space-joined gold tokens, 4 to 22 sentences per run (up to 3%) came back with a different token count, or crashed in the repository'sud.py, and are scored as wrong, which lowers their figures by up to about 2 LAS (themismatchfield ofresults.jsonl). They are slow (3 to 6 sent/s: one masked forward pass per subword) and run remote code (trust_remote_code). Their cards say CC BY 4.0 or MIT although the training data includes the NC-SA IU: treat them as NC-SA. - Stanza without the character language model loses 2.3 LAS on IU (85.4 against 87.7) and 1.2 on ParlaMint. Stanza peaks at 6 to 9 GB because of its allocator cache.
- Agreement (UAS between parsers, IU dev, gold tokens): COMBO IU with Trankit 95.7, Trankit with spaCy
trf95.2, COMBO IU with spaCytrf94.2, Stanzaiu_charlmwith the others 91.3 to 91.7,modernbert-largewith COMBO IU or Trankit 91.6. All five of {COMBO IU, Trankit, Stanzaiu_charlm, spaCytrf,modernbert-large} are right on 83.3% of words and at least one is right on 98.2%. ParlaMint dev, with COMBO ParlaMint and Stanzaparlamint_charlmin place of the first and third: COMBO ParlaMint with Trankit 93.6, with Stanzaparlamint_charlm92.4; all right 81.7%, at least one right 98.5%. Models that share a training treebank agree because of the shared data and convention, not because they are independent. - Mova's own parser is the
entree parser trained in memory on each Ukrainian train set afteren xpos-fill(nothing is saved; the IU run is a test-only measurement and no model of it is kept). It is about 19 LAS behind the best neural parser on IU with its own tags (14 with gold tags) and 12 behind on ParlaMint (10 with gold tags); it has no Ukrainian lexicon or morphology. - Not measured: raw-text parsing; UDPipe 2 (
uk_allof the 2.15 release is extracted, CC BY-NC-SA 4.0, but its prediction mode reads word embeddings from a separate embedding service on TensorFlow, which is not cheap to set up); Stanzaner languk;lang-uk/flair-uk-pos(POS only, downloaded); Yasuoka'sembedsvariants and its BERT-large and RoBERTa-base models.
Models, revisions, licences, training data and checksums are in uk/manifest.tsv in the parsers directory of the data tree (outside Git; Stanza and Trankit are under stanza/resources/uk and trankit/cache, COMBO under combo/hf, the Yasuoka models under uk/hf). The Hugging Face search for 2023 to 2026 Ukrainian UD parsers found the COMBO models (October 2026) and Yasuoka's families (2025) used above, and only encoders otherwise (lang-uk/electra-base-ukrainian-*, Goader/modern-liberta-*), which are not parsers.
Recommended Ukrainian witness set for the Eel's agreement step. GPU trio in the IU convention: Trankit ukrainian (92.0 LAS, 306 sent/s, 3 GB), COMBO IU (92.0, 15 sent/s, 3.5 GB) and spaCy uk_core_news_trf (91.9, 134 sent/s, 2 GB; the only one with an MIT licence on the weights); their mutual UAS is 94 to 95, but they share the IU convention. For a second convention add COMBO ParlaMint (91.0 on ParlaMint; UAS 90.9 on IU) or the faster Stanza parlamint_charlm (88.5), and, when a slow vote is acceptable, Yasuoka modernbert-large (another architecture, trained on both treebanks). The fast cheap pair is Trankit plus spaCy trf. All are tests-only: the IU-trained models and Yasuoka's carry the NC-SA data, and the silver data of spaCy is unchecked for build use. Agreement with a witness that shares the training treebank is not independent accuracy evidence.
Sources: Stanza (qi-2020), Trankit (nguyen-2021), spaCy (honnibal-2020), COMBO (klimaszewski-2021), UDPipe 2 (straka-2018), Universal Dependencies v2 (nivre-2020); the Ukrainian treebanks, Ukr-Synth and Yasuoka's models are listed in docs/usage.tsv.
Teacher and dispute interfaces
The annotation teacher is Codex CLI through mova-teacher (training). treeagree also has a dispute mode (dispute-ask, dispute-apply): only the words whose head the parsers dispute are sent, as short multiple-choice questions. The teacher uses the full mode (a little world context, the sentence, and the SLM's tree and pragmatics); dispute mode stays available. Neither interface establishes annotation quality or authorizes a teacher run.
This page in Markdown → https://md.mova.elamur.ai/free/en/docs/repo-docs/parsers/