6.5 Claim Decomposition
AI-generated content may contain errors. Always verify against official sources.
6.5 Claim Decomposition
Key Concepts: Breaking narratives into atomic claims · Typed claim taxonomy
Key Paper: FActScoring: Fine-Grained Atomic Evaluation (Min et al., 2023)
What is Claim Decomposition?
Instead of validating an entire paragraph as a whole, break it into atomic claims — individual facts that can each be verified independently.
Original paragraph:
"The Transformer architecture was introduced in 2017 by Vaswani et al. at Google Brain.
It uses multi-head self-attention and achieved state-of-the-art results on translation."
Decomposed claims:
1. The Transformer architecture was introduced in 2017. [VERIFIABLE]
2. It was introduced by Vaswani et al. [VERIFIABLE]
3. The authors worked at Google Brain. [VERIFIABLE]
4. It uses multi-head self-attention. [VERIFIABLE]
5. It achieved state-of-the-art results on translation. [VERIFIABLE]
Step 1 — Decompose into Atomic Claims
from openai import OpenAI
import json
client = OpenAI()
def decompose_into_claims(text: str) -> list[str]:
"""Break text into a list of atomic, verifiable claims."""
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{
"role": "user",
"content": f"""Break the following text into atomic factual claims.
Each claim should be a single, self-contained, verifiable statement.
Do NOT include opinions or subjective statements.
Return as JSON: {{"claims": [list of claim strings]}}
Text: {text}"""
}],
temperature=0,
response_format={"type": "json_object"},
)
result = json.loads(resp.choices[0].message.content)
return result.get("claims", [])
text = """GPT-3 was released by OpenAI in 2020. It has 175 billion parameters
and was trained on 570GB of text data. It demonstrated few-shot learning."""
claims = decompose_into_claims(text)
for i, claim in enumerate(claims, 1):
print(f"{i}. {claim}")
Step 2 — Verify Each Claim
def verify_claim(claim: str, context: str = None) -> dict:
"""Verify a single atomic claim."""
if context:
prompt = f"""Given this context, is the claim supported, contradicted, or unverifiable?
Context: {context}
Claim: {claim}
JSON: {{"verdict": "supported|contradicted|unverifiable", "confidence": 0.0-1.0}}"""
else:
prompt = f"""Is this factual claim accurate based on your training knowledge?
Claim: {claim}
JSON: {{"verdict": "true|false|uncertain", "confidence": 0.0-1.0, "note": "<brief reason>"}}"""
resp = client.chat.completions.create(
model="gpt-4o", # Use stronger model for verification
messages=[{"role": "user", "content": prompt}],
temperature=0,
response_format={"type": "json_object"},
)
return json.loads(resp.choices[0].message.content)
def claim_level_validation(text: str, context: str = None) -> dict:
"""Full claim decomposition + verification pipeline."""
claims = decompose_into_claims(text)
results = []
for claim in claims:
verification = verify_claim(claim, context)
verification["claim"] = claim
results.append(verification)
# Summary
failed = [r for r in results if r["verdict"] in ("false", "contradicted")]
uncertain = [r for r in results if r["verdict"] in ("uncertain", "unverifiable")]
return {
"total_claims": len(claims),
"passed": len(claims) - len(failed) - len(uncertain),
"failed": len(failed),
"uncertain": len(uncertain),
"overall_valid": len(failed) == 0,
"details": results,
}
result = claim_level_validation(
"GPT-3 was released by OpenAI in 2020 with 175 billion parameters."
)
print(f"Claims: {result['total_claims']} | Failed: {result['failed']} | Valid: {result['overall_valid']}")
Common Mistakes
- Verifying compound claims — "GPT-3 was released in 2020 with 175B parameters" is two claims. Decompose first, then verify each separately.
- Using weaker model to verify — the verifier must be as capable as (or more capable than) the generator. Use GPT-4o for verification.
- Not providing context — for RAG outputs, always pass the retrieved context to the verifier. This enables faithfulness checking rather than pure fact-checking.
Quick Quiz
Q1. What is an atomic claim?
A1. A single, self-contained, verifiable factual statement that cannot be further decomposed without losing meaning.
Q2. What is the key paper associated with atomic claim-level evaluation?
A2. FActScoring (Min et al., 2023) — which introduced fine-grained atomic fact verification for long-form text generation.
Q3. Why is claim decomposition more useful than whole-paragraph validation?
A3. It identifies exactly which specific facts are wrong, providing actionable feedback. Whole-paragraph validation only gives a pass/fail verdict.
Student Exercise
Exercise 12.5 — Fact check a Wikipedia paragraph
Take a Wikipedia paragraph on a technical topic. Decompose it into atomic claims using the pipeline. Verify each claim against GPT-4o. Report the accuracy percentage and list any claims GPT-4o disputes.