When meaning matters and exact words don't
BERTScore replaces n-gram overlap with embedding similarity. Each token in the candidate is matched to its most similar token in the reference using BERT (or any contextual embedding model), and the per-token similarities are averaged. Result: paraphrases that say the same thing in different words score high; lexical overlap with different meaning scores low.
How it works
- Encode reference and candidate with a contextual model (BERT, RoBERTa, or modern equivalents).
- For each token in the candidate, find its highest-similarity token in the reference.
- Aggregate into precision (candidate-side), recall (reference-side), and F1.
Why it's better than BLEU/ROUGE for most tasks
BLEU treats "physician" and "doctor" as zero overlap. BERTScore treats them as nearly identical. The result correlates much more strongly with human judgment for paraphrase, summarization, and translation tasks.
What it still won't catch
- Logical errors — "X causes Y" and "Y causes X" can score high together.
- Negations — "is safe" and "is not safe" share most embedding mass.
- Numerical mistakes — "$1M" vs "$10M" looks semantically close to embeddings.
Practical considerations
Pick the model carefully. microsoft/deberta-large-mnli tends to outperform vanilla BERT for evaluation. Cache embeddings if you re-run on the same dataset. The first run is expensive; subsequent runs are basically free.