如何从Rasa表单中提取插槽

2024-05-16 20:11:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我向我的rasa机器人添加了一个表单。rasa bot在没有表单的情况下运行良好,但在添加表单时,我收到错误“无法使用操作表单提取插槽搜索名称”。我不知道我错过了什么,因为我尝试了不同的变化

domain.yml

...
entities:
- SEARCH_NAME
- SEARCH_KEYWORD
slots:
SEARCH_KEYWORD:
 type: text
SEARCH_NAME:
  type: text
...

故事

## keyword search path
* menu
  - utter_menu
* search_scholarship
  - utter_search
* keyword_search_scholarship
  - form_search_keyword
  - form{"name": "form_search_keyword"}
  - form{"name": null}

## scholarship name search path
* menu
  - utter_menu
* search_scholarship
  - utter_search
* scholarship_name_search
  - form_search_scholarship
  - form{"name": "form_search_scholarship"}
  - form{"name": null}

actions.py

class ActionFormSearchKeyword(FormAction):
    def name(self) -> Text:
        """Unique identifier of the form"""

        return "form_search_keyword"

    @staticmethod
    def required_slots(tracker: Tracker) -> List[Text]:
        """A list of required slots that the form has to fill"""

        return ["SEARCH_KEYWORD", ]

    def submit(
            self,
            dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any],
    ) -> List[Dict]:
        """Define what the form has to do
            after all required slots are filled"""

        # utter submit template
        dispatcher.utter_message(template="utter_search_found", search_result=tracker.get_slot('SEARCH_KEYWORD'),
                                 search=tracker.get_slot('SEARCH_KEYWORD'))
        # # utter submit template
        # dispatcher.utter_message(template="utter_search_not_found", search_result=tracker.get_slot('SEARCH_KEYWORD'),
        #                          search=tracker.get_slot('SEARCH_KEYWORD'))
        return []

    def slot_mappings(self) -> Dict[Text, Union[Dict, List[Dict]]]:
        """A dictionary to map required slots to
            - an extracted entity
            - intent: value pairs
            - a whole message
            or a list of them, where a first match will be picked"""
    
        return {
            "search_result": [self.from_entity(entity="SEARCH_KEYWORD"),
                     self.from_text()],
        }

Tags: nameselfform表单searchtrackerkeyworddict
1条回答
网友
1楼 · 发布于 2024-05-16 20:11:09

很难说确切的问题是什么(查看form_search_scholarship操作代码会有所帮助,因为这就是错误的来源),但我的猜测是您可能没有正确地从输入文本中提取名称实体。这往往是您看到此错误的最常见原因

要解决此问题,我将:

  • 在命令行中运行rasa nlu,并输入助手失败的回合。查看是否正确提取了所需的实体
  • 如果它不是你的问题。我建议您提供额外的培训数据(如果您有奖学金名单,我可能会使用查找表:https://blog.rasa.com/improving-entity-extraction/
  • 如果NLU正确地提取了,那么问题出在其他地方,你需要做更多的挖掘;如果没有其他形式的培训数据+代码,很难说确切的问题是什么

相关问题 更多 >