Диалоговый поток предпочитает системные объекты пользовательским - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть агент Dialogflow, который будет давать указания по разным местам (комнаты в университетском городке).Я определил сущность «место проведения», которая предварительно заполнена названиями всех различных мест.

В большинстве случаев это работает нормально.Если я задаю вопрос типа «Как добраться до здания Бейера», он определяет цель и объект места проведения («Здание Бейера»).

Однако, если название места включает номер или номер лицаимя (например, «Как добраться до Алана Тьюринга G.107»), он не может определить сущность (даже если «Алан Тьюринг G.107» является одним из моих предопределенных значений сущности).

Вместоон обнаруживает две системные сущности:

  • @sys.given-name = "Alan"
  • @sys.number = "107"

Когда вместо этого должно быть пятно:

  • @ venueName = "Алан Тьюринг G.107"

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

Можно ли как-нибудь заставить его "отдавать предпочтение" моим пользовательским объектам, а не системным объектам?

1 Ответ

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

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

Обучающие фразы бывают в двух режимах: Примерный режим и режим шаблона .Пример режима по умолчанию и кажется, что вы использовали.С его помощью вы указываете полные обучающие фразы в точности так, как их произносит пользователь ("how can i get to the beyer building").Затем Dialogflow пытается проанализировать и аннотировать сущности, в результате чего он действительно предпочитает свои системные сущности.

Однако вы можете обойти это, указав фразы в режиме шаблона.С его помощью вы включаете тип сущности в фразу ("how can i get to @venue:venue") и, таким образом, избегаете автоматической аннотации Dialogflow.

Единственная проблема с этим заключается в том, что режим шаблона фактически устарел и даже, кажется, не доступен черезконсоль больше (она все еще работает через API).

Технически вам на самом деле не нужен режим шаблона, вы можете сделать то же самое, что Dialogflow автоматически делает в примере, вручную, отправив ваши фразы какTrainingPhrase объекты через API.Однако для этого вам придется разбирать каждую фразу на массив частей, которые отделяют сущности от остальной части речи.Если вы сделаете это, не забудьте добавить пробелы между частями, потому что Dialogflow не делает это автоматически.

Почему они делают это таким образом, остается загадкой.Сущностная аннотация - это услуга, совершенно отличная от согласования намерений, и должна быть необязательной.Это потому, что им нравится получать все эти аннотированные пользователем данные?Кто знает, но это делает разработку высококачественных приложений Google Assistant более сложной, чем это должно быть.

...