首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

Rasa 入门教程 Core 系列(九)

2024-12-20 来源:化拓教育网
rasa_tutorial_core_background.png

本文介绍了如何在命令行上使用交互式学习,在交互式学习模式下,你可以在与机器人聊天时向其提供反馈。这是探索你的机器人可以做什么的有力方法,并且是纠正其所犯错误的最简单方法。基于机器学习的对话的一个优势是,当你的机器人还不知道如何做时,你可以教它!

本文的目录结构:

  1. 进行交互式学习
  2. 提供错误反馈
  3. 可视化对话
  4. 使用表单进行交互式学习

1. 进行交互式学习

通过运行以下命令开始交互式学习:

rasa run actions --actions actions&

rasa interactive \
  -m models/20190515-135859.tar.gz \
  --endpoints endpoints.yml

第二个命令启动交互式学习模式。

在交互式模式下,在处理之前,Rasa 会要求你确认 NLU 和 Core 所做的每个预测,如以下例子所示:

Bot loaded. Type a message and press enter (use '/stop' to exit).

? Next user input:  hello

? Is the NLU classification for 'hello' with intent 'hello' correct?  Yes

------
Chat History

 #    Bot                        You
────────────────────────────────────────────
 1    action_listen
────────────────────────────────────────────
 2                                    hello
                         intent: hello 1.00
------

? The bot wants to run 'utter_greet', correct?  (Y/n)

聊天历史记录和槽位值会打印在屏幕上,这应该是决定下一步正确的动作所需要的全部信息。

在这种情况下,机器人选择了正确的动作(utter_greet),因此我们输入y。然后我们输入 y,因为 action_listen 问候语之后的动作是正确的。我们继续该循环,与机器人聊天,直到机器人选择了错误的动作。

2. 提供错误反馈

如果你询问 /search_concerts,则机器人应提出建议 action_search_concerts,然后 action_listen(该策略将在动作名称旁边显示该策略选择其下一个动作的置信度)。现在,让我们输入 /compare_reviews 作为下一条用户消息。机器人可能会从两种可能性中选择错误的一种(取决于训练的运行,它可能也是正确的):

------
Chat History

 #    Bot                                           You
───────────────────────────────────────────────────────────────
 1    action_listen
───────────────────────────────────────────────────────────────
 2                                            /search_concerts
                                  intent: search_concerts 1.00
───────────────────────────────────────────────────────────────
 3    action_search_concerts 0.72
      action_listen 0.78
───────────────────────────────────────────────────────────────
 4                                            /compare_reviews
                                  intent: compare_reviews 1.00


Current slots:
  concerts: None, venues: None

------
? The bot wants to run 'action_show_concert_reviews', correct?  No

现在,键入n,因为它选择了错误的动作,然后出现新的提示,要求你输入正确的动作。这也显示了模型分配给每个动作的概率:

? What is the next action of the bot?  (Use arrow keys)
 ❯ 0.53 action_show_venue_reviews
   0.46 action_show_concert_reviews
   0.00 utter_goodbye
   0.00 action_search_concerts
   0.00 utter_greet
   0.00 action_search_venues
   0.00 action_listen
   0.00 utter_youarewelcome
   0.00 utter_default
   0.00 action_default_fallback
   0.00 action_restart

在这种情况下,机器人应该 action_show_concert_reviews 来选择该动作。

现在,只要我们愿意进行更长的对话,我们就可以继续与机器人对话。你可以随时按 Ctrl-C,该机器人会为你提供退出选项。你可以将新建的 stories 和 NLU 数据写入文件,如果提供错误反馈,也可以返回上一步。

确保将转存的 stories 和 NLU 示例与你的原始训练数据结合起来,以便进行下一次训练。

3. 可视化对话

在交互式学习期间,Rasa 将从训练数据中绘制当前对话和一些类似对话,以帮助你跟踪情况。

如果要跳过可视化,运行:rasa interactive --skip-visualization

rasa_tutorial_core_01.gif

4. 使用表单进行交互式学习

如果你使用的是 FormAction,则在使用交互式学习时还需要记住一些其他事项。

4.1 form: 前缀

这是一个例子:

* request_restaurant
    - restaurant_form
    - form{"name": "restaurant_form"}
    - slot{"requested_slot": "cuisine"}
* form: inform{"cuisine": "mexican"}
    - slot{"cuisine": "mexican"}
    - form: restaurant_form
    - slot{"cuisine": "mexican"}
    - slot{"requested_slot": "num_people"}
* form: inform{"number": "2"}
    - form: restaurant_form
    - slot{"num_people": "2"}
    - form{"name": null}
    - slot{"requested_slot": null}
    - utter_slots_values

4.2 输入验证

每次用户使用所需槽位或任何所需槽位以外的其他内容进行响应时,系统都会询问你是否要让表单动作在返回表单时尝试从用户消息中提取一个槽位。最好的解释用示例来说明:

 7    restaurant_form 1.00
      slot{"num_people": "3"}
      slot{"requested_slot": "outdoor_seating"}
      do you want to sit outside?
      action_listen 1.00
─────────────────────────────────────────────────────────────────────────────────────
 8                                                                             /stop
                                                                   intent: stop 1.00
─────────────────────────────────────────────────────────────────────────────────────
 9    utter_ask_continue 1.00
      do you want to continue?
      action_listen 1.00
─────────────────────────────────────────────────────────────────────────────────────
 10                                                                          /affirm
                                                                 intent: affirm 1.00


Current slots:
    cuisine: greek, feedback: None, num_people: 3, outdoor_seating: None,
  preferences: None, requested_slot: outdoor_seating

------
2018-11-05 21:36:53 DEBUG    rasa.core.tracker_store  - Recreating tracker for id 'default'
? The bot wants to run 'restaurant_form', correct?  Yes
2018-11-05 21:37:08 DEBUG    rasa.core.tracker_store  - Recreating tracker for id 'default'
? Should 'restaurant_form' validate user input to fill the slot 'outdoor_seating'?  (Y/n)

在这里,用户要求停止表单,而机器人则询问用户是否确定不想继续。用户说他们想继续(/affirm意图)。这里outdoor_seating 有一个 from_intent 槽位映射(/affirm 意图映射到 True),因此可以使用此用户输入来填充该槽位值。但是,在这种情况下,用户回答的问题是“你要继续吗?”,因此选择 n 时,就不用验证用户的输入。然后,机器人会继续要求该 outdoor_seating 槽位。


备注:转载请注明出处。

如发现错误,欢迎留言指正。

显示全文