Bird
Raised Fist0
ML Pythonml~20 mins

Text classification pipeline in ML Python - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Text Classification Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Model Choice
intermediate
2:00remaining
Choosing the best model for short text classification
You have a dataset of short customer reviews labeled as positive or negative. Which model is most suitable to start with for this text classification task?
AA simple Logistic Regression model with TF-IDF features
BA deep Convolutional Neural Network with raw text input
CA K-Means clustering model to group reviews
DA Principal Component Analysis (PCA) model to reduce text dimensions
Attempts:
2 left
💡 Hint
Think about models that work well with labeled data and simple features for text.
❓ Predict Output
intermediate
2:00remaining
Output of text preprocessing code
What is the output of the following Python code that preprocesses text for classification?
ML Python
import re
text = "Hello World! This is AI-2024."
processed = re.sub(r'[^a-zA-Z ]', '', text).lower().split()
print(processed)
A['hello', 'world', 'this', 'is', 'ai']
B['Hello', 'World', 'This', 'is', 'AI']
C['hello', 'world', 'this', 'is', 'ai2024']
D['Hello', 'World', 'This', 'is', 'AI2024']
Attempts:
2 left
💡 Hint
Look at how non-letter characters are removed and text is lowered.
❓ Hyperparameter
advanced
2:00remaining
Selecting the best hyperparameter for TF-IDF vectorizer
You want to improve your text classification model by tuning the TF-IDF vectorizer. Which hyperparameter controls the maximum number of features (words) to keep?
Amin_df
Bmax_features
Cngram_range
Dstop_words
Attempts:
2 left
💡 Hint
This parameter limits the vocabulary size.
❓ Metrics
advanced
2:00remaining
Interpreting classification report metrics
Your text classification model outputs the following metrics: precision=0.8, recall=0.5, accuracy=0.75. What does the low recall indicate?
AThe model has perfect predictions
BThe model predicts too many false positives
CThe model has balanced errors between classes
DThe model misses many positive examples (false negatives are high)
Attempts:
2 left
💡 Hint
Recall measures how many actual positives are found.
🔧 Debug
expert
2:00remaining
Debugging a text classification pipeline error
You run this code snippet for training a text classification model but get a ValueError: Found input variables with inconsistent numbers of samples. What is the cause?
ML Python
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import LogisticRegression
texts = ['good', 'bad', 'average']
labels = [1, 0]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)
model = LogisticRegression()
model.fit(X, labels)
ALogisticRegression requires labels to be strings
BCountVectorizer cannot process single words
CThe labels list length does not match the number of text samples
Dfit_transform returns a dense matrix, but model expects sparse
Attempts:
2 left
💡 Hint
Check if the number of labels matches the number of texts.

Practice

(1/5)
1. What is the main purpose of a text classification pipeline in machine learning?
easy
A. To translate text from one language to another
B. To generate new text from existing data
C. To store text data in a database
D. To convert raw text into numbers and classify it

Solution

  1. Step 1: Understand the role of a pipeline

    A pipeline processes raw input data step-by-step to prepare it for a model.
  2. Step 2: Identify the pipeline's function in text classification

    It converts text into numbers and then classifies the text into categories.
  3. Final Answer:

    To convert raw text into numbers and classify it -> Option D
  4. Quick Check:

    Text classification pipeline = convert + classify [OK]
Hint: Remember: pipeline = text to numbers + classify [OK]
Common Mistakes:
  • Confusing classification with text generation
  • Thinking pipeline stores data only
  • Mixing translation with classification
2. Which of the following is the correct way to create a simple text classification pipeline using scikit-learn?
easy
A. Pipeline('vect' = CountVectorizer(), 'clf' = LogisticRegression())
B. Pipeline(('vect', CountVectorizer(), 'clf', LogisticRegression()))
C. Pipeline([('vect', CountVectorizer()), ('clf', LogisticRegression())])
D. Pipeline({'vect': CountVectorizer(), 'clf': LogisticRegression()})

