Bird
Raised Fist0
NLPml~5 mins

Answer span extraction 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

Answer span extraction helps find the exact part of a text that answers a question. It makes machines understand and pick the right piece of information quickly.

When building a chatbot that answers questions from a document.
When creating a search engine that shows exact answers, not just links.
When summarizing long articles by highlighting key answers.
When helping users find specific facts in manuals or guides.
Syntax
NLP
start_logits, end_logits = model(input_ids)
start_index = start_logits.argmax()
end_index = end_logits.argmax()
answer_span = input_ids[start_index : end_index + 1]

start_logits and end_logits are scores for each word position showing where the answer might start and end.

The argmax() function picks the position with the highest score.

Examples
This example shows how to find the start and end positions from scores.
NLP
start_logits = torch.tensor([0.1, 0.2, 3.0, 0.5])
end_logits = torch.tensor([0.1, 0.3, 0.4, 2.5])
start_index = start_logits.argmax()  # 2
end_index = end_logits.argmax()      # 3
Extract tokens from input and convert them back to readable text.
NLP
answer_tokens = input_ids[start_index : end_index + 1]
answer_text = tokenizer.decode(answer_tokens)
Sample Model

This code uses a pre-trained model to find the answer span in the context for the question. It prints the exact answer text.

NLP
from transformers import AutoTokenizer, AutoModelForQuestionAnswering
import torch

# Load model and tokenizer
model_name = 'distilbert-base-uncased-distilled-squad'
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForQuestionAnswering.from_pretrained(model_name)

# Sample context and question
context = "The Eiffel Tower is located in Paris. It is a famous landmark."
question = "Where is the Eiffel Tower located?"

# Encode inputs
inputs = tokenizer(question, context, return_tensors='pt')

# Get model outputs
outputs = model(**inputs)
start_logits = outputs.start_logits
end_logits = outputs.end_logits

# Find start and end positions
start_index = torch.argmax(start_logits)
end_index = torch.argmax(end_logits)

# Extract answer tokens and decode
answer_tokens = inputs['input_ids'][0][start_index : end_index + 1]
answer = tokenizer.decode(answer_tokens, skip_special_tokens=True)

print(f"Answer: {answer}")
OutputSuccess
Important Notes

The model predicts scores for each word position to find the answer start and end.

Sometimes the predicted end position can be before the start; in practice, you may add checks to handle this.

Using a tokenizer helps convert text to tokens and back, making extraction easier.

Summary

Answer span extraction finds the exact part of text answering a question.

It uses model scores to pick start and end positions in the text.

This helps build smart question-answering systems that give precise answers.

Practice

(1/5)
1. What is the main goal of answer span extraction in NLP?
easy
A. To generate new text based on a prompt
B. To find the exact part of text that answers a question
C. To summarize long documents into short sentences
D. To translate text from one language to another

Solution

  1. Step 1: Understand the purpose of answer span extraction

    Answer span extraction focuses on locating the exact segment in a text that directly answers a question.
  2. Step 2: Compare with other NLP tasks

    Unlike translation, summarization, or text generation, answer span extraction pinpoints a specific text span as the answer.
  3. Final Answer:

    To find the exact part of text that answers a question -> Option B
  4. Quick Check:

    Answer span extraction = find exact answer span [OK]
Hint: Answer span extraction locates exact text answers [OK]
Common Mistakes:
  • Confusing answer span extraction with translation
  • Thinking it summarizes text instead of extracting spans
  • Assuming it generates new text
2. Which of the following is the correct way to represent the start and end positions for answer span extraction in code?
easy
A. start_index and end_index as integers
B. start_word and end_word as strings
C. start_time and end_time as floats
D. start_char and end_char as booleans

Solution

  1. Step 1: Identify typical data types for positions

    Positions in text are usually represented by integer indices marking start and end locations.
  2. Step 2: Evaluate options

    Strings or booleans do not represent positions well; floats for time are unrelated to text spans.
  3. Final Answer:

    start_index and end_index as integers -> Option A
  4. Quick Check:

    Positions = integer indices [OK]
Hint: Positions in text are integer indices [OK]
Common Mistakes:
  • Using strings instead of integer indices
  • Confusing character positions with time values
  • Using booleans for position markers
3. Given the text: 'The cat sat on the mat.' and predicted start index = 1, end index = 4, what is the extracted answer span?
medium
A. 'cat sat on'
B. 'sat on the'
C. 'on the mat'
D. 'The cat sat'

Solution

  1. Step 1: Identify tokens and their indices

    Tokenizing the sentence: ['The'(0), 'cat'(1), 'sat'(2), 'on'(3), 'the'(4), 'mat.'(5)]. The indices given (1 to 4) refer to 0-based token positions.
  2. Step 2: Extract tokens from start to end index

    In standard extraction, take tokens[start:end] (end exclusive): tokens[1:4] = ['cat'(1), 'sat'(2), 'on'(3)] = 'cat sat on'.
  3. Final Answer:

    'cat sat on' -> Option A
  4. Quick Check:

    Extract tokens from start to end index = 'cat sat on' [OK]
Hint: Match indices to tokens carefully [OK]
Common Mistakes:
  • Confusing character indices with token indices
  • Off-by-one errors in slicing
  • Ignoring punctuation in tokens
4. You have a model that predicts start and end indices for answer spans but sometimes the end index is smaller than the start index. What is the best way to fix this bug?
medium
A. Ignore the prediction and return an empty answer
B. Always set end index to start index plus one
C. Swap the start and end indices if end < start
D. Use only the start index as the answer

Solution

  1. Step 1: Understand the problem with indices

    End index smaller than start index is invalid because answer spans must go forward in text.
  2. Step 2: Choose a fix that preserves valid spans

    Swapping start and end indices corrects the order and keeps the predicted span meaningful.
  3. Final Answer:

    Swap the start and end indices if end < start -> Option C
  4. Quick Check:

    Fix invalid spans by swapping indices [OK]
Hint: Swap indices if end < start to fix spans [OK]
Common Mistakes:
  • Ignoring invalid spans instead of fixing
  • Forcing fixed span length blindly
  • Using only one index loses answer context
5. In a question-answering system, the model outputs start logits and end logits for each token. How should you combine these to find the best answer span?
hard
A. Choose random start and end indices
B. Pick the token with the highest start logit only
C. Pick the token with the highest end logit only
D. Find the pair of start and end indices with the highest sum of start and end logits where start ≤ end

Solution

  1. Step 1: Understand logits for start and end tokens

    Start and end logits represent scores for each token being the start or end of the answer span.
  2. Step 2: Combine logits to find best span

    We look for the pair (start, end) with the highest combined score, ensuring start ≤ end to form a valid span.
  3. Final Answer:

    Find the pair of start and end indices with the highest sum of start and end logits where start ≤ end -> Option D
  4. Quick Check:

    Combine start and end logits to find best span [OK]
Hint: Sum start and end logits, ensure start ≤ end [OK]
Common Mistakes:
  • Ignoring end logits and using start only
  • Choosing invalid spans where end < start
  • Picking random indices without scores