nai: Описание проекта
 
А как все хорошо начиналось...
Когда байты были еще битами…
Зимой 2001 мой друг рассказал мне о крайне занимательной программе, умеющей думать и говорить с человеком. Принеся через пару дней ее мне на дискете, он обеспечил мне досуг на долгое время. Поначалу все это как-то не укладывалось в голове, мучил один вопрос "Как это она так???", но после нескольких часов "общения" все понемногу прояснилось, и стали видны явные недостатки и недоработки. Возникло желание сделать лучше, красивее, интереснее и, в конце концов, интеллектуальнее. Сразу оговорюсь: у меня практически никогда не было ощущения, что я делаю настоящий Искусственный Интеллект. Я считаю, что просто создаю потрясающе интересную и занимательную игру, многие пользователи от которой приходят в неописуемый восторг, и задаются все тем же вопросом: "Как?". Несмотря на это в названии и рекламе всегда присутствует термин ИИ, да, и в бесконечных чатовских беседах я нередко долго спорю с критически настроенными людьми, не считающими это настоящим ИИ, убеждая их в том, что и такая простая база данных может на самом деле этим оказаться. Наверно, это рекламный ход или самолюбие…
За более, чем год своего существования, на сегодняшний день система nai представляет собой целый комплекс программ, включающий в себя собственно основной модуль, для осуществления диалога и обмена "знаниями", редактор баз знаний (необходимый для объединения, фильтрования, и целенаправленного редактирования проектов их модераторами) и программу интегрирующею "интеллектуальные модули" и "Новый Говорильный Сервер" http://chat.chat.ru. Сегодня наш проект это не некий единый бесполый непонятный персонаж, а несколько личностей, разных по характеру и "взглядам на жизнь". Пока их не так много, но это только пока. Обучение и развитие происходит в основном за счет всех пользователей: в Интернете постоянно действуют сервера, с которых можно автоматически скачать последнее обновление базы и на которые закачать свои. Сейчас у программы тысячи пользователей, и по их признанию она является безусловно лучшей из порядка десятка аналогов.
Принцип работы
Изначально программа ориентировалась на ведение реального диалога с человеком, причем благодаря хорошему алгоритму сей диалог идёт на весьма приличном уровне. Реагируя на каждую конкретную реплику собеседника, она генерирует ответную, отыскивая в базе знаний наиболее подходящую.
   
Так называемая база знаний, на самом деле, представляет собой достаточно простую базу данных, которая состоит из множества записей, которые, в свою очередь, состоят из 5 элементов:
  • вопрос (набор слов обычно составляющих вопрос),
  • отрицание (применяемое для предотвращения обычных ошибок и представляющее собой набор слов, которые не должны входить в вопрос),
  • контекст (набор слов обычно встречающихся в прошлых вопросах),
  • автор (автор данной реплики),
  • ответ (сама реплика).
В данном случае слово "вопрос" весьма условно, так как естественно не все реплики, адресуемые программе, являются вопросами (так, например, на приветствие "Хаюшки!" программа ответит "Привет и тебе, Незнакомец!", что, по сути, не является вопросом и ответом). Кроме того, в базе определено её название, имя персонажа, описание и сведения о авторе. Каждая база знаний содержится в отдельном файле и зашифрована.
   
В начале программа просит выбрать, с каким именно персонажем желает общаться пользователь, затем загружает соответствующую базу знаний в оперативную память. После того как пользователем вводиться реплика происходит следующее:
  1. Введенная фраза разбирается на слова, которые приводятся к нижнему регистру.
  2. Производится обход всей базы и сравнение слов из пользовательской фразы и полем "вопрос" каждой записи.
  3. Подобное сравнение проводится также для контекста (набора наборов слов из предыдущих ответов) и полем контекст каждой записи.
  4. При этих сравнениях для каждой записи вычисляется определенное количество баллов
    (Упрощенная схема выглядит так: за одно совпадение из реплики - 10 баллов, за одно совпадение из контекста - 2 балла)
  5. Наиболее подходящим считается ответ из записи набравшей максимальное количество баллов и этот ответ выводится на экран.
Если же не нашлось ни одного сообщения, программа просит пользователя ввести свой вариант ответа. В случае если пользователь считает ответ программы некорректным, он также может добавить свою версию ответа.