clause-ai / docs /PHASE3_READINESS.md
mostafaelsaeed's picture
research: BM25 retrieval-recall measurement + category-batched extraction (Phase 3 hypothesis test)
4f47f31
|
Raw History Blame Contribute Delete
9.43 kB

Phase 3 Readiness Assessment β€” Retrieval

Date: 2026-08-26 Status: Data/evaluation sources assessed. Retrieval pipeline NOT built. Phase 2 baseline NOT measured (blocked on ANTHROPIC_API_KEY).

This document exists because the project's own execution policy requires Phase 3 to not be considered complete (or even started) until the Phase 2 baseline is actually measured, and requires any Phase 3 infrastructure prepared beforehand to be clearly labeled as preparation, not implementation. Nothing in this document should be read as "Phase 3 is underway" β€” it is a readiness check performed while Phase 2 sits idle on a credential.


Why this exists now, before Phase 2 is measured

ANTHROPIC_API_KEY is required for Phase 2 and is not available in this environment. Rather than block all progress, this session did the highest- value work that requires no API calls and does not depend on the baseline number: verifying the actual sources Phase 3 will need. This is explicitly scoped as preparation, per the project's standing instruction to "produce a Phase-3 data/evaluation readiness assessment" and "STOP at the Phase-3 implementation boundary." No retrieval code (BM25, dense embeddings, hybrid fusion, reranking) has been written.


Source-by-source readiness

Source License Download Schema Verdict
CUAD CC BY 4.0 (claimed on project site; no LICENSE file in repo) βœ“ Downloaded (18.3MB, SHA256 recorded) βœ“ Verified against real data READY β€” already in use for Phase 2
ContractNLI CC BY 4.0 (confirmed: LICENSE+TERMS shipped in archive) βœ“ Downloaded (65.4MB, SHA256 recorded) βœ“ Verified against real data (loader's original guess was correct) READY β€” could supply evidence-span examples for Phase 5's verifier; not itself a retrieval benchmark
MAUD CC BY 4.0 (confirmed via HF dataset card tag) ⚠️ Not downloaded (schema checked via API only) ⚠️ Loader rewritten to match verified flat-CSV schema, not execution-tested DEFERRED β€” optional per docs/ROADMAP.md (Phase 6+); no action taken this pass, consistent with not installing datasets/pandas/pyarrow for a dataset three phases away from relevance
LegalBench-RAG MIT (confirmed via GitHub API structured field) ❌ Blocked β€” dropbox.com unreachable from this environment (SSLConnectError); github.com reachable in the same session, so this is a network restriction, not a broken or unofficial link (see ADR-020) ⚠️ Plausible per README description, not verified against a real file BLOCKED on environment network access, not on data/licensing

The actual Phase 3 blocker

LegalBench-RAG is the dataset the project's own docs/EVAL_PLAN.md and docs/ROADMAP.md designate as the gold retrieval benchmark (Recall@5, Recall@10, nDCG@10). Its source and license are now verified, but the data itself cannot be downloaded from this sandbox because dropbox.com is unreachable here. This is a genuine hard blocker for Phase 3's retrieval evaluation specifically β€” not for Phase 3 preparation work in general, and not something to route around by fabricating a substitute dataset or silently swapping to a different (weaker) evaluation source, which the project's evaluation-methodology-change rule (any metric/dataset change requires justification + ADR + test + doc + comparison) does not permit doing quietly.

What this does NOT block: building the retrieval mechanisms themselves (BM25, dense embeddings via BGE-M3, hybrid fusion, bge-reranker-v2-m3) can proceed without LegalBench-RAG, since those are local, open-weight components with no external data dependency. What genuinely needs LegalBench-RAG is the scientific evaluation of whether retrieval helps β€” Recall@k and nDCG@k require its gold query/snippet judgments. Building retrieval mechanics without a way to measure them would violate "never optimize before measuring" and "never add architecture merely because it sounds impressive" β€” so retrieval implementation is being held, not just the evaluation of it.

What Phase 3 will need once unblocked

From the retrieval architecture already specified in docs/ARCHITECTURE.md and docs/DECISIONS.md (ADR-005): BGE-M3 for dense embeddings and bge-reranker-v2-m3 for reranking, both open-weight and runnable on the available RTX 2000 Ada (16GB VRAM, confirmed present via nvidia-smi in the initial environment audit). rank-bm25 is already listed in requirements.txt for the lexical baseline. None of these require an API key β€” only LegalBench-RAG's gold judgments (for measuring recall/nDCG) and CUAD (already local) as retrieval corpus/queries are external dependencies, and CUAD is already satisfied.

Explicit non-claims

  • This document does NOT claim retrieval improves extraction quality. That is an empirical question Phase 3 exists to answer, and it cannot be answered without both a measured Phase 2 baseline (for the extraction-F1 delta) and LegalBench-RAG (for the retrieval-quality numbers).
  • This document does NOT claim LegalBench-RAG's schema is confirmed. The loader's field-name assumptions are plausible based on the README's prose description but have not been checked against an actual file.
  • This document does NOT constitute Phase 3 sign-off. Per the project's own phase gate, Phase 3 cannot begin in earnest until Phase 2's baseline is measured and found scientifically valid.

Update 2026-08-26: Phase 2 baseline measured β€” STATUS = RED

The paid-API blocker above no longer applies: ANTHROPIC_API_KEY was never obtained, and was made unnecessary by replacing Claude with a local, open-weight model (Qwen2.5-7B-Instruct via Ollama, $0 cost -- docs/DECISIONS.md ADR-022). The real 77-contract baseline was measured (twice: v3, then v4 after fixing a diagnosed JSON-escaping defect, ADR-024) and is RED against the pre-registered gate: Macro F1 0.117 vs. a classical TF-IDF baseline's 0.4532. Full detail in docs/PHASE2_BASELINE.md and docs/ERROR_ANALYSIS_PHASE2.md.

Per this project's own phase-gate rule, Phase 3 retrieval implementation remains gated -- a RED Phase 2 does not license moving to Phase 3 optimization. However, the specific, evidence-based root cause identified (recall collapses with document length; the model doesn't scale its search effort to content, not a formatting or category- confusion problem) is direct, mechanistic motivation for exactly what Phase 3 proposes: pre-localizing relevant sections before extraction targets this exact failure mode. This readiness document's data-source findings (CUAD/ContractNLI ready, LegalBench-RAG blocked by this environment's network) stand unchanged; what changed is that there is now a concrete, measured reason to expect retrieval could help, rather than an assumption that it would.

