Bird
Raised Fist0
NLPml~5 mins

ROUGE evaluation metrics in NLP

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
ROUGE helps us check how good a computer summary is by comparing it to a human summary. It measures how much they overlap in words or phrases.
When you want to see how well a machine-made summary matches a human summary.
When testing different text summarization methods to find the best one.
When evaluating chatbots or AI that generate text to check quality.
When comparing translations or paraphrases to original text.
When measuring improvements after changing your text generation model.
Syntax
NLP
from rouge_score import rouge_scorer

scorer = rouge_scorer.RougeScorer(['rouge1', 'rougeL'], use_stemmer=True)
scores = scorer.score(reference_text, generated_text)
You create a scorer object specifying which ROUGE types to use, like 'rouge1' or 'rougeL'.
The score method compares two texts and returns precision, recall, and F1 scores.
Examples
This compares two simple sentences using ROUGE-1, which looks at overlapping single words.
NLP
scorer = rouge_scorer.RougeScorer(['rouge1'], use_stemmer=True)
scores = scorer.score('The cat sat on the mat.', 'The cat is on the mat.')
This uses ROUGE-L, which measures longest common subsequence, without stemming words.
NLP
scorer = rouge_scorer.RougeScorer(['rougeL'], use_stemmer=False)
scores = scorer.score('A quick brown fox.', 'A quick fox.')
Sample Model
This code compares a reference sentence and a generated sentence using ROUGE-1 and ROUGE-L with stemming. It prints precision, recall, and F1 scores for each metric.
NLP
from rouge_score import rouge_scorer

reference = "The quick brown fox jumps over the lazy dog."
generated = "A fast brown fox leaps over a lazy dog."

scorer = rouge_scorer.RougeScorer(['rouge1', 'rougeL'], use_stemmer=True)
scores = scorer.score(reference, generated)

print(f"ROUGE-1: Precision={scores['rouge1'].precision:.2f}, Recall={scores['rouge1'].recall:.2f}, F1={scores['rouge1'].fmeasure:.2f}")
print(f"ROUGE-L: Precision={scores['rougeL'].precision:.2f}, Recall={scores['rougeL'].recall:.2f}, F1={scores['rougeL'].fmeasure:.2f}")
OutputSuccess
Important Notes
ROUGE-1 counts overlapping single words between texts.
ROUGE-L looks at the longest sequence of words shared in order.
Stemming helps match words with the same root, like 'jumps' and 'jump'.
Summary
ROUGE measures how much a generated text matches a reference text.
It gives scores for precision, recall, and F1 to show quality.
Common ROUGE types are ROUGE-1 (words) and ROUGE-L (longest sequence).

Practice

(1/5)
1. What does the ROUGE metric primarily measure in natural language processing?
easy
A. The sentiment of the generated text
B. The speed of text generation
C. The overlap between generated text and reference text
D. The grammatical correctness of text

Solution

  1. Step 1: Understand ROUGE's purpose

    ROUGE is designed to compare generated text with a reference to check similarity.
  2. Step 2: Identify what ROUGE measures

    It measures how much the generated text overlaps with the reference text in terms of words or sequences.
  3. Final Answer:

    The overlap between generated text and reference text -> Option C
  4. Quick Check:

    ROUGE = overlap measure [OK]
Hint: ROUGE checks text similarity, not speed or grammar [OK]
Common Mistakes:
  • Confusing ROUGE with grammar checkers
  • Thinking ROUGE measures sentiment
  • Assuming ROUGE measures generation speed
2. Which of the following is the correct way to calculate ROUGE-1 recall?
easy
A. Number of overlapping unigrams divided by total unigrams in generated text
B. Number of overlapping unigrams divided by total unigrams in reference text
C. Number of overlapping bigrams divided by total bigrams in generated text
D. Number of overlapping bigrams divided by total bigrams in reference text

Solution

  1. Step 1: Recall definition in ROUGE-1

    Recall measures how much of the reference text's unigrams appear in the generated text.
  2. Step 2: Apply recall formula

    Recall = overlapping unigrams / total unigrams in reference text.
  3. Final Answer:

    Number of overlapping unigrams divided by total unigrams in reference text -> Option B
  4. Quick Check:

    Recall = overlap/reference [OK]
Hint: Recall divides by reference text count, not generated [OK]
Common Mistakes:
  • Mixing up recall with precision
  • Using generated text count in recall
  • Confusing unigrams with bigrams
3. Given the reference text: "the cat sat on the mat" and generated text: "the cat lay on rug", what is the ROUGE-1 precision score?
medium
A. 0.6
B. 0.5
C. 0.4
D. 0.7

Solution

  1. Step 1: Identify overlapping unigrams

    Common words: "the", "cat", "on". Overlapping unigrams = 3: "the", "cat", "on".
  2. Step 2: Calculate precision

    Precision = overlapping unigrams / total unigrams in generated text = 3 / 5 = 0.6.
  3. Final Answer:

    0.6 -> Option A
  4. Quick Check:

    Precision = 3/5 = 0.6 [OK]
Hint: Precision = overlap / generated text words count [OK]
Common Mistakes:
  • Counting duplicates incorrectly
  • Using reference text length for precision
  • Ignoring repeated words in calculation
4. You wrote code to compute ROUGE-L but the scores are always zero. Which of these is the most likely bug?
medium
A. Calculating precision instead of recall
B. Using ROUGE-1 instead of ROUGE-L
C. Using lowercase text for both inputs
D. Not tokenizing the texts before comparison

Solution

  1. Step 1: Understand ROUGE-L calculation

    ROUGE-L depends on longest common subsequence of tokens, so tokenization is essential.
  2. Step 2: Identify impact of missing tokenization

    If texts are not tokenized, comparison fails, resulting in zero scores.
  3. Final Answer:

    Not tokenizing the texts before comparison -> Option D
  4. Quick Check:

    Tokenization missing = zero ROUGE-L [OK]
Hint: Always tokenize texts before ROUGE-L calculation [OK]
Common Mistakes:
  • Skipping tokenization step
  • Confusing ROUGE types
  • Ignoring case normalization impact
5. You want to evaluate a summarization model using ROUGE scores. The model produces very short summaries missing many reference words. Which ROUGE metric and score should you focus on to best understand coverage?
hard
A. ROUGE-1 recall, because it shows how many reference words are captured
B. ROUGE-1 precision, because it shows how many generated words are correct
C. ROUGE-L F1, because it balances precision and recall on longest sequences
D. ROUGE-2 precision, because it focuses on bigram accuracy

Solution

  1. Step 1: Understand the problem context

    The summaries are short and miss many reference words, so coverage of reference is low.
  2. Step 2: Choose metric that measures coverage

    Recall measures how much of the reference text is captured by the summary, so ROUGE-1 recall is best.
  3. Final Answer:

    ROUGE-1 recall, because it shows how many reference words are captured -> Option A
  4. Quick Check:

    Coverage = recall = ROUGE-1 recall [OK]
Hint: Use ROUGE-1 recall to check coverage of reference words [OK]
Common Mistakes:
  • Focusing on precision instead of recall
  • Using ROUGE-2 which is stricter
  • Ignoring recall's role in coverage