ease-delta-reader / README.md
jithinpothireddy21's picture
EASE-Delta Reader: transformers-native claim-vs-evidence classifier
3baf7c8 verified
|
Raw History Blame Contribute Delete
7.41 kB
---
license: cc-by-sa-4.0
language:
- en
library_name: transformers
pipeline_tag: text-classification
base_model: answerdotai/ModernBERT-large
datasets:
- tals/vitaminc
- nyu-mll/multi_nli
- alisawuffles/WANLI
tags:
- natural-language-inference
- nli
- fact-verification
- fact-checking
- cross-encoder
- modernbert
- rag
- evidence
metrics:
- accuracy
model-index:
- name: ease-delta-reader
results:
- task:
type: text-classification
name: Fact verification
dataset:
name: VitaminC
type: tals/vitaminc
split: test
metrics:
- type: accuracy
value: 91.53
name: Accuracy
- task:
type: text-classification
name: Natural language inference
dataset:
name: MultiNLI (mismatched)
type: nyu-mll/multi_nli
split: validation_mismatched
metrics:
- type: accuracy
value: 90.21
name: Accuracy
- task:
type: text-classification
name: Natural language inference
dataset:
name: WANLI
type: alisawuffles/WANLI
split: test
metrics:
- type: accuracy
value: 77.42
name: Accuracy
- task:
type: text-classification
name: Natural language inference
dataset:
name: SNLI
type: stanfordnlp/snli
split: test
metrics:
- type: accuracy
value: 84.39
name: Accuracy
---
# EASE-Delta Reader (large)
**Does this passage support the claim, refute it, or not settle it at all?**
A 395M-parameter cross-encoder (`answerdotai/ModernBERT-large` fine-tuned) that reads one claim against one passage and answers `SUPPORTS`, `REFUTES` or `NOT_ENOUGH_INFO`. It was trained to say `NOT_ENOUGH_INFO` when a passage is about something else, which is where general NLI models most often guess: on passages taken from unrelated documents it gives a decisive answer 0.58% of the time; a widely used public NLI model does so 45.07% of the time.
It is the reader inside [EASE-Delta](https://github.com/jithinsaireddy/ease-delta), a system that keeps a task's decisions current as its messages and documents change. Try both in the [demo](https://huggingface.co/spaces/jithinpothireddy21/ease-delta-demo).
## Use it
Claim first, evidence second.
```python
from transformers import pipeline
reader = pipeline("text-classification", model="jithinpothireddy21/ease-delta-reader", top_k=None)
claim = "The client has approved the final design."
passages = [
"Email from the client: we approve the final design, please go ahead.",
"Email from the client: we cannot approve the design yet; the colours are wrong.",
"The office is closed on the first Monday of the month for staff training.",
]
for passage in passages:
print(reader({"text": claim, "text_pair": passage}, truncation=True)[0])
# {'label': 'SUPPORTS', 'score': 0.935}
# {'label': 'REFUTES', 'score': 0.991}
# {'label': 'NOT_ENOUGH_INFO', 'score': 0.999}
```
With sentence-transformers, continuing from above:
```python
from sentence_transformers import CrossEncoder
model = CrossEncoder("jithinpothireddy21/ease-delta-reader")
probs = model.predict([(claim, passage) for passage in passages], apply_softmax=True)
# one row per pair; columns SUPPORTS, REFUTES, NOT_ENOUGH_INFO
```
Inputs were at most 256 tokens in training (`truncation=True` cuts there). Split long documents into passages and read each one; say who is speaking in the passage itself ("Email from the client: ..."), because the reader sees only the text.
Probabilities are best calibrated after dividing the logits by **1.203** (fitted on development data) before the softmax.
## Results
Test sets, accuracy. One evaluation harness for all three models; brackets and paired tests are in the [results report](https://github.com/jithinsaireddy/ease-delta/blob/main/docs/RESULTS.md).
| | **This model** (large) | base reader | `tasksource/ModernBERT-base-nli` |
|---|---:|---:|---:|
| Passages from unrelated documents read as decisive (lower is better) | 0.58% | 0.82% | 45.07% |
| VitaminC: claims against Wikipedia revisions | 91.53% | 90.20% | 68.30% |
| MultiNLI, mismatched genres | 90.21% | 88.56% | 89.84% |
| WANLI | 77.42% | 74.74% | 66.34% |
| SNLI (not trained on) | 84.39% | 80.33% | 89.15% |
| ANLI round 1 (not trained on) | 53.70% | 46.40% | 63.40% |
| ANLI round 2 (not trained on) | 38.10% | 33.30% | 48.20% |
| ANLI round 3 (not trained on) | 36.00% | 34.75% | 42.25% |
`tasksource/ModernBERT-base-nli` is a base-size multi-task NLI model whose training includes SNLI and ANLI; it is the better choice for adversarial NLI of the ANLI kind. This reader is built for evidence: contrastive Wikipedia revisions (VitaminC), and knowing when a passage does not bear on the claim.
On VitaminC, real revisions: 89.90%; synthetic: 94.25%.
## Labels
| Label | Meaning | NLI equivalent |
|---|---|---|
| `SUPPORTS` | the passage establishes the claim | entailment |
| `REFUTES` | the passage establishes that the claim is false | contradiction |
| `NOT_ENOUGH_INFO` | the passage does not settle the claim, including when it is about something else | neutral |
## Training
900,000 examples streamed from the Hugging Face Hub: VitaminC (cc-by-sa-3.0), MultiNLI and WANLI (cc-by-4.0), plus 20% synthetic unrelated pairs (the claim of one example with the evidence of another from a different topic, labelled `NOT_ENOUGH_INFO`). SNLI was left out because its annotators labelled unrelated content as contradiction; ANLI because its licence is non-commercial. One run, on one Apple M4 Max. The evaluation plan was written and hashed before training: [`docs/PREREGISTRATION_LARGE.md`](https://github.com/jithinsaireddy/ease-delta/blob/main/docs/PREREGISTRATION_LARGE.md).
## Limitations
- English only.
- Passages on the claim's own subject that do not settle it are still read as decisive about one time in five (VitaminC test, not-enough-info items).
- Conflicts that follow only from a consequence ("broke a leg" against "cycles to work") are mostly missed.
- Numbers and dates are read as text; compare them with code when they matter.
- Not a judge of truth: it reports what the passage says, not whether the passage is right.
## How this checkpoint was made
Converted exactly from the EASE-Delta edge model (`ease/export.py` in the code repository explains why the conversion is exact). On 1,200 development pairs the largest logit difference between the two was 9.5e-07 and the predicted label never differed (0 disagreements). The full system, with its calibrated rules and regression suites, is [`jithinpothireddy21/ease-delta`](https://huggingface.co/jithinpothireddy21/ease-delta).
Other size: [`jithinpothireddy21/ease-delta-reader-base`](https://huggingface.co/jithinpothireddy21/ease-delta-reader-base).
## Licence
CC BY-SA 4.0 for the weights, because VitaminC is share-alike (Creative Commons' guidance on AI training describes this as the cautious course). The code is Apache-2.0. Credit for the training data: VitaminC (Schuster, Fisch and Barzilay, NAACL 2021), MultiNLI (Williams, Nangia and Bowman, NAACL 2018), WANLI (Liu, Swayamdipta, Smith and Choi, EMNLP 2022). Backbone: ModernBERT (Warner et al., 2024).
## Citation
```bibtex
@software{pothireddy2026easedelta,
author = {Pothireddy, Jithin},
title = {EASE-Delta: revision-aware decision computation},
year = {2026},
url = {https://github.com/jithinsaireddy/ease-delta}
}
```