RECIT-110M — CamemBERTa-v2

Relation Extraction with Certified Interpretable Typing. Récit: "life story" in French, which is what the model is built to read.

A 110M bi-encoder for French causal discourse relation extraction. Given two discourse units it predicts none / result (A causes B) / explanation (B causes A), and every prediction can carry a subset-minimal sufficient explanation with a necessity test.

Results (EXPLICADIS-fr test, 4 seeds)

metric value
macro-F1 (3-way) 0.770 ± 0.007
F1 result (A to B) 0.718 ± 0.021
F1 explanation (B to A) 0.635 ± 0.021
binary causal F1 0.702 ± 0.009
direction accuracy 0.964 ± 0.015

Binary causal F1 of instruction-tuned models prompted in French on the same 770 pairs: Llama-3.1-8B 0.268 · Qwen3-8B 0.296 (0.360 at 3-shot) · Mistral-Small 0.338. This model is 70 to 220 times smaller.

Usage

The model was trained on boundary-marked pairs and on specific prompts. Both are stored in recit_head.json; using different ones degrades it silently.

import json, torch
from transformers import AutoTokenizer, AutoModel

repo = "Toadoum/recit-110m"
tok = AutoTokenizer.from_pretrained(repo)
enc = AutoModel.from_pretrained(repo).eval()
cfg = json.load(open("recit_head.json"))          # prompts, tau, classes

def embed(texts):
    b = tok(texts, padding=True, truncation=True, max_length=128, return_tensors="pt")
    with torch.no_grad():
        o = enc(**b).last_hidden_state
    m = b["attention_mask"].unsqueeze(-1)
    return torch.nn.functional.normalize((o * m).sum(1) / m.sum(1).clamp(min=1), dim=-1)

pair = "[A] il a rejoint un groupe de jeunes [B] il a commencé à commettre des vols"
p = torch.softmax((embed([pair]) @ embed(cfg["prompts"]).T) / cfg["tau"], -1)
print(dict(zip(cfg["classes"], p[0].tolist())))

Training

Three stages, all French:

  1. in-domain silver — French administrative court decisions, pairs split at causal connectives, the connective then deleted and subordinating pairs reversed to supply the direction French adverbial connectives do not (dataset)
  2. MT silver — 35k PDTB causal instances translated into French
  3. gold — EXPLICADIS, 2,078 pairs (276 causal)

Removing the manufactured stages costs 0.144 macro-F1 and multiplies seed variance by eight, so they are not optional.

Limitations

  • 276 gold causal instances: differences under ~0.03 F1 sit inside seed variance.
  • On real child-protection case files the model recovers about 12% of annotated causal edges and none of the implicit ones. Benchmark scores do not predict behaviour on transcribed speech. Do not deploy this on case files without human review.
  • A causal graph over a person's trajectory records what a narrator asserted, not what caused what.
  • Recommended model. Use this one unless you need the multilingual backbone.

Citation

@inproceedings{recit2026,
  title  = {RECIT: Frugal and Verifiable Causal Discourse Relation Extraction for French},
  author = {Toadoum Sari, Sakayo and Sa\"is, Lakhdar and Jabbour, Sa\"id and Delorme, Fabien and Robin, Nelly},
  year   = {2026}
}
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support