Перейти к содержанию

Гайд по созданию новых вопросов

В данном разделе описан алгоритм создания новых вопросов для системы Ника.

Формализация знаний

Формализация сущностей

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

Особенностью такой формализации служит concept_wit_ai. Принадлежность к данному классу служит указателем для процесса классификации при помощи сервиса Wit.ai.

Формализация логических структур

Используя высказывания, можно получать новые знания (новые формулы) на основе существующих с помощью аппарата логического вывода. Например, есть общая схема рассуждения, правило вывода Modus ponens, которое формально можно сформулировать следующим образом: если есть знание A, а также знание, что из A следует B (A влечёт B, A выводит B), то истинным является и знание B.

Так NIKA создаёт ответы на вопросы пользователя путём вывода новых знаний из знаний, существующих в базе знаний. Для этого изначально в базе знаний задаются правила вывода ответов на сообщения пользователя. Пример такой структуры изображен на рисунке.

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

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

Формализация шаблонов ответа

Каждое логическое правило должно иметь шаблон ответа (nrel_answer_pattern), это множество, которому принадлежит тот класс фраз, который используется при ответе на сообщение по данному правилу.

Шаблоны ответа нужны для вывода текста ответа пользователю. Она бывают двух видов:

  • Статический шаблон;
  • Шаблон с переменными.

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

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

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

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

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

  • ${example} - выводит содержимое sc-ссылки example;
  • $...{example} - выводит названия элементов декомпозиции сущности example;
  • $set_power{example} - выводит мощность множества example;
  • $superclass_find{example} - выводит названия всех надклассов сущности example;
  • $subarea_find{example} - выводит названия всех предметных областей, к которым относится сущность example.

Для случая вопроса про сущность, которой нет в базе знаний, нужно описать шаблон фразы ответа на вопрос о нераспознанной сущности, такой шаблон изображен ниже.

Формализация класса сообщений

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

Классификация

На данный момент система классифицирует сообщения при помощи:

  • Альтернативная классификация
  • Сервис Wit.ai

Альтернативная классификация

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

В целом, для корректной работы проделанной работы достаточно, но в данном случае система сможет отвечать только на сообщения, текст которых вы прописали заранее, что не является удобным. Для исправления данной проблемы система может взаимодействовать с сервисом Wit.ai.

Wit.ai

Wit.ai - это классификатор c открытым ресурсом, имеющий удобный интерфейс для обучения вашей системы.

Для начала работы с данным сервисом нужно перейти на сайт Wit.ai и зарегистрироваться.

После этого создаем новое приложение и устанавливаем следующие настройки:

Описание работы с приложением:

  • Раздел Understanding. Здесь вы обучаете ваше приложение классифицировать сообщение и выделять сущности. Нужно вводить сообщения, которым вы хотите обучить систему, в поле для ввода и затем вручную выделять класс вопроса и сущности, через несколько таких операций сервис сам начнет верно классифицировать сообщение.

  • Раздел Management. Здесь вы работаете с классами сообщений, сущностями, можете просматривать уже заданные вопросы и настраивать ваше приложение.

    • Подраздел Intents. Тут создаются нужные вам классы сообщений.

    • Подраздел Entities. Тут нужно создать одну сущность а именно rrel_entity и затем выделять именно такой вид сущности.

    • Подраздел Utterances. Здесь можно просматривать заданные вопросы и исправлять их при необходимости

    • Подраздел Settings. Настройки вашего приложения, важным в этом подразделе является Server Access Token, после того, как вы достаточно обучили ваше приложение(это можно отслеживать по цвету круга в левом верхнем углу), нужно скопировать токен и вставить в файл nika.ini в качестве токена сервера

Единственным неприятным условием при использовании сервиса Wit.ai - это необходимость доступа к интернету.

Заключение

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

При возникновении непонятных вам ошибок или желании рассмотреть ход работы агентов можно посмотреть логи в окне консоли, где запущен скрипт start.sh.