当用户问 out_of_scope 问题,该问题包含用于定义意图的一些关键字(帮助单词来构造句子)时,它会选择定义的意图(我没有使用任何实体方法)。
config.yml
# Configuration for Rasa NLU.
# https://rasa.com/docs/rasa/nlu/components/
language: en
pipeline: supervised_embeddings
# Configuration for Rasa Core.
# https://rasa.com/docs/rasa/core/policies/
policies:
- name: MemoizationPolicy
max_history: 5
- name: KerasPolicy
epochs: 400
batch_size: 100
validation_split: 0.2
max_history: 5
- name: MappingPolicy
- name: "FallbackPolicy"
nlu_threshold: 0.7
core_threshold: 0.5
fallback_action_name: "action_default_fallback"
以下是我的意图
intent: ask_faq_how_many _vegetarian_restaurants_are_there_nearby
- how many vegetarian restaurants are there nearby
- vegetarian restaurants near by
- please tell me how many vegetarian restaurants are there
如果用户询问:
然后以nlu的名义选择ask_faq_how_many _vegetarian_restaurants_are_there_nearby作为意图。
以上3个问题与任何意图均不相关,并且用户可以使用上述关键字来进行许多其他讨论,而对其进行培训可能会花费很长时间。 有什么方法可以告诉nlu不要仅根据几个关键字就选择意图?
答案 0 :(得分:0)
我认为您要求的是不可能的。
每种机器学习算法的工作原理都是通过学习根据输入的数据来预测某些东西。因此,如果您的训练数据中的单词vegetarian
仅与一个意图相关联,则它会将预测为该意图。没办法解决。
但是,如果您希望它预测其他事情,则可以尝试使用相似的数据添加更多意图,以便该模型可以学习区分共享其词汇的不同意图。
希望有帮助。
答案 1 :(得分:0)
您是否尝试过使用out_of_scope
意图并将那些闲聊的话语放入其中?我不能保证会很好,因为会有很多交叉,但是如果您没有其他地方可以对这些输入进行分类,那么它们肯定会达到目的。
答案 2 :(得分:0)
我建议建立一个映射尽可能多的实体的意图。因此,在此意图的自定义操作中,如果在输入中未找到这些实体,则尽管基于所使用关键字的置信度很高,但您仍知道映射是错误的。
在您的情况下,ask_faq_how_many_vegetarian_restaurants_are_there_nearby,创建训练示例,以映射(1)数字方面,和(2)您想要的商店实际上是餐厅。
- how [many](number) vegetarian [restaurant](shops)s are there nearby
- are there [many](number) vegetarian [restaurant](shops)s nearby
意图变得更具体时,使用正确的关键字进行聊天消息的置信度就会降低,缺少的实体应确认匹配错误。
希望这会有所帮助!