In this story, I will build and deploy a very simple Artificial Intelligence Chatbot using Python.
Now, before we build and deploy a chatbot let’s go through some basics of what a chatbot is and how it works. If you don’t want to go through the basics then you will find the code to build and deploy a chatbot at the end of this article.
What is a Chatbot? How to Deploy a Chatbot?
A Chatbot is a computer program which is programmed to interact with a human. A chatbot is designed to reply to a human user based on their queries and conversations. If you think chatbots are a new technology, you’re wrong. The first chatbot, Eliza, was built in 1966 at MIT’s Artificial Intelligence Laboratory by Joseph Weizenbaum to mimic human conversations.
These chatbots are usually converse via auditory or textual methods, and they can effortlessly mimic human languages to communicate with human beings in a human-like manner. A chatbot is arguably one of the best applications of natural language processing.
Chatbots can be categorized into two primary variants:
Rule-Based and Self-learning.
The Rule-based approach trains a chatbot to answer questions based on a set of pre-determined rules on which it was initially trained. These set rules can either be very simple or very complex. While rule-based chatbots can handle simple queries quite well, they usually fail to process more complicated queries/requests.
As the name suggests, self-learning bots are chatbots that can learn on their own. These leverage advanced technologies like Artificial Intelligence and Machine Learning to train themselves from instances and behaviours. Naturally, these chatbots are much smarter than rule-based bots. Self-learning bots can be further divided into two categories – Retrieval Based or Generative.
1. Retrieval-based Chatbots
A retrieval-based chatbot is one that functions on predefined input patterns and set responses. Once the question/pattern is entered, the chatbot uses a heuristic approach to deliver the appropriate response. The retrieval-based model is extensively used to design goal-oriented chatbots with customized features like the flow and tone of the bot to enhance the customer experience.
2. Generative Chatbots
Unlike retrieval-based chatbots, generative chatbots are not based on predefined responses – they leverage seq2seq neural networks. This is based on the concept of machine translation where the source code is translated from one language to another language. In seq2seq approach, the input is transformed into an output.
The first chatbot dates back to 1966 when Joseph Weizenbaum created ELIZA that could imitate the language of a psychotherapist in only 200 lines of code. However, thanks to the rapid advancement of technology, we’ve come a long way from scripted chatbots to chatbots in python today.
Chatbot in Today’s Generation
Today, we have smart AI-powered Chatbots that use natural language processing (NLP) to understand human commands (text and voice) and learn from experience. Chatbots have become a staple customer interaction tool for companies and brands that have an active online presence (website and social network platforms).
Chatbots using python are a nifty tool since they facilitate instant messaging between the brand and the customer. Think about Apple’s Siri, Amazon’s Alexa, and Microsoft’s Cortana. Aren’t these just wonderful? Aren’t you already curious to learn how to make a chatbot in Python?
Essentially, the chatbot using Python are programmed to take in the information you provide to it and then analyze it with the help of complex AI algorithms, and provide you with either a written or verbal response. Since these bots can learn from behaviour and experiences, they can respond to a wide range of queries and commands.
Although chatbot in python has already begun to dominate the tech scene at present, Gartner predicts that by 2020, chatbots will handle nearly 85% of the customer-brand interactions.
In light of the increasing popularity and adoption of chatbots in the industry, you can increase your market value by learning how to make a chatbot in Python – one of the most extensively used programming languages in the world.
Today, we will teach you how to make a simple chatbot in Python using the ChatterBot Python library. So, let’s get started!
ChatterBot is a Python library that is designed to deliver automated responses to user inputs. It makes use of a combination of ML algorithms to generate many different types of responses. This feature allows developers to build chatbots using python that can converse with humans and deliver appropriate and relevant responses. Not just that, the ML algorithms help the bot to improve its performance with experience.
Another excellent feature of ChatterBot is its language independence. The library is designed in a way that makes it possible to train your bot in multiple programming languages.
How does ChatterBot function?
When a user enters a specific input in the chatbot (developed on ChatterBot), the bot saves the input along with the response, for future use. This data (of collected experiences) allows the chatbot to generate automated responses each time a new input is fed into it.
The program chooses the most-fitting response from the closest statement that matches the input, and then delivers a response from the already known selection of statements and responses. Over time, as the chatbot engages in more interactions, the accuracy of response improves.
How To Make A Chatbot In Python?
We’ll take a step by step approach and break down the process of building a Python chatbot.
To build a chatbot in Python, you have to import all the necessary packages and initialize the variables you want to use in your chatbot project. Also, remember that when working with text data, you need to perform data preprocessing on your dataset before designing an ML model.
This is where tokenizing helps with text data – it helps fragment the large text dataset into smaller, readable chunks (like words). Once that is done, you can also go for lemmatization that transforms a word into its lemma form. Then it creates a pickle file to store the python objects that are used for predicting the responses of the bot.
Another vital part of the chatbot development process is creating the training and testing datasets.
Now that we’ve covered the basics of chatbot development in Python, let’s dive deeper into the actual process!
1. Prepare the Dependencies
The first step in creating a chatbot in Python with the ChatterBot library is to install the library in your system. It is best if you create and use a new Python virtual environment for the installation. To do so, you have to write and execute this command in your Python terminal:
pip install chatterbot pip install chatterbot_corpus
If you wish to upgrade the command, you can do so as well:
pip install --upgrade chatterbot pip install --upgrade chatterbot_corpus
Now that your setup is ready, we can move on to the next step to create chatbot using python.
2. Import Classes
Importing classes is the second step in the Python chatbot creation process. All you need to do is import two classes – ChatBot from chatterbot and ListTrainer from chatterbot.trainers. To do this, you can execute the following command:
from chatterbot import ChatBot from chatterbot.trainers import ListTrainer
3. Create and Train the Chatbot
This is the third step on creating chatbot in python. The chatbot you are creating will be an instance of the class “ChatBot.” After creating a new ChatterBot instance, you can train the bot to improve its performance. Training ensures that the bot has enough knowledge to get started with specific responses to specific inputs. You have to execute the following command now:
my_bot = ChatBot (name='PyBot', read_only = True, logic_adapters = ['chatterbot.logic.MathematicalEvaluation', 'chatterbot.logic.BestMatch'])
Here, the argument (that corresponds to the parameter name) represents the name of your Python chatbot. If you wish to disable the bot’s ability to learn after the training, you can include the “read_only=True” command. The command “logic_adapters” denotes the list of adapters used to train the chatbot.
While the “chatterbot.logic.MathematicalEvaluation” helps the bot to solve math problems, the “chatterbot.logic.BestMatch” helps it to choose the best match from the list of responses already provided.
Since you have to provide a list of responses, you can do it by specifying the lists of strings that can be later used to train your Python chatbot, and find the best match for each query. So, we have to provide responses. We do that by specifying the lists of strings later used to train the bot and find the best match for each question. This is what I want our bot to learn for now:
small_talk = ['hi there!', 'hi!', 'how do you do?', 'how are you?', 'i'm cool.', 'fine, you?', 'always cool.', 'i'm ok', 'glad to hear that.', 'i'm fine', 'glad to hear that.', 'i feel awesome', 'excellent, glad to hear that.', 'not so good', 'sorry to hear that.', 'what's your name?', 'i'm pybot. ask me a math question, please.'] math_talk_1 = ['pythagorean theorem', 'a squared plus b squared equals c squared.'] math_talk_2 = ['law of cosines', 'c**2 = a**2 + b**2 - 2 * a * b * cos(gamma)']
We can create and train the bot by creating an instance of ListTrainer and supplying it with the lists of strings:
list_trainer = ListTrainer(my_bot) for item in (small_talk, math_talk_1, math_talk_2): list_trainer.train(item)
The bot should now be trained and ready to communicate.
Communicating with a Bot
You can communicate with your bot using its method .get_response(). Here’s an example of how that might look like:
>>> print(my_bot.get_response("hi")) how do you do? >>> print(my_bot.get_response("i feel awesome today")) excellent, glad to hear that. >>> print(my_bot.get_response("what's your name?")) i'm pybot. ask me a math question, please. >>> print(my_bot.get_response("show me the pythagorean theorem")) a squared plus b squared equals c squared. >>> print(my_bot.get_response("do you know the law of cosines?")) c**2 = a**2 + b**2 - 2 * a * b * cos(gamma)
Don’t expect the bot to answer each question well! Its knowledge is limited to the stuff similar to what it has learned. Many times, you’ll find it answering nonsense, especially if you don’t provide comprehensive training.
Training a Bot with a Corpus of Data
You can use your own or an existing corpus of data to train a bot. For example, you can use some corpus provided by chatterbot:
from chatterbot.trainers import ChatterBotCorpusTrainer corpus_trainer = ChatterBotCorpusTrainer(my_bot) corpus_trainer.train('chatterbot.corpus.english') chatterbot offers this functionality in several languages. You can also specify a subset of a corpus you’d like to use.
Now you know how to create and use a simple chatbot.
This is just a small illustration of what you can do with natural language processing and chatbots. There are many more possibilities out there. If you’re interested in exploring them, you can start by getting familiar with NLTK and ChatterBot.