Adjacent claims often lack a connective. A plausible reading is a hypothesis until the source or reviewer supports it.
Implicit discourse relations: uncertainty and attribution
Recognize the missing connective
An update says “The cache was flushed. Errors stopped.” A reader may infer cause, sequence or both, yet neither sentence explicitly states the flush caused recovery. Mark the relation as implicit and retain both source spans. Candidate relations can coexist; do not turn an automatic choice into a single asserted fact. Discourse units define the arguments that a relation proposal connects.
Require stronger evidence for cause
A temporal sequence is cheaper to assert than a causal explanation. For incident summaries, require an explicit source claim, a corroborating investigation or reviewer approval before promoting an implicit causal edge. If the evidence supports only order, write the order. Preserve a status such as proposed, reviewed or rejected and the reason for promotion. This avoids converting fluent language into false certainty. Summary claim checks should reject a causal sentence lacking an accepted edge.
Carry speaker and negation
“Mira suspected the retry change caused the spike; the trace did not confirm it” contains a hypothesis and a later denial of confirmation. The speaker and negation scope matter more than surface proximity. Link each relation proposal to who asserted it and when. A later correction may supersede a statement but should not erase it from the audit trail. Predicate roles and negation help identify what exactly was denied.
Test abstention as a feature
Review cases with missing connectives, contradictory status updates, copied quotations and multiple possible relations. Score unsupported causal assertions, accepted relation recall, attribution errors and reviewer workload. An abstention is useful when a downstream handoff would otherwise present conjecture as fact. Calibrate thresholds on incident-scoped splits rather than random sentences, which often repeat the same template and overstate accuracy.
Implementation
def stage_implicit_relation(left, right, relation, evidence_kind, speaker):
if relation == "cause" and evidence_kind not in {"explicit-source", "reviewed-investigation"}:
return {"state": "review", "relation": relation,
"reason": "causal-evidence-missing", "speaker": speaker}
return {"state": "proposed", "relation": relation,
"arguments": (left, right), "speaker": speaker}
claim = stage_implicit_relation("cache flushed", "errors stopped",
"cause", "adjacency-only", "Mira")
assert claim["state"] == "review"
order = stage_implicit_relation("cache flushed", "errors stopped",
"temporal", "adjacency-only", "Mira")
assert order["state"] == "proposed"
Performance and operating cost
This release gate is O(1) per proposal, while producing candidate pairs can reach O(u²) for u discourse units without section pruning. Reviewing every plausible causal edge is costly; prioritize edges that would enter published summaries. The illustrative gate checks evidence type rather than evidence truth, so independent human review remains part of the release path.
Common Mistakes
- Promoting adjacency to causality without evidence.
- Removing attribution from an operator hypothesis.
- Ignoring a later denial of the proposed explanation.
- Evaluating on random sentences from the same incident template.
