For LSTM models working with text, the main goal is often to correctly predict sequences or classify text. Common metrics include accuracy for classification tasks, and perplexity or cross-entropy loss for language modeling. Accuracy tells us how many text samples were correctly labeled. Perplexity measures how well the model predicts the next word, with lower values meaning better predictions. These metrics help us understand if the model is learning meaningful patterns in text.
LSTM for text in NLP - Model Metrics & Evaluation
| Predicted Positive | Predicted Negative |
|--------------------|--------------------|
| True Positive (TP): 80 | False Negative (FN): 20 |
| False Positive (FP): 10 | True Negative (TN): 90 |
Total samples = TP + FP + TN + FN = 80 + 10 + 90 + 20 = 200
Precision = TP / (TP + FP) = 80 / (80 + 10) = 0.89
Recall = TP / (TP + FN) = 80 / (80 + 20) = 0.80
F1 Score = 2 * (Precision * Recall) / (Precision + Recall) = 2 * (0.89 * 0.80) / (0.89 + 0.80) ≈ 0.84
In text tasks, the balance between precision and recall depends on the goal:
- Spam detection: High precision is important. We want to avoid marking good emails as spam (false positives).
- Sentiment analysis for customer feedback: High recall is important. We want to catch as many negative comments as possible, even if some are missed.
LSTM models can be tuned to favor precision or recall by adjusting thresholds or loss functions.
Good metrics for text classification with LSTM:
- Accuracy above 85% on balanced data
- Precision and recall both above 80%
- F1 score close to precision and recall
Bad metrics might be:
- Accuracy near random chance (e.g., 50% for binary)
- Very high precision but very low recall (or vice versa), showing imbalance
- High loss or perplexity in language modeling, indicating poor prediction
- Accuracy paradox: High accuracy can be misleading if classes are imbalanced (e.g., 90% accuracy by always predicting the majority class).
- Data leakage: If test data leaks into training, metrics look unrealistically good.
- Overfitting: Very low training loss but high test loss means the model memorizes training text but fails on new text.
- Ignoring class imbalance: Not using metrics like F1 or balanced accuracy can hide poor performance on minority classes.
Your LSTM text classification model has 98% accuracy but only 12% recall on the positive class (e.g., spam). Is it good for production? Why or why not?
Answer: No, it is not good. The high accuracy is likely due to many negative samples dominating the data. The very low recall means the model misses most positive cases (spam), which is critical to catch. This model would fail to identify most spam emails, making it unreliable in practice.
Practice
Solution
Step 1: Understand LSTM's role in text
LSTM models are designed to remember sequences, which means they keep track of word order in sentences.Step 2: Compare options with LSTM function
Only It remembers the order of words in a sentence. correctly describes LSTM's ability to remember word order. Other options describe unrelated tasks.Final Answer:
It remembers the order of words in a sentence. -> Option CQuick Check:
LSTM remembers word order = B [OK]
- Thinking LSTM translates languages
- Confusing LSTM with image processing
- Assuming LSTM removes punctuation
Solution
Step 1: Identify LSTM layer syntax in Keras
The LSTM layer is added with LSTM(units, input_shape=(timesteps, features)). model.add(LSTM(128, input_shape=(timesteps, features))) matches this syntax.Step 2: Check other options for correctness
model.add(Dense(128, input_shape=(timesteps, features))) is a Dense layer, not LSTM. model.add(Conv2D(128, kernel_size=3)) is a Conv2D layer for images. model.add(Embedding(128, input_shape=(timesteps, features))) is an Embedding layer, not LSTM.Final Answer:
model.add(LSTM(128, input_shape=(timesteps, features))) -> Option AQuick Check:
LSTM layer syntax = D [OK]
- Using Dense instead of LSTM for sequence data
- Confusing Embedding with LSTM layer
- Applying Conv2D for text input
model = Sequential() model.add(Embedding(input_dim=1000, output_dim=64, input_length=10)) model.add(LSTM(32)) output = model.output_shape
Solution
Step 1: Understand Embedding and LSTM output shapes
The Embedding layer outputs (batch_size, 10, 64). The LSTM with 32 units returns (batch_size, 32) by default (last output only).Step 2: Match output shape with options
(None, 32) matches (None, 32) where None is batch size. Other options are incorrect shapes.Final Answer:
(None, 32) -> Option BQuick Check:
LSTM output shape = (None, 32) [OK]
- Assuming LSTM outputs full sequence by default
- Confusing embedding output with LSTM output
- Ignoring batch size dimension
model = Sequential() model.add(LSTM(64, input_shape=(100,))) model.add(Dense(1, activation='sigmoid')) model.compile(optimizer='adam', loss='binary_crossentropy')
Solution
Step 1: Check input shape for LSTM layer
LSTM expects input shape as (timesteps, features). Here, (100,) is 1D, missing feature dimension.Step 2: Validate other components
Binary classification uses sigmoid activation and binary_crossentropy loss correctly. Adam optimizer is suitable.Final Answer:
Input shape should be 2D, e.g., (timesteps, features), not (100,) -> Option DQuick Check:
LSTM input shape must be 2D = A [OK]
- Using 1D input shape for LSTM
- Changing activation incorrectly for binary tasks
- Mixing loss functions for binary classification
Solution
Step 1: Understand preprocessing for text in LSTM models
Embedding layers convert words into meaningful numeric vectors, helping LSTM understand word relationships.Step 2: Evaluate other options
Dense layers expect numeric input, not raw text. Conv2D is for images. Feeding raw strings to LSTM causes errors.Final Answer:
Add an Embedding layer to convert words into dense vectors before the LSTM. -> Option AQuick Check:
Embedding before LSTM = C [OK]
- Feeding raw text directly to LSTM
- Using Dense or Conv2D layers on raw text
- Skipping word vector conversion
Ready to prove it?
Pass the test and this pattern moves unknown