Solution

  1. Step 1: Recall the Pipeline syntax in scikit-learn

    Pipeline expects a list of tuples, each tuple with a name and a transformer or estimator.
  2. Step 2: Check each option's syntax

    Pipeline([('vect', CountVectorizer()), ('clf', LogisticRegression())]) uses a list of tuples correctly. Options A, B, and C use wrong syntax (missing list, wrong brackets, or invalid keyword arguments).
  3. Final Answer:

    Pipeline([('vect', CountVectorizer()), ('clf', LogisticRegression())]) -> Option C
  4. Quick Check:

    Pipeline needs list of (name, step) tuples [OK]
Hint: Pipeline needs list of (name, step) tuples [OK]
Common Mistakes:
  • Using parentheses instead of list brackets
  • Passing dictionary instead of list
  • Using keyword arguments inside Pipeline
3. Given the following code, what will be the output of print(pipeline.predict(['I love this movie']))?
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import LogisticRegression

pipeline = Pipeline([
    ('vect', CountVectorizer()),
    ('clf', LogisticRegression())
])

pipeline.fit(['I love this movie', 'I hate this movie'], [1, 0])
print(pipeline.predict(['I love this movie']))
medium
A. [1]
B. [0]
C. [1, 0]
D. Error: model not trained

Solution

  1. Step 1: Understand the training data and labels

    The model is trained with two texts: 'I love this movie' labeled 1 (positive), and 'I hate this movie' labeled 0 (negative).
  2. Step 2: Predict the label for 'I love this movie'

    Since this exact text was labeled 1 during training, the model should predict 1.
  3. Final Answer:

    [1] -> Option A
  4. Quick Check:

    Same text as positive label predicts 1 [OK]
Hint: Same input as positive label predicts positive [OK]
Common Mistakes:
  • Assuming prediction returns multiple labels
  • Forgetting to fit the model before predict
  • Confusing label 0 and 1
4. Identify the error in this text classification pipeline code:
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB

pipeline = Pipeline([
    ('tfidf', TfidfVectorizer),
    ('clf', MultinomialNB())
])

pipeline.fit(['spam message', 'ham message'], [1, 0])
medium
A. MultinomialNB should be replaced with LogisticRegression
B. TfidfVectorizer is not instantiated with parentheses
C. Labels should be strings, not integers
D. Pipeline steps should be a dictionary, not a list

Solution

  1. Step 1: Check the pipeline step definitions

    The 'tfidf' step uses TfidfVectorizer without parentheses, so it's a class, not an instance.
  2. Step 2: Understand the need for instantiation

    Pipeline steps require instances of transformers/estimators, so TfidfVectorizer() with parentheses is needed.
  3. Final Answer:

    TfidfVectorizer is not instantiated with parentheses -> Option B
  4. Quick Check:

    Instantiate transformers with () [OK]
Hint: Always add () to instantiate transformers [OK]
Common Mistakes:
  • Forgetting parentheses when creating transformer
  • Changing model type unnecessarily
  • Using wrong data types for labels
  • Using dict instead of list for pipeline steps
5. You want to build a text classification pipeline that handles both text cleaning (lowercasing and removing punctuation) and classification. Which approach correctly integrates custom text cleaning into the pipeline?
hard
A. Create a custom transformer class for cleaning, then add it before vectorizer in the pipeline
B. Add text cleaning code inside the LogisticRegression model
C. Clean text after vectorization step in the pipeline
D. Use CountVectorizer with lowercase=True and skip custom cleaning

Solution

  1. Step 1: Understand pipeline order and custom steps

    Text cleaning must happen before vectorization to affect input text properly.
  2. Step 2: Implement custom cleaning as a transformer

    Creating a custom transformer class allows integration into the pipeline before vectorizer.
  3. Step 3: Evaluate other options

    Add text cleaning code inside the LogisticRegression model is wrong because models don't clean text. Clean text after vectorization step in the pipeline is too late to clean text. Use CountVectorizer with lowercase=True and skip custom cleaning only lowercases but does not remove punctuation.
  4. Final Answer:

    Create a custom transformer class for cleaning, then add it before vectorizer in the pipeline -> Option A
  5. Quick Check:

    Custom cleaning before vectorizer = Create a custom transformer class for cleaning, then add it before vectorizer in the pipeline [OK]
Hint: Clean text before vectorizing using custom transformer [OK]
Common Mistakes:
  • Trying to clean text inside the model
  • Cleaning text after vectorization
  • Relying only on vectorizer lowercase without punctuation removal
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard