Как распознать имя подсписка в списке объектов? - PullRequest
1 голос
/ 23 сентября 2019

У меня есть чат-бот на базе Microsoft Bot Framework, который использует сервис LUIS для распознавания естественного языка.Одним из поддерживаемых вариантов использования является предоставление пользователям возможности перечислять свои билеты.Поскольку может быть несколько разных типов билетов, один из запросов функции должен поддерживать фильтрацию этих билетов по их типу, например - заказов , инцидентов и т. Д.


В LUIS я создал список сущность с именем ticketType с подсписками, представляющими отдельные типы заявок и их синонимы: Entity type list for ticket type


Далее я создал намерение с именем listTickets , где я предоставил следующие примеры высказываний: Intent for listing tickets


Наконец,Я также создал шаблоны для listTickets с намерением усилить признание: Patterns for listing tickets


Теперь, после обучения и тестированияиз моей модели все работает просто отлично.Ну, почти ... Сущность ticketType распознается правильно, но я не могу отличить отдельные типы заявок на основе моих подсписков, как показано в результатах теста здесь: Test results


Вопрос

Как правильно обучить мою модель LUIS и правильно создать объект ticketType , чтобы LUIS правильно распознавал также подсписок?Что-то вроде ticketType::order и ticketType::incident?

Я также читал о ролях сущностей , однако это не подходит для моего сценария, потому что:

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

  • Теоретически я мог бы использовать роли, но тогда мне пришлось бы тренировать свое намерение listTickets с каждой возможной комбинацией подсписка, чтобы все правильно маркировалось.Будут ли шаблоны по-прежнему иметь смысл в этом сценарии?

1 Ответ

2 голосов
/ 23 сентября 2019

Я бы посоветовал вам проверить это в веб-чате или на другом канале, который вы будете использовать.Я создал модель LUIS на основе вашей, и при запуске через веб-чат информация, которую вы ищете, легко доступна.

В моем тесте я передал «Показать свой запрос» в качестве высказывания боту впредыдущий шаг.Как вы можете видеть, «запрос» является синонимом «заказа», который находится в «ticketType» (в соответствии с вашим дизайном).Я могу извлечь конкретную сущность из recognizerResult, а также из нормализованных значений (то есть "подсписки").

Надежда на помощь!

const recognizerResult = await this.recognizer.recognize(stepContext.context);
let intent = await LuisRecognizer.topIntent( recognizerResult );

console.log('1', intent )
console.log('2', recognizerResult.entities );
console.log('3', recognizerResult.entities.ticketType );
console.log('4', recognizerResult.luisResult.entities );
1 listTicket
2 { '$instance': { ticketType: [ [Object] ] },
  ticketType: [ [ 'order' ] ] }
3 [ [ 'order' ] ]
4 [ { entity: 'request',
    type: 'ticketType',
    startIndex: 11,
    endIndex: 17,
    resolution: { values: [Array] } } ]

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...