The rows
ContractNLI (CC BY 4.0) holds 607 NDAs collected from the web, each labelled by lawyers against 17 fixed statements: the contract says so, says the opposite, or doesn’t mention it. Its test split has 123 NDAs, and its dev split 61 more. The median NDA is 9,600 characters; the whole text is the state, and five choice questions share one request per contract:nda_review.yml
The first answers were worse than they looked
Accuracy on the first run ran from 42% to 74%, and the model was sure of its mistakes: onmust_be_marked, 27% of the answers it gave at 0.9 or above were wrong. The mistakes had one shape. Of 63 contracts the lawyers labelled not_mentioned for marking, the model said says_otherwise for 43. Reading them explains it: a contract that defines Confidential Information broadly never says unmarked information is protected, but a careful reader infers it. The same happened elsewhere: “return all information” read as “no copies may be kept”; a five-year confidentiality period read as “obligations survive termination”.
ContractNLI counts only what a contract says expressly. The questions never said so. The fix is in the criteria: says_otherwise became “the agreement expressly says…”, and not_mentioned names the inference to avoid (“a broad definition of Confidential Information alone is not_mentioned”). Before adopting it, hunch diff shows what it changes:
The gain on marking holds (p < 0.001 on dev), and nothing got worse in a way the test can see. Rewording three of the others is within noise on 61 contracts.
Where it stands
A first pass, not a decision. Two clauses are right about three times in four or better; copying is right half the time, and on the test set, of the copying answers it gave at 0.9 or above, a third were wrong. That is not a column software should act on. It can sort a pile: the contracts that clearly let advisors see the data, or clearly keep obligations alive, go to the bottom of the lawyer’s stack, and the rest get read first. What would move it further is not more wording. The copying clause fails because permission to copy usually sits inside an exception to another clause (“except as necessary for the Purpose”), which is exactly the “negation by exception” the dataset’s authors single out as hard. Two ways to try, each a spec changediff can judge: ask a narrower question per clause type (is copying mentioned at all, then is it allowed), or put the sentences that mention copies in the state instead of the whole contract.
The spec, both CSVs and the first wording (first/nda_review.yml, for hunch diff nda_review.yml --against first/nda_review.yml --source contractnli_dev.csv) are in prototype/examples/nda_review/.