Learn how to apply a Naïve Bayes classification model to solve a Natural Language Processing (NLP) problem in Python in this article.
Here are the steps we will cover:
- Download a sample dataset
- Split the dataset into test and train data
- Vectorize the data
- Build and measure the accuracy of the model
For example, we will use a publicly available dataset for spam detection with 5,572 SMS messages labeled as ham (legitimate) or spam. Here’s how we’ll approach it:
Step 1: Download the dataset from this site and extract the files.

Step 2: Import the text dataset and provide column names.

Step 3: Convert labels (ham and spam) to numbers (0 and 1).

Step 4: Split the dataset into test and train.

Step 5: Vectorize the data to convert words to numerical structures. You can read more on this here.

Step 6: Vectorize the training dataset.

Step 7: Vectorize the test dataset.

Step 8: Build the Naïve Bayes classification model. If you want to learn more about Naïve Bayes, check out this post.

Step 9: Measure the accuracy on the test data.

References
I have used the codes from the following sites and modified wherever needed:
https://radimrehurek.com/data_science_python/
https://www.ritchieng.com/machine-learning-multinomial-naive-bayes-vectorization/
https://jakevdp.github.io/PythonDataScienceHandbook/05.05-naive-bayes.html
https://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html
Further reference materials:
https://stackabuse.com/python-for-nlp-sentiment-analysis-with-scikit-learn/
https://pythonprogramming.net/naive-bayes-classifier-nltk-tutorial/
https://www.geeksforgeeks.org/applying-multinomial-naive-bayes-to-nlp-problems/
https://towardsdatascience.com/naive-bayes-document-classification-in-python-e33ff50f937e
I personally found this post very helpful: https://www.ritchieng.com/machine-learning-multinomial-naive-bayes-vectorization/
You can find sample datasets on this site: https://blog.cambridgespark.com/50-free-machine-learning-datasets-natural-language-processing-d88fb9c5c8da