Benchmarking Financial Document Question Answering Systems
Listen to the summary
Uses a voice available on your device
Audio options
On this page 5 sections
Related concepts 2 concepts
Key Takeaways
- FinRank evaluates retrieval performance using 1185 manual question-answer records from 22 company filings.
- A 7B parameter instruction-tuned embedder achieved only 44.8 percent Recall at 10 on the pooled evidence corpus.
- Commonly used sub-billion-parameter encoders offer only a marginal performance improvement of at most 3.5 points over the BM25 baseline.
- A finance-adapted embedder failed to beat the standard BM25 baseline, performing 9.7 points lower.
- The use of curated hard negatives causes model accuracy to drop significantly, by 13.0 to 20.5 percentage points.
Summary & Methodology Analysis
The FinRank benchmark targets the retrieval phase of financial question answering systems by using a dataset of 1185 manually authored records derived from 10-K and 10-Q corporate filings. The methodology focuses on distinguishing between high-relevance supporting passages and curated hard negatives, which are similar but incorrect document segments. This testing regime evaluates whether a model can correctly identify evidence within a broader corpus rather than simply relying on surface-level keyword matching or statistical frequency.
Interactive System Flowchart
Illustrative Implementation
A short sketch of the paper's core idea, not the authors' own code.
# Illustrative sketch (not from the paper)
import torch, torch.nn.functional as F
embedder = torch.hub.load('e5-mistral-7b-instruct', 'model') # mock
def encode(t): return F.normalize(embedder.encode(t), dim=-1)
queries = ["What is the revenue for Company A?"]
gold = ["Revenue increased to $5B in FY2023."]
hard = ["Revenue decreased to $3B in FY2022."]
q, p, n = encode(queries[0]), encode(gold[0]), encode(hard[0])
pos, neg = (q * p).sum(), (q * n).sum()
pairwise_acc = (pos > neg).float().item()
print("Pairwise accuracy:", pairwise_acc)
# Mock Recall@10 using BM25 placeholder
retrieved = ["..."] # top‑k passages
recall10 = 1.0 if gold[0] in retrieved[:10] else 0.0
print("Recall@10:", recall10)// Illustrative sketch (not from the paper)
const tf = require('@tensorflow/tfjs-node');
// Mock embedder loader (e5-mistral-7b-instruct)
const embedder = { encode: (txt) => tf.randomNormal([768]) }; // placeholder
function encode(text){ return tf.linalg.l2Normalize(embedder.encode(text), -1); }
const queries = ["What is the revenue for Company A?"];
const gold = ["Revenue increased to $5B in FY2023."];
const hard = ["Revenue decreased to $3B in FY2022."];
const q = encode(queries[0]);
const p = encode(gold[0]);
const n = encode(hard[0]);
const pos = tf.sum(tf.mul(q, p)).arraySync();
const neg = tf.sum(tf.mul(q, n)).arraySync();
const pairwiseAcc = pos > neg ? 1 : 0;
console.log("Pairwise accuracy:", pairwiseAcc);
// Mock Recall@10 with BM25 placeholder
const retrieved = ["..."]; // top‑k passages
const recall10 = retrieved.slice(0,10).includes(gold[0]) ? 1.0 : 0.0;
console.log("Recall@10:", recall10);
Cross-Examination & FAQs
A deeper dive clarifying mechanics, constraints, and baseline evaluations.
Q1. What is FinRank?
FinRank is an evidence-grounded benchmark consisting of 1185 manually authored question-answer records based on 10-K and 10-Q filings from 22 companies.
Q2. Can this benchmark be used to generate financial advice?
No, the benchmark is not intended for generating investment advice, valuations, or trading signals.
Q3. What is the primary goal of the benchmark?
It is designed to evaluate retrieval-grounded financial question answering over specific corporate disclosures.
Q4. How did a 7B parameter model perform on this task?
The e5-mistral-7b-instruct model reached 44.8 percent Recall at 10 on the pooled evidence corpus.
Q5. How do sub-billion-parameter encoders compare to BM25?
These encoders improve performance over the BM25 baseline by at most 3.5 points.
Q6. How did a finance-adapted embedder compare to the baseline?
The finance-adapted embedder underperformed the BM25 baseline by 9.7 points.
Q7. What happens when you use curated hard negatives?
Pairwise accuracy drops by 13.0 to 20.5 percentage points compared to using random negatives.
Q8. How was the correctness of the benchmark records determined?
Correctness was determined by a single annotator with sampled review rather than a consensus-adjudicated process.
Q9. Are there known limitations regarding the current benchmark validation?
Yes, a stratified double-annotation study is the most important outstanding item for a future release as the current version relies on single-annotator review.