A pretrained DMRST parser trained with Dipo.
This model uses jhu-clsp/ettin-encoder-400m as its underlying encoder.
GUM 12.1.0 (Georgetown University Multilayer corpus) (English). A multi-genre English corpus (academic, biography, fiction, interview, news, reddit, speech, textbook, vlog, voyage, whow) annotated for RST among many other layers.
Relation labels: 32 labels:
adversative-antithesis, adversative-concession, adversative-contrast, attribution-negative, attribution-positive, causal-cause, causal-result, context-background, context-circumstance, contingency-condition, elaboration-additional, elaboration-attribute, evaluation-comment, explanation-evidence, explanation-justify, explanation-motivation, joint-disjunction, joint-list, joint-other, joint-sequence, mode-manner, mode-means, organization-heading, organization-phatic, organization-preparation, purpose-attribute, purpose-goal, restatement-partial, restatement-repetition, same-unit, topic-question, topic-solutionhood
| Split | Seg | E2E Span | E2E Nuc | E2E Rel | E2E Full | Gold-EDU Span | Gold-EDU Nuc | Gold-EDU Rel | Gold-EDU Full |
|---|---|---|---|---|---|---|---|---|---|
| dev | 94.6 | 67.6 | 53.9 | 42.0 | 41.9 | 72.3 | 59.5 | 46.6 | 46.4 |
| test | 94.5 | 70.8 | 57.2 | 45.9 | 45.6 | 76.0 | 63.4 | 51.7 | 51.4 |
F1 x 100 under original Parseval, with trivial leaf spans excluded. E2E scores parse trees predicted from raw text, segmentation included. Gold-EDU scores them given the gold EDU segmentation. Seg is the per-token BeginSeg F1 computed during training, which can read up to about a point below the official DISRPT scorer's value. The checkpoint was selected on dev e2e_full_f1.
Install the library first with pip install dipo.
dipo dmrst predict \
--hub-id larc-iu/dmrst-ettin-400m-gum-12.1.0 \
--text 'Although the experiment was carefully designed, the results were inconclusive. We plan to repeat it tonight.'
To parse a raw .txt file or a directory of them instead, use --text-file <path> --output-dir out/.
from dipo.rst.parsers.dmrst.modeling_dmrst import DMRSTParser
parser = DMRSTParser.from_pretrained("larc-iu/dmrst-ettin-400m-gum-12.1.0")
tree = parser.predict_from_text(
"Although the experiment was carefully designed, the results were inconclusive. We plan to repeat it tonight."
)
print(tree.to_rs4_string())
If you use this model, please cite both the underlying paper:
@inproceedings{dmrst_paper,
title = {DMRST: A Joint Framework for Document-Level Multilingual RST Discourse Segmentation and Parsing},
author = {Zhengyuan Liu, Ke Shi, Nancy F. Chen},
booktitle = {CODI 2021},
url = {https://aclanthology.org/2021.codi-main.15/},
}
And the Dipo library:
@misc{gessler-dipo-2026,
author = {Gessler, Luke},
title = {{Dipo: The Discourse Parsing Omnibus}},
year = {2026},
howpublished = {\url{https://github.com/larc-iu/dipo}},
}
predict_from_text therefore also starts a new segment at each blank-line paragraph break and after short heading-like lines (break_at_paragraphs=False turns this off). Hard-wrapped prose is left alone.jhu-clsp/ettin-encoder-400m, so use of these weights is subject to that model's terms: MIT.See below for the full training configuration this model was trained with.
{
"train_dir": "data/gum_12.1.0_notok/train",
"dev_dir": "data/gum_12.1.0_notok/dev",
"test_dir": "data/gum_12.1.0_notok/test",
"relation_types": [
[
"adversative-antithesis",
"rst"
],
[
"adversative-concession",
"rst"
],
[
"adversative-contrast",
"multinuc"
],
[
"attribution-negative",
"rst"
],
[
"attribution-positive",
"rst"
],
[
"causal-cause",
"rst"
],
[
"causal-result",
"rst"
],
[
"context-background",
"rst"
],
[
"context-circumstance",
"rst"
],
[
"contingency-condition",
"rst"
],
[
"elaboration-additional",
"rst"
],
[
"elaboration-attribute",
"rst"
],
[
"evaluation-comment",
"rst"
],
[
"explanation-evidence",
"rst"
],
[
"explanation-justify",
"rst"
],
[
"explanation-motivation",
"rst"
],
[
"joint-disjunction",
"multinuc"
],
[
"joint-list",
"multinuc"
],
[
"joint-other",
"multinuc"
],
[
"joint-sequence",
"multinuc"
],
[
"mode-manner",
"rst"
],
[
"mode-means",
"rst"
],
[
"organization-heading",
"rst"
],
[
"organization-phatic",
"rst"
],
[
"organization-preparation",
"rst"
],
[
"purpose-attribute",
"rst"
],
[
"purpose-goal",
"rst"
],
[
"restatement-partial",
"rst"
],
[
"restatement-repetition",
"multinuc"
],
[
"same-unit",
"multinuc"
],
[
"topic-question",
"rst"
],
[
"topic-solutionhood",
"rst"
]
],
"relation_map": null,
"model_name": "jhu-clsp/ettin-encoder-400m",
"stride": 100,
"encoder_window_size": null,
"attention_type": "dot_product",
"classifier_use_bias": true,
"num_rnn_layers": 1,
"encoder_dropout": 0.5,
"decoder_dropout": 0.5,
"labeler_dropout": 0.5,
"doc_gru_dropout": 0.2,
"label_input_pooling": "mean",
"freeze_embeddings": false,
"freeze_encoder_layers": 0,
"peft": {
"r": 16,
"alpha": 32,
"dropout": 0.05,
"target_modules": "all-linear",
"bias": "none",
"dora": false,
"modules_to_save": [
"embed_tokens"
],
"train_only_new_embedding_rows": true,
"base_dtype": "float32",
"gradient_checkpointing": false,
"load_in_4bit": false,
"bnb_4bit_quant_type": "nf4",
"bnb_4bit_use_double_quant": true,
"bnb_4bit_compute_dtype": "bfloat16"
},
"curriculum": {
"type": "simple",
"epochs": 100
},
"segmentation": {
"pos_weight": 10,
"start_loss": false,
"scheme": "BIE",
"loss": "crf",
"dropout": 0.3
},
"detokenizer": null,
"split_cjk_tokens": false,
"dlw": {
"temperature": 2,
"window": 30
},
"lr": 0.0002,
"encoder_lr": 0.0003,
"grad_accum": 3,
"amp": true,
"empty_cache_between_docs": false,
"checkpoint_decoder": false,
"patience": 100,
"patience_window": 1,
"max_grad_norm": 20,
"weight_decay": 0.01,
"num_warmup_steps": 100,
"num_warmup_epochs": 5,
"log_every": 1,
"begin_validation_epoch": 0,
"validate_every": 1,
"edu_loss_weight_exponent": 0,
"run_name": "release-dmrst-ettin-400m-gum-full",
"seed": 42,
"val_metric_name": "e2e_full_f1"
}
A pretrained DMRST parser trained with Dipo.
This model uses jhu-clsp/ettin-encoder-400m as its underlying encoder.
GUM 12.1.0 (Georgetown University Multilayer corpus) (English). A multi-genre English corpus (academic, biography, fiction, interview, news, reddit, speech, textbook, vlog, voyage, whow) annotated for RST among many other layers.
Relation labels: 32 labels:
adversative-antithesis, adversative-concession, adversative-contrast, attribution-negative, attribution-positive, causal-cause, causal-result, context-background, context-circumstance, contingency-condition, elaboration-additional, elaboration-attribute, evaluation-comment, explanation-evidence, explanation-justify, explanation-motivation, joint-disjunction, joint-list, joint-other, joint-sequence, mode-manner, mode-means, organization-heading, organization-phatic, organization-preparation, purpose-attribute, purpose-goal, restatement-partial, restatement-repetition, same-unit, topic-question, topic-solutionhood
| Split | Seg | E2E Span | E2E Nuc | E2E Rel | E2E Full | Gold-EDU Span | Gold-EDU Nuc | Gold-EDU Rel | Gold-EDU Full |
|---|---|---|---|---|---|---|---|---|---|
| dev | 94.6 | 67.6 | 53.9 | 42.0 | 41.9 | 72.3 | 59.5 | 46.6 | 46.4 |
| test | 94.5 | 70.8 | 57.2 | 45.9 | 45.6 | 76.0 | 63.4 | 51.7 | 51.4 |
F1 x 100 under original Parseval, with trivial leaf spans excluded. E2E scores parse trees predicted from raw text, segmentation included. Gold-EDU scores them given the gold EDU segmentation. Seg is the per-token BeginSeg F1 computed during training, which can read up to about a point below the official DISRPT scorer's value. The checkpoint was selected on dev e2e_full_f1.
Install the library first with pip install dipo.
dipo dmrst predict \
--hub-id larc-iu/dmrst-ettin-400m-gum-12.1.0 \
--text 'Although the experiment was carefully designed, the results were inconclusive. We plan to repeat it tonight.'
To parse a raw .txt file or a directory of them instead, use --text-file <path> --output-dir out/.
from dipo.rst.parsers.dmrst.modeling_dmrst import DMRSTParser
parser = DMRSTParser.from_pretrained("larc-iu/dmrst-ettin-400m-gum-12.1.0")
tree = parser.predict_from_text(
"Although the experiment was carefully designed, the results were inconclusive. We plan to repeat it tonight."
)
print(tree.to_rs4_string())
If you use this model, please cite both the underlying paper:
@inproceedings{dmrst_paper,
title = {DMRST: A Joint Framework for Document-Level Multilingual RST Discourse Segmentation and Parsing},
author = {Zhengyuan Liu, Ke Shi, Nancy F. Chen},
booktitle = {CODI 2021},
url = {https://aclanthology.org/2021.codi-main.15/},
}
And the Dipo library:
@misc{gessler-dipo-2026,
author = {Gessler, Luke},
title = {{Dipo: The Discourse Parsing Omnibus}},
year = {2026},
howpublished = {\url{https://github.com/larc-iu/dipo}},
}
predict_from_text therefore also starts a new segment at each blank-line paragraph break and after short heading-like lines (break_at_paragraphs=False turns this off). Hard-wrapped prose is left alone.jhu-clsp/ettin-encoder-400m, so use of these weights is subject to that model's terms: MIT.See below for the full training configuration this model was trained with.
{
"train_dir": "data/gum_12.1.0_notok/train",
"dev_dir": "data/gum_12.1.0_notok/dev",
"test_dir": "data/gum_12.1.0_notok/test",
"relation_types": [
[
"adversative-antithesis",
"rst"
],
[
"adversative-concession",
"rst"
],
[
"adversative-contrast",
"multinuc"
],
[
"attribution-negative",
"rst"
],
[
"attribution-positive",
"rst"
],
[
"causal-cause",
"rst"
],
[
"causal-result",
"rst"
],
[
"context-background",
"rst"
],
[
"context-circumstance",
"rst"
],
[
"contingency-condition",
"rst"
],
[
"elaboration-additional",
"rst"
],
[
"elaboration-attribute",
"rst"
],
[
"evaluation-comment",
"rst"
],
[
"explanation-evidence",
"rst"
],
[
"explanation-justify",
"rst"
],
[
"explanation-motivation",
"rst"
],
[
"joint-disjunction",
"multinuc"
],
[
"joint-list",
"multinuc"
],
[
"joint-other",
"multinuc"
],
[
"joint-sequence",
"multinuc"
],
[
"mode-manner",
"rst"
],
[
"mode-means",
"rst"
],
[
"organization-heading",
"rst"
],
[
"organization-phatic",
"rst"
],
[
"organization-preparation",
"rst"
],
[
"purpose-attribute",
"rst"
],
[
"purpose-goal",
"rst"
],
[
"restatement-partial",
"rst"
],
[
"restatement-repetition",
"multinuc"
],
[
"same-unit",
"multinuc"
],
[
"topic-question",
"rst"
],
[
"topic-solutionhood",
"rst"
]
],
"relation_map": null,
"model_name": "jhu-clsp/ettin-encoder-400m",
"stride": 100,
"encoder_window_size": null,
"attention_type": "dot_product",
"classifier_use_bias": true,
"num_rnn_layers": 1,
"encoder_dropout": 0.5,
"decoder_dropout": 0.5,
"labeler_dropout": 0.5,
"doc_gru_dropout": 0.2,
"label_input_pooling": "mean",
"freeze_embeddings": false,
"freeze_encoder_layers": 0,
"peft": {
"r": 16,
"alpha": 32,
"dropout": 0.05,
"target_modules": "all-linear",
"bias": "none",
"dora": false,
"modules_to_save": [
"embed_tokens"
],
"train_only_new_embedding_rows": true,
"base_dtype": "float32",
"gradient_checkpointing": false,
"load_in_4bit": false,
"bnb_4bit_quant_type": "nf4",
"bnb_4bit_use_double_quant": true,
"bnb_4bit_compute_dtype": "bfloat16"
},
"curriculum": {
"type": "simple",
"epochs": 100
},
"segmentation": {
"pos_weight": 10,
"start_loss": false,
"scheme": "BIE",
"loss": "crf",
"dropout": 0.3
},
"detokenizer": null,
"split_cjk_tokens": false,
"dlw": {
"temperature": 2,
"window": 30
},
"lr": 0.0002,
"encoder_lr": 0.0003,
"grad_accum": 3,
"amp": true,
"empty_cache_between_docs": false,
"checkpoint_decoder": false,
"patience": 100,
"patience_window": 1,
"max_grad_norm": 20,
"weight_decay": 0.01,
"num_warmup_steps": 100,
"num_warmup_epochs": 5,
"log_every": 1,
"begin_validation_epoch": 0,
"validate_every": 1,
"edu_loss_weight_exponent": 0,
"run_name": "release-dmrst-ettin-400m-gum-full",
"seed": 42,
"val_metric_name": "e2e_full_f1"
}