Rasa 入门教程 Core 系列包括十一个部分,前面介绍了Kevin陶民泽:Rasa 入门教程 Core 系列(四)zhuanlan.zhihu.com
。本文主要介绍 Rasa 框架 Core 系列的第五部分:策略。
本文的目录结构:策略配置
动作选择
Keras 策略
Embedding 策略
Mapping 策略
Memoization 策略
Augmented Memoization 策略
Fallback 策略
Two-Stage Fallback 策略
Form 策略
1. 策略配置
类 rasa.core.policies.Policy 决定在对话的每个步骤中应采取的什么动作。有多种策略可供选择,您可以在 rasa.core.agent.Agent 中包含多个策略。
项目中的 config.yml 文件有关键字 policies,你可以使用该关键字来自定义助手使用的策略。在下面的示例中,最后两行显示了如何使用自定义策略类并将参数传递给它。
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: "..."
1.1 最长历史记录
Rasa 核心策略的一个重要超参数是 max_history。这可以控制模型查看多少对话历史记录,以决定下一步应采取什么动作。
你可以在 yaml 文件中的配置策略里通过设置 max_history 值将其传递到 Featurizer。
例如:假设你有一个 out_of_scope 表示超纲的意图。如果你的机器人连续多次看到此意图,则可能要告诉用户你可以提供哪些帮助。因此你的 story 可能如下所示:
* out_of_scope
- utter_default
* out_of_scope
- utter_default
* out_of_scope
- utter_help_message
为了使 Rasa Core 学习这种模式,max_history 至少为 4。
如果增加 max_history,你的模型将变得更大,并且训练将花费更长的时间。如果你有会影响将来对话的一些信息,则应将其作为槽位存储,槽位信息可以用于每个特征提取器。
1.2 数据增强
训练模型时,默认情况下,Rasa Core 随机将 stories 文件中的 stories 粘合在一起来创建更长的 stories。stories 文件如下所示:
# thanks
* thankyou
- utter_youarewelcome
# bye
* goodbye
- utter_goodbye
实际上你想教自己的策略在不相关时忽略对话历史记录,而无论以前发生了什么,都只需以相同的动作进行响应即可。
你可以使用 --augmentation 标志更改此行为,允许你设置 augmentation_factor。augmentation_factor 决定在训练中有多少增强的 stories 是子采样。增强后的 stories 在训练之前会进行二次抽样,因为它们的数量会很快变得非常大,我们希望对其进行限制。样本 stories 的数量是augmentation_factorx10。默认情况下,增强设置为 20,最多可生成200个增强 stories。
--augmentation 0 表示禁用所有增强行为。基于 Memoization 策略不受增强影响(与 augmentation_factor 无关),并且会自动忽略所有增强的 stories。
2. 动作选择
在任何时候,配置中定义的每个策略都会以一定的置信度预测下一个动作。有关每个策略如何做出决策的更多信息,请阅读下面的策略说明。然后,该机器人的下一步动作将由具有最高置信度的预测策略决定。
在两个相同的置信度策略进行预测的情况下(例如:Memoization 和 Mapping 策略,始终以 0 或 1 的置信度进行预测),则将考虑策略的优先级。Rasa 策略有默认优先级,这些默认优先级用于在平局时的预期结果。如下所示,数字越高优先级越高:
5. FormPolicy
4. FallbackPolicy and TwoStageFallbackPolicy
3. MemoizationPolicy and AugmentedMemoizationPolicy
2. MappingPolicy
1. EmbeddingPolicy, KerasPolicy, and SklearnPolicy
上述优先级层次结构可确保,在 NLU 的置信度值在 nlu_threshold 之下(例如:如果有一个 mapped 动作),机器人仍将回退。通常,不建议每个优先级使用一个以上的策略,并且某些优先级相同的策略(例如两个 fallback 策略)严格不能一并使用。
如果创建自己的策略,请使用这些优先级作为确定策略优先级的指南。如果你的策略是机器学习策略,则它最有可能具有与 Rasa 机器学习策略相同的优先级 1。
3. Keras 策略
KerasPolicy 策略在 Ke