Rasa NLU - Понимание тренировочных данных

Мне трудно понять данные обучения в rasa nlu. Скажем, я хочу получить данные о тренировках, когда кто-то сообщает кому-то о животных, которых они могут купить. Для ясности воспользуюсь форматом уценки:

Допустим, пользователь гипотетически отвечает на вопрос:

«Какое животное вы хотели бы купить?»

Есть очень много разных способов сказать, что вы хотите что-то купить. Итак, возьмите пример ниже:

##intent:inform
- [cat](animal)
- buy [cat](animal)
- I would like to buy a [cat](animal)

Нужно ли мне повторять это для каждого вида животных, с которыми я собираюсь обращаться? Как ниже?

##intent:inform
- [cat](animal)
- [dog](animal)
- [parrot](animal)
- buy [cat](animal)
- buy [dog](animal)
- buy [parrot](animal)
- I would like to buy a [cat](animal)
- I would like to buy a [dog](animal)
- I would like to buy a [parrot](animal)

Кроме того, я заметил, что в ресторанном боте rasa они иногда повторяют один и тот же пример снова и снова, иногда до семи раз, как показано ниже:

##intent:inform
- [cat](animal)
- [cat](animal)
- [cat](animal)
- [cat](animal)
- [cat](animal)
- buy [cat](animal)
- I would like to buy a [cat](animal)

Зачем это нужно? Как это влияет на понимание? Как большее количество вхождений одного и того же слова в одной и той же позиции может быть индикатором того, что это правильный ответ, особенно если у вас есть что-то вроде приведенного ниже, где другое значение одного и того же объекта повторяется одинаковое количество раз?

##intent:inform
- [cat](animal)
- [cat](animal)
- [cat](animal)
- [cat](animal)
- [cat](animal)
- buy [cat](animal)
- I would like to buy a [cat](animal)
- [dog](animal)
- [dog](animal)
- [dog](animal)
- [dog](animal)
- [dog](animal)
- buy [dog](animal)
- I would like to buy a [dog](animal)

Спасибо, любые советы приветствуются.


person Community    schedule 22.08.2018    source источник


Ответы (2)


Есть очень много разных способов сказать, что вы хотите что-то купить.

Вы можете быть удивлены:

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

и я уверен, что этот список можно продолжить, насчитывая еще много примеров. При этом Rasa NLU должен уметь учиться и адаптироваться на нескольких примерах. За некоторыми исключениямиadopt может не иметь прочного отношения к buy, например, и может иметь важное значение в качестве примера.

Нужно ли мне повторять это для каждого вида животных, с которыми я собираюсь обращаться? Как ниже?

Нет, в этом нет необходимости. Каждая ценность животного является сущностью, и Rasa по умолчанию использует CRF для распознавания сущностей, о чем вы здесь говорите. CRF больше касается структуры предложения, чем значения слова. Вы можете увидеть функции, которые рассматривает CRF, в документах и код:

  # Available features are:
  # ``low``, ``title``, ``suffix5``, ``suffix3``, ``suffix2``,
  # ``suffix1``, ``pos``, ``pos2``, ``prefix5``, ``prefix2``,
  # ``bias``, ``upper`` and ``digit``
  features: [["low", "title"], ["bias", "suffix3"], ["upper", "pos", "pos2"]]

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

они иногда повторяют один и тот же пример снова и снова

Вы видели это в наборе данных Rasa? Вот стандартные данные обучения ресторанного бота и я не вижу повторов.

Повторение одного предложения снова и снова подтвердит модель, что форматы / слова важны, это форма передискретизация. Это может быть хорошо, если у вас очень мало обучающих данных или они сильно несбалансированы. Это может быть плохо, если вы хотите использовать множество разных способов покупки питомца, поскольку оно может переобучиться модель, как я упоминал выше.

person Caleb Keller    schedule 26.08.2018

Нужно ли мне повторять это для каждого вида животных, с которыми я собираюсь обращаться? Как ниже?

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

 - [cat](animal)
 - [dog](animal)
 - [parrot](animal)
 - buy [cat](animal)
 - I would like to buy a [parrot](animal)

Когда у вас есть некоторый контекст, например: I would like to buy a [animal], нет необходимости определять все типы животных. Алгоритм подобия находит элемент на основе других ключевых слов. Но когда контекст меньше (отдельные слова), необходимо определить другой тип пользовательского ввода.

Раса использует классификатор StarSpace. Рекомендуется использовать ~ 10-25 пользовательских образцов для каждого намерения, чтобы получить разумный ответ от ChatBot.

Вы также можете изменить классификатор Rasa, чтобы добавить слово- векторные функции (Word2vec или Glove). В этом случае к модели добавится некоторая общность. И подобные понятия, такие как собака-кошка, будут обнаруживаться легче.

person Amir    schedule 22.08.2018
comment
Хм, спасибо, это именно тот ответ, который я искал. Знаете ли вы, почему в примере с расами они указывают одно и то же слово несколько раз в обучающих данных? Например, они могут несколько раз определять просто «[кошка] (животное)». - person ; 22.08.2018
comment
@CoffeeIsProgramming, дайте, пожалуйста, ссылку на такие примеры. В официальном примере в их гитхабе единственное слово появилось только один раз. github.com/RasaHQ/rasa_nlu/blob/ мастер / данные / примеры / раса / - person Amir; 22.08.2018
comment
Конечно, он существует несколько раз в их frankendata.json (старый формат). Например, выполните быстрый поиск по тексту: дешевый github.com / RasaHQ / rasa_core / blob / master / examples / restaurantbot / Мне интересно, нужно ли каким-то образом добавить веса этим словам, в отличие от других слов на английском языке, но это могут быть просто плохо написанные данные обучения . Я действительно не уверен. - person ; 22.08.2018
comment
@CoffeeIsProgramming, насколько мне известно, нет возможности добавить веса примерам. В классификаторе повторение некоторых примеров просто позволяет классификатору узнать о них больше (иногда переоснащение на этом обучающем примере). - person Amir; 23.08.2018