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

Давайте погрузимся!

Некоторое время назад один из моих клиентов обнаружил особенность @sys.date-time при использовании с итальянским языком. Я приведу несколько примеров ниже, и если вы не говорите по-итальянски, это хорошая возможность начать изучение ;-)

В таблице показано, что вводимые пользователем данные, такие как «через неделю в 9:00» или «22 августа в 9:00», обрабатываются неправильно. В первом сценарии дата правильная, но время неправильное. Во втором пропущена дата. В третьем и четвертом сценариях системный объект разрешает дату как период даты, и она не соответствует времени.

Проблемы также были воспроизведены за пределами региона europe-west1 в глобальном регионе, и когда команда NLU проверила все случаи, они обнаружили, что результаты не были идеальными. Чтобы быть более конкретным:

  1. 'tra una settimana alle 9' – в выходных данных указана как дата-время 9 утра/пополудни сегодня (правильно), так и аннотация даты и времени «через неделю» (неправильно), но последняя имеет более высокий балл.
  2. "22 ​​agosto alle ore 9" – снова в выходных данных указана дата и время 22 августа, 9:00 (правильно), а также аннотация с точкой (неправильно), но последняя имеет более высокий балл.

Я обнаружил, что возможный способ обойти эти проблемы — создать настраиваемый составной объект, который использует как @sys.date, так и @sys.time.

составной объект — это особый тип объекта списка. Записи сущностей для списков обычно содержат простые слова или фразы, но могут также содержать и другие типы сущностей. Когда на тип сущности есть ссылка в другом типе сущности, эта ссылка называется псевдонимом. Когда сущность-список содержит псевдонимы для других типов сущностей, она называется составной сущностью.

Для этой конкретной цели анализа даты и времени из пользовательского ввода нам нужно создать пользовательскую составную сущность, которая имеет следующие записи сущности и не имеет синонимов:

В составном объекте ссылка на другой тип объекта (например, @sys.date и @sys.time) называется псевдонимом . При создании псевдонима вы указываете имя типа объекта, на который указывает ссылка, и имя свойства по вашему выбору. Вы также можете использовать несколько псевдонимов объектов в записи объекта. Это именно то, что мы делаем здесь. Наш настраиваемый тип объекта содержит псевдонимы для системного типа объекта @sys.date и типа системного объекта @sys.time в одной записи. Формат для ввода псевдонима:

@entity-name:property-name

Когда составной объект сопоставляется во время выполнения, извлеченное значение возвращается как объект JSON с именами свойств-псевдонимов, используемыми в качестве имен свойств JSON. Если ввод конечного пользователя содержит и дату, и время, например «22 авто 9 года», извлеченное значение возвращается в виде объекта JSON, например:

Хочу обратить ваше внимание на вторую запись составного объекта.

@sys.time:time del @sys.date:date

«удалить» (of) — это предлог, который предшествует дате и позволяет объекту сопоставлять время и дату при их передаче. в этом порядке. Слова или фразы, используемые в составных объектах, очень эффективны. Например, рассмотрим агента по бронированию авиабилетов и следующий ввод конечного пользователя: «Мне нужно забронировать рейс из Мельбурна в Сидней». Мельбурн и Сидней являются местоположениями, поэтому системный объект @sys.location может их извлечь, однако как нам устранить неоднозначность между городом отправления и пунктом назначения? Вот почему нам нужно включить предлоги «от» и «до» в запись составного объекта.

from @sys.location:departure to @sys.location:destination

Вернувшись к дате и времени, вы могли заметить, что я также добавил @sys.date:date и @sys.time:time как две отдельные записи. Это позволяет составному объекту соответствовать вводу конечного пользователя, который содержит только часть даты или времени. Если входные данные содержат часть "22 ​​agosto", сопоставляется тип объекта date, и извлеченное значение возвращается как:

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

Ура, у нас все готово! Не так ли? Не реактивный. :-) На итальянском языке "22 ​​Agosto alle ore 9" означает "9:00 22 августа", потому что мы перешли на 24-часовой формат времени. Сказав, что если в 16:00 я отправлю сообщение другу, чтобы сообщить ей, что мы встречаемся в 18:00, я напишу что-то вроде «vediamoci alle 6» вместо «vediamoci alle 18». Она знает, что мы наверстаем упущенное через два часа, а не завтра утром в 6 утра, потому что у нее есть контекст. Контекст здесь в том, что мы хотим встретиться за ужином, а не за завтраком ;-)

В онлайн-документации Dialogflow CX указано «If there is ambiguity in end-user input due to missing date/time elements, the nearest matching future date/time is returned.». Использование системных сущностей @sys.date и @sys.time в составной сущности вместо системной сущности @sys.date-time имеет тот недостаток, что нам нужно написать некоторую пользовательскую бизнес-логику, чтобы устранить неоднозначность того, действительно ли пользователь имеет в виду 9 утра или 21:00 в зависимости от контекста. В качестве альтернативы совпадающее время будет зависеть от текущего времени, поскольку Dialogflow выбирает ближайшее время в будущем, которое соответствует заданному входу.

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