Агент Раса перестал отвечать после того, как одна история рассказала - PullRequest
0 голосов
/ 12 февраля 2019

Я написал простого бота, используя rasa.Для обработки сообщений я создаю приложение фляги и загружаю агент в это приложение.Я получаю пользовательское сообщение и идентификатор из запроса и помещаю его в метод agent_text агента, затем я получаю ответ.Проблема в том, что после того, как я рассказал одну историю, которая была определена в моем story.md, мой агент перестал отвечать.

Вот мое приложение фляги

app = Flask(__name__)


# Define rasa interpreter
interpreter = None

# Define rasa agent
agent = None


@app.route('/')
def index():

    # Receive message from request
    message = request.args.get('msg')

    # Receive user id from request
    user_id = request.args.get('uid')

    #  Validation
    if not message:
        return 'No message specified in field \'msg\''
    if not user_id:
        return 'No user id specified in field \'uid\''

    # Put received message into rasa agent
    answers = agent.handle_text(message, sender_id=user_id)

    # Define text for the response
    text = None

    if len(answers) > 0:
        text = "User: {} | {}".format(user_id, answers[0].get('text'))
    else:
        text = "User: {} | Nothing to answer".format(user_id)

    return text


if __name__ == '__main__':

    # Load rasa interpreter
    interpreter = RasaNLUInterpreter(NLU_PATH)

    # Load rasa agent
    agent = Agent.load(CORE_PATH, interpreter=interpreter)

    app.run()


My story.md равно

## Simple flow
* greet
  - utter_greet
* bye 
  - utter_bye 
## Order pizza
* greet
  - utter_greet
* order_pizza_type
  - utter_finish_order_pizza
* bye
  - utter_bye
## Story
* order_pizza_type
  - utter_finish_order_pizza
## Generated Story -1054914010798310995
* greet
    - utter_greet
* order_pizza_type{"Country": "mexican"}
    - utter_finish_order_pizza
* bye
    - utter_bye
## New Story
* greet
  - utter_greet
* order_pizza_wish
  - utter_finish_order_pizza
* bye
    - utter_bye

и мой config.yml

language: "en"

pipeline:
- name: "nlp_spacy"
- name: "tokenizer_spacy"
- name: "ner_crf"
- name: "tokenizer_whitespace"
- name: "intent_featurizer_count_vectors"
- name: "intent_classifier_tensorflow_embedding"
  intent_tokenization_flag: true
  intent_split_symbol: "+"

policies:
  - name: "KerasPolicy"
    featurizer:
    - name: MaxHistoryTrackerFeaturizer
      max_history: 5
      state_featurizer:
        - name: BinarySingleStateFeaturizer
  - name: "MemoizationPolicy"
    max_history: 5
  - name: "FallbackPolicy"
    nlu_threshold: 0.4
    core_threshold: 0.3

Мой ожидаемый результат

$ curl -X GET "https://localhost?msg=hello&uid=1"
$ curl -X GET "https://localhost?msg=I want to order pizza&uid=1"
$ curl -X GET "https://localhost?msg=Bye&uid=1"
$ curl -X GET "https://localhost?msg=hello&uid=1"

Ответ

> User: 1 | Hey! How are you?
> User: 1 | Ok I will deliver pizza for you
> User: 1 | Bye
> User: 1 | Hey! How are you?

Но мои фактические результаты

$ curl -X GET "https://localhost?msg=hello&uid=1"
$ curl -X GET "https://localhost?msg=I want to order pizza&uid=1"
$ curl -X GET "https://localhost?msg=Bye&uid=1"
$ curl -X GET "https://localhost?msg=hello&uid=1"

Ответ

> User: 1 | Hey! How are you?
> User: 1 | Ok I will deliver pizza for you
> User: 1 | Bye
> User: 1 | Nothing to answer

Как вы можете видеть, нет ответа на второе сообщение "привет" после того, как одна сюжетная линия была прочитана.

1 Ответ

0 голосов
/ 14 февраля 2019

То же, что предложено в комментариях. Я бы предложил использовать интерактивное обучение для отладки вашего бота и создания новых обучающих историй.В настоящее время у вас очень мало данных о тренировках.

Использовали ли вы увеличение для обучения?Если вы не указали этот параметр по-другому, то по умолчанию для увеличения установлено значение 20.

. Если вы используете расширение, я бы предложил также добавить еще один короткий рассказ для обработки автономного greet:

## Simple flow
* greet
  - utter_greet

Еще одна вещь: рекомендуется использовать общие намерения и различать их по признанным сущностям.Следовательно, вместо order_pizza_type и order_pizza_wish было бы лучше иметь намерение order_pizza или даже order, а затем слоты для food_type, product_to_order (например, pizza) и так далее.Если у вас есть очень похожие намерения, такие как order_pizza_type и order_pizza_wish, у NLU будет сложная жизнь, чтобы отличить их.

...