RASA - 불행한 길

11230 단어 chatbotairasanlp
사용자가 챗봇과 통신할 때 항상 우리가 원하는 대로 행동하지는 않습니다.
뉴스레터 양식을 작성할 때 잡담으로 넘어가거나 마음이 바뀌어 양식을 전혀 작성하지 않을 수 있습니다.

이제 이 두 가지 경우를 처리하겠습니다.

가벼운 대화



사용자가 뉴스레터 양식을 작성할 때 완전히 관련 없는 내용에 대해 이야기하기 시작할 수 있습니다. 이 경우 사용자가 원래대로 돌아가 양식을 완료할 수 있는 방법을 제공하고자 합니다.

사용자가 범위를 벗어났음을 의미하는 새 인텐트를 만듭니다. 이 인텐트에 몇 가지 교육 예제를 추가합니다.

# data/nlu.yml
# ... previous contents ...
  - intent: chitchat
    examples: |
      - that's not what I want to do
      - wait stop
      - you're no help
      - this is no help at all
      - how old are you
      - I want to order a pizza
      - tell me the weather
      - this isn't working
      - I already told you that
      - don't like that
      - I don't want to tell you that
      - none of your business
      - that's not right
      - stop asking
      - nevermind
      - I want to do something else
      - I changed my mind

긍정 및 거부 의도 두 개를 더 추가합니다.

# data/nlu.yml
# ... previous contents ...
  - intent: affirm
    examples: |
      - yes
      - indeed
      - of course
      - that sounds good
      - correct
      - sure
      - ok
      - why not
      - ok great
      - yes I did
      - yeah, great
      - pretty good
      - fine
      - You bet
      - I sure did
      - more or less
  - intent: deny
    examples: |
      - no
      - never
      - I don't think so
      - no way
      - not really
      - none
      - absolutely not
      - no thanks
      - didn't do any
      - no I didn't
      - could have been better
      - not great
      - nope

다른 모든 인텐트와 마찬가지로 domain.yml 파일에도 나열합니다.

# domain.yml
# ... previous contents ...
intents:
  # ... previous intents ...
  - chitchat
  - affirm
  - deny

챗봇이 잡담 의도를 알아차리면 사용자가 계속할 것인지 묻습니다. 이에 대한 발화를 만들어 봅시다.

# domain.yml
# ... previous contents ...
  utter_ask_continue:
    - text: Sorry, I don't quite understand. Do you want to continue?

이제 이러한 의도와 응답을 하나의 스토리에 함께 넣어 보겠습니다.

# data/stories.yml
# ... previous contents ...
  - story: newsletter form continue
    steps:
      - intent: subscribe
      - action: newsletter_form
      - active_loop: newsletter_form
      - intent: chitchat
      - action: utter_ask_continue
      - intent: affirm
      - action: newsletter_form

이 이야기에서 채팅 의도가 인식되면 챗봇은 사용자가 계속할 것인지 묻습니다. 그렇다면 양식이 다시 활성화됩니다.

이제 rasa train && rasa test를 실행합니다.
어시스턴트를 테스트해 봅시다.


좋아 보인다, 이제 두 번째 양식 질문 중에 잡담을 해보자.



무슨 일이에요? 피자 주문을 이메일 빈도로 간주하는 이유는 무엇입니까? 이에 답하기 위해 매우 유용한 새로운 rasa 명령rasa interactive을 소개하겠습니다.
그러면 모델이 훈련되고 대화형 학습 세션이 시작되어 채팅을 통해 Rasa 모델에 대한 새로운 훈련 데이터를 생성합니다. 그러나 이를 사용하여 어시스턴트를 디버깅할 것입니다.

대화형 채팅 중에 어떤 의도가 표현되었는지에 대한 챗봇의 결정을 볼 수 있습니다.



따라야 할 조치:



어떤 법인이 인식되었는지:



이러한 결정을 수정할 수 있습니다.

챗봇이 피자 주문을 잡담 의도로 제대로 인식한 것을 볼 수 있습니다.



그렇다면 문제는 어디에 있습니까?
문제는 의도와 관계없이 주파수 슬롯이 항상 from_text로 채워진다는 것입니다.



의도가 inform_frequency인 경우에만 주파수 슬롯을 채워야 한다고 챗봇에 알려야 합니다. domain.yml 파일에서 이를 수행하는 쉬운 방법이 있습니다.

# domain.yml
# ... previous content ...
forms:
  newsletter_form:
    email:
      - type: from_entity
        entity: email
    frequency:
      - type: from_text
        intent: inform_frequency

이제 주파수 슬롯은 의도가 inform_frequency인 경우에만 from_text로 채워집니다.

documentation에서 이에 대해 자세히 알아볼 수 있습니다.

이제 맞습니다!


양식 나가기



발생할 수 있는 두 번째 불행한 경로는 사용자가 양식을 전혀 계속하고 싶어하지 않는 것입니다. 이와 같은 경우 어시스턴트는 요청된 슬롯에 대한 요청을 중지해야 합니다.
여기에 대한 이야기가 있습니다.

# data/stories.yml
# ... previous contents ...
  - story: newsletter form stop
    steps:
      - intent: subscribe
      - action: newsletter_form
      - active_loop: newsletter_form
      - intent: chitchat
      - action: utter_ask_continue
      - intent: deny
      - action: action_deactivate_loop
      - active_loop: null

양식을 비활성화하고 요청된 슬롯을 재설정하는 기본 작업 action_deactivate_loop를 사용하여 상황을 처리합니다.



사용자가 양식을 취소한 후 챗봇이 질문을 중지한 것을 볼 수 있습니다.

documentation에서 불행한 경로에 대해 자세히 알아볼 수 있습니다.

다음 장에서는 이러한 불행한 경로를 테스트하는 방법을 살펴보겠습니다.

이 튜토리얼의 저장소:


펫7555 / rasa-dev-튜토리얼






이 튜토리얼의 끝에서 다음을 실행하여 리포지토리의 상태를 체크아웃할 수 있습니다.

git clone --branch 05-unhappy-paths [email protected]:petr7555/rasa-dev-tutorial.git

좋은 웹페이지 즐겨찾기