我刚开始使用Rasa NLU,并且在理解具有相同值的分类槽的使用上遇到了一些问题。我有三种不同类型的风险,每种都是一个分类槽,值分别为:low
、medium
和high
。
在意图相同的情况下,机器人如何区分这三种风险,并理解应该填充哪个槽?或者我是否需要为每种风险使用不同的意图?
目前我看到的情况是(我删除了不相关的日志):
How tired are you?1: low (low)2: medium (medium)3: high (high)mediumDEBUG:rasa_core.processor:Received user message 'medium' with intent '{'name': 'inform', 'confidence': 0.88372623999657118}' and entities '[{'start': 0, 'end': 6, 'value': 'medium', 'entity': 'fatigue', 'extractor': 'ner_crf'}]'DEBUG:rasa_core.processor:Current slot values: fatigue: medium injury: None stress: NoneHow stressed are you?1: low (low)2: medium (medium)3: high (high)lowDEBUG:rasa_core.processor:Received user message 'low' with intent '{'name': 'inform', 'confidence': 0.88762049990079372}' and entities '[{'start': 0, 'end': 3, 'value': 'low', 'entity': 'fatigue', 'extractor': 'ner_crf'}]'DEBUG:rasa_core.processor:Current slot values: fatigue: low injury: None stress: None
所有用户回复的意图都是inform
。一个示例故事是:
* _greet[] - utter_ask_fatigue* _inform[fatigue=low] - utter_ask_injury* _inform[injury=medium] - utter_ask_stress* _inform[stress=low] - utter_on_it - action_reply
回答:
你可以使用一个实体和四个槽来实现这一点
实体可以定义为类型”info”,其文本值为(即low、medium、high)。
四个槽:第一个是”info”,它将自动填充由之前定义的实体”info”识别出的值。其余三个槽分别是”fatigue”、”stress”和”injury”,可以通过机器人动作如action_fill_fatigue、action_fill_stress和action_fill_injury来填充。
一个示例故事可以使这一点更加清晰:
* _greet[]
– utter_ask_fatigue
* _inform[info=low]
– action_fill_fatigue
– utter_ask_injury
* _inform[info=medium]
– action_fill_injury
– utter_ask_stress
* _inform[info=low]
– action_fill_stress
– utter_on_it
– action_reply