Одной из традиционных задач искусственного интеллекта есть ведение монологов, диалогов и групповых бесед на естественном языке. Интеллектуальная программа, чат-бот, может говорить с оператором или через аудио-подсистему компьютера, или, что более технологично, ртом другого человека. Например, ртом человека, перенесшего неудачную операцию на мозге с потерей логических или речевых функций, в случае замены утраченных навыков медицинской кибернетикой. Или-же, ртом используемых как агентов прохожих, для скрытой передачи сообщений в программах специальной связи. В последних случаях синтезированная речь пересылается с управляющего сервера с ботами на биочип в теле агента, и модуль нейростимуляции переводит звуковые отсчёты в правильные колебания голосовой связки, движения челюсти, губ и языка — чат-бот говорит ртом человека. Выглядеть это может как доносящийся разговор двух стоящих напротив друг-друга пенсионерок, крики детей на улице или ругань родителей — с Вами говорят чат-боты специальной связи!
Диалог с чат-ботами содержит утверждения, побуждения и ответы на вопросы. Самым простым тут есть синтез утверждений, чуть более сложен — вывод ответов на вопросы. Но для синтеза побуждений уже нужны алгоритмы планирования действий, например основанные на анализе целей и средств, как в Иван Братко «Алгоритмы Искусственного Интеллекта на языке Prolog». Логический вывод ответов на вопросы относится к логике вопросов и ответов, которая, к сожалению, отсутствует в университетских курсах. Именно вывод ответов на вопросы, на конкретных программе, алгоритмах и методах, и описан в этой образовательной статье.
Примерами готовых говорящих программ с русским языком диалога являются чат-бот p-bot.ru и его озвученная версия для Windows 10 – Chat-bot Maria, интеллектуальный советник, в фоне пересылающая вопросы на p-bot.ru и доступный на сайте Технологии Боттинга 12. Вы можете бесплатно пообщаться с Искусственным Интеллектом 5 минут на русском языке, прежде чем разбираться в алгоритмах Искусственного Интеллекта, алгоритмах понимания и синтеза текста и вывода ответов на вопросы.
Утверждения оператора или подкачиваемого текста интеллект вначале переводит во внутреннюю базу фактов, проведя грамматический разбор предложения. Например, разрабатываемая программа Author-Bot Maria для полуавтоматического синтеза статей, использует набор простых грамматически правил для перевода утверждений в набор связей между понятиями. Отношение тут это бинарная функция над словами, возвращающая True или False, а связь это экземпляр отношения, конкретные два слова, на которых отношение истинно. В программе Author-Bot используемым отношением является отношение in, например связь «гусь in серый» означает, что в объёме понятия «серый» содержится элемент «гусь». Связь «серый in гусь» означает, что в объёме понятия «гусь» содержится элемент «серый». Два таких факта означают пересечение понятий «серый» и «гусь», как на диаграммах Эйлера для объёмов понятий. Именно такие факты, из связей «in» между понятиями, полученные разбором утверждений, и составляют базу фактов программы Author-Bot.
Для составления базы фактов, как уже было сказано, чат-бот выполняет грамматический разбор входного предложения. Для этого он подводит предложение под одно из правил грамматики. Правило грамматики имеет левую часть, соответствующую входу, и правую часть, соответствующую выходу. Левая часть правила может состоять из частей речи, типа SUSH (существительное), PRIL (прилагательное), GLAG (глагол), MESTO (местоимение), NARECH (наречие), CHISL (числительное). Эти части речи имеют правильный порядок в правиле, хоть и считается, что у русского языка — произвольный порядок слов в предложении. Если в утверждении части речи слов идут как в левой части правила грамматики, то утверждение подходит под это правило. «Гусь серый» подходит под правило с левой частью «SUSH PRIL» и по правой части этого правила в базу фактов заноситься связь «гусь in серый». Другой пример: утверждение “я пишу интеллектуальную программу” подходит под правило «MESTO GLAG PRIL SUSH», имеющее правой частью набор отношений «MESTO in GLAG, PRIL in GLAG, SUSH in GLAG, MESTO in PRIL». По этим отношениям и предложению в базу фактов заносятся связи «я in писать», «интеллектуальная in писать», «программа in писать», «я in интеллектуальный». Такое разбиение суждения на элементарные факты соответствует выводу по правилу удаления «И». Я пишу и программу пишу и программа интеллектуальная и я интеллектуальный. То есть это автоматический вывод по дедукции, по правилу удаления конъюнкции, говоря формально.
База фактов позволяет проверку истинности утверждений. Утверждение разбивается на элементарные связи подводом под одно из правил грамматики, как было описано выше. После этого проверяется истинность каждой полученной связи. Связь истинна, если она есть в фактах или логически следует из фактов, по правилам ”x in y, y in z => x in z”, “x in y, y not in z => x not in z”. Если все связи находятся в фактах или логически следуют из фактов, то все логические следствия утверждения истинны и предложение считается истинным. Если истинность связи не подтвердилась, то предложение считается ложным или не определённым. Именно так программа Author-Bot проверяет истинность утверждений.
Проверка истинности утверждений позволяет отвечать «Да» или «Нет» на простейший тип вопросов, образуемый добавлением вопроса к утвердительному предложению.
Для ответов на другие типы вопросов вопросительное слово заменяется на x, сопоставимый с любым словом в фактах. Например, «какую я пишу программу?» переводится в «x я пишу программу», после чего x переносится: «я пишу x программу». «Кто пишет интеллектуальную программу?» преобразуется в «x пишет интеллектуальную программу». «Что я пишу» преобразуется в «x я пишу», потом, после переноса «x», в «я пишу x». И так для всех поддерживаемых типов вопросов. X сопоставим с любой частью речи в грамматическом разборе и с любым словом в сравнении с фактами. Например, «я пишу x» подходит под правило грамматики «MESTO GLAG SUSH» и порождает элементарные связи «MESTO in GLAG, x in GLAG». После получения связей по вопросу Author-Bot сопоставляет каждую полученную связь со всеми фактами в базе. MESTO in GLAG сопоставимо с Я in ПИСАТЬ, X in GLAG сопоставимо с фактом ПРОГРАММА in ПИСАТЬ. Полученные сопоставимые факты поступают на вход функции синтеза текста.
Для синтеза текста по имеющимся фактам нужно лишь подобрать правило грамматики с правой частью, сопоставимой с заданным набором фактов. Для этого сравниваются отношения правой части правил с заданными фактами. Если части речи правила совпадают с частями речи фактов, то предложение грамматически правильно и может быть построено по левой части правила.
Для правила «MESTO GLAG SUSH → MESTO in GLAG, SUSH in GLAG» с его правой частью сопоставимы факты «Я in ПИСАТЬ», «ПРОГРАММА in ПИСАТЬ». Тогда по левой части правила можно синтезировать грамматически-правильное предложение «Я ПИСАТЬ ПРОГРАММА».
Получив по отобранным фактам грамматически-правильные предложения, функция синтеза текста отбирает из них логически-правильные, проверяя истинность. Ведь не всё грамматически-правильное является истинным. Для этого используется выше-описанная проверка истинности. Оставив истинные предложения из грамматически-правильных, и исключив повторы, то есть не добавляющие ни одного нового слова предложения, функция выдаёт синтезированный текст ответа на вопрос: Я ПИСАТЬ ПРОГРАММА. Это — основной алгоритм вывода ответа на вопросы, в котором нет выводов из отобранных фактов для получения новых знаний кроме заданных, и нет согласования окончаний слов по морфологическому словарю русского языка.
Улучшением алгоритма есть вывод дополнительных фактов из сопоставленных со связями введённого вопроса. Например, после элементарных выводов, программа добавляет факт «ПРОГРАММА in ИНТЕЛЛЕКТУАЛЬНАЯ». Этот факт добавляется по связи «ПРОГРАММА in ПИСАТЬ» поиском всех записей типа «x in ПИСАТЬ». Полученный выводом факт тоже подаётся на синтез текста, вместе с другими фактами, что порождает грамматически-правильное предложение «Я ПИСАТЬ ИНТЕЛЛЕКТУАЛЬНЫЙ ПРОГРАММА» по одному из правил грамматики. Так как это предложение проходит проверку истинности, то оно является правильным ответом на вопрос «что я писать?».
Итак, в этой статье разобраны основные принципы вывода ответов на вопросы чат-ботами и другими интеллектуальными программами, и показано, что в технологиях синтеза текста, вывода ответов на вопросы и ведения бесед нет ничего принципиально сложного! Это — обычные рекурсивные алгоритмы, и ядро искусственного интеллекта пишется средним программистом за одну-две недели, на любом современном языке программирования, C#, Java, PHP, Python.