Chatbots with PyTorch and FastAPI

Saverio Mazza
2 min readJan 31, 2024

This tutorial will guide you through the process of building a chatbot using PyTorch and Python, delving into aspects such as model architecture, data preparation, training, evaluation, and deployment.

Setting up the Python Environment

Before we dive into the chatbot creation, let’s set up our Python environment. We will be working with Python 3.8 and PyTorch 1.12:

# Create and activate a new conda environment
conda create -n chatbot python=3.8
conda activate chatbot

# Install PyTorch
pip install torch==1.12.0+cpu torchvision==0.13.0+cpu torchaudio===0.12.0 -f https://download.pytorch.org/whl/torch_stable.html
# Verify PyTorch installation
python -c "import torch; print(torch.__version__)"

Chatbot Model Architecture

Our chatbot will be based on an LSTM (Long Short-Term Memory) encoder-decoder architecture, which is effective for sequence-to-sequence tasks.

import torch
import torch.nn as nn

class EncoderLSTM(nn.Module):
def __init__(self, input_size, hidden_size):
super(EncoderLSTM, self).__init__()
self.lstm = nn.LSTM(input_size, hidden_size)
def forward(self, input_seq):
_, (hidden, cell) = self.lstm(input_seq)
return hidden, cell
class DecoderLSTM(nn.Module):
def __init__(self, input_size, hidden_size):
super(DecoderLSTM, self).__init__()
self.lstm = nn.LSTM(input_size, hidden_size)
def forward(self, input_seq):
outputs, _ = self.lstm(input_seq)
return outputs
class Seq2Seq(nn.Module):
def __init__(self, encoder, decoder):
super(Seq2Seq, self).__init__()
self.encoder = encoder
self.decoder = decoder

Preparing Training Data

For training our chatbot, we need a dataset of dialog examples. We’ll use the Daily Dialog Dataset from Kaggle, which provides over 100k conversational exchanges.

from datasets import load_dataset

data = load_dataset("daily_dialog")
def tokenize(text):
return [vocab[token] for token in text.split()]
vocab = {"hello": 1, "what": 2, "is": 3, ...}
tokenized_data = data.map(tokenize)
# Splitting the dataset
from sklearn.model_selection import train_test_split
train_data, val_data…

Create an account to read the full story.

The author made this story available to Medium members only.
If you’re new to Medium, create a new account to read this story on us.

Or, continue in mobile web

Already have an account? Sign in

Recommended from Medium

Lists

See more recommendations