DataCamp Building Chatbots in Python
BUILDING CHATBOTS IN PYTHON
Stateful bots
Alan Nichol
Co-founder and CTO, Rasa
DataCamp Building Chatbots in Python
What do we mean by stateful?
"I love stateless systems!" "don't they have drawbacks?"
"don't what have drawbacks?"
DataCamp Building Chatbots in Python
State machines
Browsing
Providing address, billing info
Order complete
DataCamp Building Chatbots in Python
Implementing a state machine
INIT = 0
CHOOSE_COFFEE = 1
ORDERED = 2
Example rules:
policy_rules = {
(INIT, "order"): (CHOOSE_COFFEE, "ok, Columbian or Kenyan?"),
(CHOOSE_COFFEE, "specify_coffee"):
(ORDERED, "perfect, the beans are on their way!"),
}
DataCamp Building Chatbots in Python
Using the state machine
In [1]: state = INIT
In [2]: def respond(state, message):
...: (new_state, response) = policy_rules[(state, interpret(message))]
...: return new_state, response
In [3]: def send_message(state, message):
...: new_state, response = respond(state, message)
...: return new_state
In [4]: state = send_message(state, message)
DataCamp Building Chatbots in Python
BUILDING CHATBOTS IN PYTHON
Let's practice!
DataCamp Building Chatbots in Python
BUILDING CHATBOTS IN PYTHON
Asking questions &
queuing answers
Alan Nichol
Co-founder and CTO, Rasa
DataCamp Building Chatbots in Python
Reusable patterns
"I'd like some Kenyan beans" "Can I get a box of 200 brown filters"
"I'm sorry, we're out of those. Shall I "I'm sorry, we're out of those, but I can
order some Brazilian ones for you?" get your some white ones. Should I
order those for you?"
"Yes please"
"Yes please"
DataCamp Building Chatbots in Python
Pending actions
Policy returns two values: Selected action and pending_action
pending_action is saved in the outer scope
If we get a "yes" intent and there is a pending action, we execute it
If we get a "no" intent, we wipe any pending actions
DataCamp Building Chatbots in Python
Pending state transitions
"I'd like to order some coffee"
state = INIT
action = "request_auth"
pending_state = AUTHED
Sounds good! I'd love to help you but you'll have to log in first, what's your phone
number?
"555-12345"
state = AUTHED
action = "acknowledge_auth"
pending_state = None
Perfect! welcome back :)
DataCamp Building Chatbots in Python
BUILDING CHATBOTS IN PYTHON
Let's practice!
DataCamp Building Chatbots in Python
BUILDING CHATBOTS IN PYTHON
Frontiers of dialogue
technology
Alan Nichol
Co-founder and CTO, Rasa
DataCamp Building Chatbots in Python
A neural conversational model
"What do you think of Cleopatra?" "Oh, she's very regal"
"What do you think of Messi?" "He's a great player"
DataCamp Building Chatbots in Python
Seq2seq
Machine translation
Completely data driven, no hand-crafting
Requires large amount of data
No guarantee that output is coherent
Difficult to integrate DB / API calls & other logic
DataCamp Building Chatbots in Python
Grounded dialogue systems
Systems you've built in this course: hand-crafted
Seq2seq: Data driven
ML based dialogue systems:
NLU
Dialogue state manager
API logic
Natural language response generator
Human pretend to be a bot: "Wizard of Oz" technique
Reinforcement learning
Receives a reward for a successful conversation
DataCamp Building Chatbots in Python
Language generation
Not recommended if building a bot
Pre-trained neural network which can generate text
Scripts of every episode of The Simpsons
DataCamp Building Chatbots in Python
Generating sample text
generated = sample_text(
saved_params,
temperature,
num_letters=num_letters,
init_text=text
)
DataCamp Building Chatbots in Python
BUILDING CHATBOTS IN PYTHON
Let's practice!
DataCamp Building Chatbots in Python
BUILDING CHATBOTS IN PYTHON
Congratulations!
Alan Nichol
Co-founder and CTO, Rasa
DataCamp Building Chatbots in Python
BUILDING CHATBOTS IN PYTHON
Let's practice!