Create, translate or update a chatbot#
🏁 Goal of this tutorial
By the end of this tutorial, you will know how to create or modify (eg to translate) a chatbot on your robot.
Pre-requisites#
You must first read Dialogue management. It contains essential explaination about the RASA chatbot engine and the file structure.
Step 1: creating a new RASA model#
Let’s create a new RASA model for the Spanish language, so the robot can converse both in English and Spanish. We also want the robot to understand, in Spanish, “what is the capital of Germany?”.
First of all create a new RASA model directory, or if prefered, make a copy of the existing English chatbot. To make it easier, you can copy the folder to your machine from the robot. The new chatbot folder name should follow standard language codes, e.g. es_ES.
Note
We follow the IETF language code: es_ES represents ‘Spanish from Spain’, while ca_ES would represent Catalan from Spain, and eg es_AR would represent Spanish as spoken in Argentina.
ssh pal@<robot>-0c
cd ~/.pal/chatbots-enabled/
cp -r en_GB es_ES
You can directly translate all the English content of the data/
folder to
Spanish, if you wish the chatbot to be exactly the same as in English. If you
are translating the chatbot to a new language, this is probably what you need.
In this case, you can directly jump to the Step 2: Train the new RASA model section.
But as we want to add a new question for the robot, we need to do more modifications.
As described in Dialogue management, each language model has a series of skills, for example:
chitchat
: general smalltalk and questionsdiagnostics
: specific diagnostics questions (like the IP address of the robot, etc)
The question you want to ask may not fit either category. In this case, you can
add a new skill, so that in the future you can add similar
questions for the robot. Let’s create for instance a new geography
chatbot.
Copy the same structure:
cp -r es_ES/chitchat es_ES/geography
Inside the data/
folder, update nlu.yml
to include example ways to ask
the question. Similar to chitchat, it is recommended to group all questions
together, so whenever asks a geography related question the robot always
replies. Intent name could be: geography/germany
version: "3.1" nlu:
- intent: geography/germany
examples: |
- cuál es la capital de Alemania?
- capital de Alemania?
Update domain.yml
by declaring the intent and example responses. As we are
generalizing intent name it is enough to declare it once as geography.
It is important that the response follows the structure of utter_INTENT_NAME. It is recommended that intent and response names are language-independent.
version: '3.1'
intents:
- geography
is_retrieval_intent: true
responses:
utter_geography/germany:
- text: La capital es Berlin!
- text: Berlin es la ciudad capital
Finally set-up the rule.yml
so whenever a geography
intent is detected,
the corresponding response is returned:
version: "3.1"
rules:
- rule: response to geography question
steps:
- intent: geography
- action: utter_geography
Step 2: Train the new RASA model#
First, you need to create a training configuration for your model (this only needs to be done the first time):
cd ~/.pal/chatbot_cfg/rasa-chatbots
cp -r en_GB es_ES
cd es_ES
Edit config.yml
and replace 'language: en'
by 'language: es'
. Then:
rm data
ln -s ~/.pal/chatbots-enabled/es_ES/ data
rm models/*
Next, you can train the model:
cd ~/.pal/chatbot_cfg/rasa-chatbots/es_ES
source /opt/pal/gallium/share/rasa/venv/bin/activate
export RASA_TELEMETRY_ENABLED=false # this is important! otherwise, you will get an error at the next step
Before training, you might want to validate your data, and clear all warning (otherwise, the training will fail):
rasa data validate --domain data
Then, you can train your model:
rasa train --domain data --fixed-model-name es_ES
This might take a few minutes.
Note
You need to re-run this step every time you update the strings in your model.
You should now have a file models/es_ES.tar.gz
. Congratulations, you have
successfully trained your custom chatbot!
Step 3: Test your chatbot#
If previously the chatbot was in English, change it to Spanish language so it loads the latest model, by simply changing the current active language:
rosparam set /pal/language es_ES
Note it takes some time to load a new model. You can check the progress from the Diagnostics tab of the WebCommander.
Then, test the new chatbot by speaking to the robot and asking the questions you have included. The robot should say the expected responses.
If you wish to test the chatbot separately from the speech recognition, you can publish the expected input:
rostopic pub /humans/voices/anonymous_speaker/speech hri_msgs/LiveSpeech "header:
seq: 0
stamp:
secs: 0
nsecs: 0
frame_id: ''
incremental: ''
final: 'capital de Alemania?'
confidence: 0.0"
The text-to-speech output can be monitored with:
rostopic echo /tts/goal
Next steps#
More advanced usage such as using RASA actions is covered in Trigger custom behaviours from the chatbot
You might also want to refer to the RASA documentation to learn about all the features and syntax supported by the chatbot engine.
If you want to know more speech recognition, continue with How-to: Automatic Speech Recognition (ASR)