Набросал тут «планчик – конспектик», т.е. блок схему будущего ПО, в укрупненном варианте. В экселе для редектирования сообществом. Постепенно наиболее сложные прямоугольнички блок-схемы должны детализироваться.
Если оставить пока «спинномозговые функции», с которыми все более-менее понятно, и заняться «интеллектуальными», то мне представляется, что упрощенно робот может находиться в 3-х состояниях: сам по себе, общается с человеком или общается с себе подобным роботом.
С первым более-менее просто. Напишем типовые сценарии свободного поведения, один из которых будет случайным образом выбираться с учетом текущего робонастроения.
Последнее пока опционально. Можно допустить, что это тоже, что общение с человеком, только распознавание речи не используется, а текст передается по ВТ уже в структурированном виде, параллельно с проговариванием его обычной версии синтезатором речи.
Общение же с человеком является гвоздем программы и представляет ее основную сложность и наше ноу-хау.
Если отбросить голосовые настройки и команды, то основой общения будет ПОДДЕРЖАНИЕ ДИАЛОГА. Всем нам известны сетевые боты и масса программулек для «
разговора с компьютером»
Может среди них есть и достойные экземпляры. Не исключено, что есть и открытое ПО на эту тему под Андроид. Типа всяческих голосовых ассистентов. Я, чесно говоря, ленюсь искать. Потому как думаю, что это не наш путь. Т.к., если абстрагироваться от феерического (но пока достаточно мифического) успеха, который ждет наш проект, то по крайней мере можно получить удовольствие в процессе шевеления мозгами.
И так, ДИАЛОГ на входе получает фразу распознанную ASR, в текстовом виде, а на выходе набор действий. Если робот в хорошем настроении, то он всегда не прочь поболтать, как только обнаруживает какое-то движение. А особенно, если видит знакомые лица.
Желательно, чтобы пользователь соблюдал определенные правила построения предложений, если не хочет слышать в ответ только «не знаю» и «не понимаю». Типа разделения фраз временными интервалами и сведение к минимуму не значимых слов. Однако, правила не должны быть слишком жесткими. Иначе будет не интересно. Особенно детям.
Первое, что надо сделать с полученным текстом, это его семантический или лингвистический разбор.
Существуют достаточно большое количество
различных парсеров и онлайн сервисов для обрабатки произвольного текста , в том числе и
открытые разработки для русского языка.
Но, на мой взгляд, все они заточены больше под поисковики и обработку больших произвольных текстов. По сему предлагаю парсить самостоятельно, с целью преобразования текста в структурированные данные, и присвоения ему одной из типовых категорий. У меня их 7. Но это на мой первый взгляд.
Пример из ролика: составная фраза «Давай проверим твои устройства. Включи режим настройки.» на самом деле не представляет для робота никакого труда, т.к. первое, что он ищет - это ключевые слова команд и их параметров. В данном случае это команда «настройки» с параметром «включи». Остальные слова просто игнорируются. Если команда полная, робот просто ее выполняет. Если не получен обязательный параметр, то робот задает уточняющий вопрос и т.д. Понятно, что команд не должно быть слишком много. Трудно будет запомнить, и командные слова не могут звучать ни в каком другом контексте, т.к. всегда будут восприняты, как команда. Т.е. фразу «Комсомольцы поехали
на стройки коммунизма» желательно не произносить. Зато параметров может быть сколько угодно.
Фраза «Как спалось сегодня?» является вопросительным предложением, что легко определяется по «как». Далее полагается определить суть вопроса, что является уже не тривиальной задачей. Придется научиться с ней справляться. Но, в данном случае, мы можем занести это предложение в словарь типовых фраз, возможные стандартные реакции на которые будут определены заранее. Шахматный компьютер ведь не всегда просчитывает следующий ход. Сначала он просматривает все имеющиеся варианты, совпадающие с уже сыгранными победными партиями.
Короче разбор фразы на слова, поиск в словарях, назначение весовых коэффициентов, ползанья по
семантическим деревьям. В общем ничего сложного
Наконец структурированная фраза, обработанная семантическим анализатором поступает в блок принятия решений или «генератор действий». В котором и появляется кто? Правильно - ИИ! Получи конфетку!
Вернемся к вопросу «Как спалось сегодня?». Что должен сделать робот прежде всего - проверить свое настроение. При показателе «исключительно отвратительное» - ответить «сам дурак!», неприлично пукнуть и отключиться. При другом раскладе – свериться с бортовым журналом. Не произошло ли прошлой ночью чего то экстраординарного: не пинижалась ли температура, не включали ли свет, не повышался ли уровень шума. И сообщить о проблеме. Либо просто сказать «хорошо, спасибо». А заодно отметить в журнале, что этому человеку о своем сне сегодня уже рассказывал.
Все эти варианты поведения на все случаи жизни будут записаны в сценарии, в огромное количество XML- подобных файлов, а вновь приобретенные знания и опыт будут заноситься в SQL базу данных.
А там, как знать, может быть, лет через восемь в Васюках состоится первый в истории мироздания междупланетный шахматный конгресс!
К чему это я? Утомили вы меня, однако. Пойду лучше вина выпью.