Skip to content
MethodologyApril 9, 20269 min read

Citation grounding: how we decide a sentence is allowed to exist

A language model asked about a company will answer whether or not it has the document. For a research product that is disqualifying. Here is what we built instead.

Claroo Research · Engineering

Ask a language model what a company said about gross margin last quarter and it will tell you. It will tell you whether or not it has the transcript, whether or not the transcript says that, and whether or not the company still reports gross margin the way it did when the model was trained. The answer will be fluent, specific, and appropriately hedged. None of those properties are correlated with it being true.

For most applications that is an acceptable failure rate. For a research product it is disqualifying, because the entire value of the thing is that you stop having to check. So Claroo is built around a constraint rather than a capability: no factual sentence ships without a span-level anchor to a source document, and every anchor is verified by a separate pass before publication.

Hallucination is not a bug to be reduced

The framing matters. Treating fabrication as a defect implies it can be driven toward zero with a better model, a sterner prompt, or more context. In our experience it cannot — not reliably, and not in a way you can put a number on for a user who is about to make a decision with money.

Treating it as a property of the system instead leads somewhere more useful. If the model will always be willing to produce a plausible sentence, then the job of the architecture is to make unsupported sentences structurally unable to reach the reader. That is a different engineering problem, and it is a tractable one.

Retrieval: structure before semantics

Most retrieval systems chunk documents by token count with a fixed overlap. On SEC filings this destroys the thing that makes them useful. A 10-K is not prose; it is a legally prescribed structure. Item 1A is risk factors. Item 7 is management's discussion. Item 9A is internal controls. A chunk that straddles the boundary between two of them is a chunk that will confidently answer a question about the wrong section.

So we segment structurally first and chunk within sections second. Every chunk carries its provenance — accession number, form type, section, subsection, character offsets — as first-class metadata rather than as a prefix glued onto the text. Retrieval is hybrid: lexical search finds the passages where the exact term appears, semantic search finds the ones where the concept appears under different words, and a reranking pass decides what actually goes into the context window.

Generation under constraint

The generation step sees only the retrieved spans. It is not permitted to supplement them from parametric knowledge, and the instruction to that effect is the least interesting part of the mechanism — instructions are suggestions. The enforcement happens afterwards.

Each factual sentence must emerge tagged with the span it came from. A sentence that arrives without one is not a sentence with a missing citation; it is a sentence that does not get published.

Anchoring: what a citation actually is

A citation in Claroo is not a link to a document. Linking to a 140-page 10-K and calling it a source is a gesture, not a citation — nobody is going to go and find the paragraph, which means nobody is going to catch you when the paragraph does not say what you claimed.

A citation is an accession number, a section identifier, and a character range. It resolves to a specific passage, and clicking it opens the filing scrolled to that passage with the text highlighted in place. Paragraph-level granularity is not good enough for numbers, because a paragraph frequently contains several of them and only one is the one you meant.

Verification: the pass that deletes things

After generation, every claim is re-checked against its cited span independently, with the rest of the answer withheld. The check asks a narrow question: does this span support this specific assertion, on its own?

Claims that fail are removed. Not softened, not hedged with “may” or “appears to” — removed. Hedging an unsupported claim produces a sentence that is technically defensible and practically misleading, which is the worst available outcome for a document somebody is going to skim.

Where it still breaks

Four failure modes survive, and we would rather name them than let you find them:

  • Numbers that span table cells. A figure whose meaning depends on a column header three rows up is a figure that retrieval can separate from its label.
  • Restatements. When a company restates a prior period, two documents contain contradictory figures and both are authoritative for their own filing date. Resolving which one a question is about requires knowing what the reader meant.
  • Multi-hop claims. Each hop is individually supported and the conclusion is not. This is the hardest one, because every individual citation checks out.
  • Negation. “The company did not reaffirm guidance” is a claim about the absence of a statement, and absence is not something you can cite a span for. We handle this by scoping the claim explicitly to a document set rather than asserting it universally.

“The documents don't say” is a real answer

The most common complaint about a grounded system is that it declines to answer questions an ungrounded one would answer happily. That is the product working. If the filings do not address whether management expects pricing pressure to continue, then the honest output is that the filings do not address it — possibly with a note about what they do address nearby.

A research tool that cannot show its sources is not a research tool. It is a rumour with good typography.

This is research commentary, not investment advice. Claroo AI is not a registered investment adviser and holds no position in any security discussed. Illustrative passages attributed to fictional issuers are written to demonstrate method and are not quotations from any real filing.

You make the calls. We do the bleak parts.

Connect a portfolio, or just paste in ten tickers. The first brief lands the next morning.

See pricing

Free tier, no card. Read-only brokerage connection. No trades, no advice.

Claroo is onboarding in cohorts.

We open accounts in batches so coverage backfill doesn't fall over. Leave your email and we'll open yours in the next one.