Policies
Policies
The rasa.core.policies.Policy class decides which action to take
at every step in the conversation.
There are different policies to choose from, and you can include
multiple policies in a single rasa.core.agent.Agent.
Note
Per default a maximum of 10 next actions can be predicted
by the agent after every user message. To update this value
you can set the environment variable MAX_NUMBER_OF_PREDICTIONS
to the desired number of maximum predictions.
Your project’s config.yml file takes a policies key
which you can use to customize the policies your assistant uses.
In the example below, the last two lines show how to use a custom
policy class and pass arguments to it.
policies:
- name: "KerasPolicy"
featurizer:
- name: MaxHistoryTrackerFeaturizer
max_history: 5
state_featurizer:
- name: BinarySingleStateFeaturizer
- name: "MemoizationPolicy"
max_history: 5
- name: "FallbackPolicy"
nlu_threshold: 0.4
core_threshold: 0.3
fallback_action_name: "my_fallback_action"
- name: "path.to.your.policy.class"
arg1: "..."
Max History
One important hyperparameter for Rasa Core policies is the max_history.
This controls how much dialogue history the model looks at to decide which
action to take next.
You can set the max_history by passing it to your policy’s Featurizer
in the policy configuration yaml file.
Note
Only the MaxHistoryTrackerFeaturizer uses a max history,
whereas the FullDialogueTrackerFeaturizer always looks at
the full conversation history. See Featurization of Conversations for details.
Data Augmentation
When you train a model, by default Rasa Core will create longer stories by randomly gluing together the ones in your stories files. This is because if you have stories like:
# thanks
* thankyou
- utter_youarewelcome
# bye
* goodbye
- utter_goodbye
You actually want to teach your policy to ignore the dialogue history when it isn’t relevant and just respond with the same action no matter what happened before.
You can alter this behaviour with the --augmentation flag.
Which allows you to set the augmentation_factor.
The augmentation_factor determines how many augmented stories are
subsampled during training. The augmented stories are subsampled before training
since their number can quickly become very large, and we want to limit it.
The number of sampled stories is augmentation_factor x10.
By default augmentation is set to 20, resulting in a maximum of 200 augmented stories.
Action Selection
At every turn, each policy defined in your configuration will predict a next action with a certain confidence level. For more information about how each policy makes its decision, read into the policy’s description below. The bot’s next action is then decided by the policy that predicts with the highest confidence.
Keras Policy
The KerasPolicy uses a neural network implemented in
Keras to select the next action.
The default architecture is based on an LSTM, but you can override the
KerasPolicy.model_architecture method to implement your own architecture.
def model_architecture(
self, input_shape: Tuple[int, int], output_shape: Tuple[int, Optional[int]]
) -> tf.keras.models.Sequential:
...
Embedding Policy
Transformer Embedding Dialogue Policy (TEDP)
This policy has a pre-defined architecture, which comprises the following steps:
- concatenate user input (user intent and entities), previous system action, slots and active form for each time step into an input vector to pre-transformer embedding layer;
- feed it to transformer;
- apply a dense layer to the output of the transformer.
...
Mapping Policy
The MappingPolicy can be used to directly map intents to actions. The
mappings are assigned by giving an intent the property triggers, e.g.:
intents:
- ask_is_bot:
triggers: action_is_bot
If you do not want your intent-action mapping to affect the dialogue
history, the mapped action must return a UserUtteranceReverted()
event.
Memoization Policy
The MemoizationPolicy just memorizes the conversations in your
training data. It predicts the next action with confidence 1.0
if this exact conversation exists in the training data, otherwise it
predicts None with confidence 0.0.
Augmented Memoization Policy
The AugmentedMemoizationPolicy remembers examples from training
stories for up to max_history turns, just like the MemoizationPolicy.
Fallback Policy
The FallbackPolicy invokes a fallback action if at least one of the following occurs:
- The intent recognition has a confidence below
nlu_threshold. - The highest ranked intent differs in confidence with the second highest
ranked intent by less than
ambiguity_threshold. - None of the dialogue policies predict an action with confidence higher than
core_threshold.
nlu_threshold |
Min confidence needed to accept an NLU prediction |
ambiguity_threshold |
Min amount by which the confidence of the top intent must exceed that of the second highest ranked intent. |
core_threshold |
Min confidence needed to accept an action prediction from Rasa Core |
fallback_action_name |
Name of the fallback action to be called if the confidence of intent or action is below the respective threshold |
Two-Stage Fallback Policy
The TwoStageFallbackPolicy handles low NLU confidence in multiple stages
by trying to disambiguate the user input.
- If an NLU prediction has a low confidence score or is not significantly higher than the second highest ranked prediction, the user is asked to affirm the classification of the intent.
- If they deny, the user is asked to rephrase their message.