Update 2026-08-29: Retrieval recall measured WITHOUT LegalBench-RAG

The LegalBench-RAG blocker above (dropbox.com unreachable) turned out not to block the actual retrieval-recall question for this project's own dataset: CUAD's own SQuAD-style annotations already carry gold answer_start character offsets (verified in data/processed/cuad_test_contracts.json), which is exactly what's needed to score "did retrieval find the right section" -- the same thing LegalBench-RAG's snippet character ranges would provide. src/retrieval.py implements a BM25 section retriever plus compute_retrieval_recall(), tested in tests/test_retrieval.py (including an explicit no-gold- leakage check on retrieval queries), and measured on the real 77-contract test set at zero API cost, zero new external data:

Recall@1/3/5/10 = 0.327 / 0.548 / 0.646 / 0.749, MRR = 0.469 β€” far above the LLM's own effective micro-recall of 0.158 when given the whole document. Full detail, literature context, candidate architectures, and the resulting pilot experiment are in docs/RESEARCH_AND_ARCHITECTURE_DECISION.md, which supersedes item 3 below as the live decision document. LegalBench-RAG itself remains un-downloaded (still blocked in this environment) and would still add value as an externally-standardized cross-dataset comparison, but is no longer a blocker for testing the retrieval hypothesis on this project's own data.

Next gated actions (in order)

  1. Obtain ANTHROPIC_API_KEY β€” superseded; local model used instead, $0 cost.
  2. Determine baseline scientific validity β€” done: valid protocol, genuinely RED result, root-caused (not a suspicious ceiling/floor artifact -- the classical baseline on the identical protocol scored 0.4532, ruling out an evaluation-methodology explanation).
  3. Either run a larger local model or measure retrieval recall β€” retrieval recall measured directly (above); see docs/RESEARCH_AND_ARCHITECTURE_DECISION.md for the full analysis, literature comparison, and the resulting small pilot experiment (category-batched extraction with and without per-batch BM25 localization) run before committing to any further full-77-contract experiment.
  4. Full Phase 3 implementation (BM25 β†’ dense β†’ hybrid β†’ reranked retrieval evaluated end-to-end) remains contingent on docs/RESEARCH_AND_ARCHITECTURE_DECISION.md's final decision (GREEN/YELLOW/RED/STOP), which is itself contingent on the pilot's measured result -- not assumed in advance.