Наносемантика подогнала ликбез:
Основные вехи в истории создания искусственного интеллекта
В середине XX века, с развитием электроники и кибернетики, человечество стали все больше увлекать идеи общения с машиной и создания искусственного интеллекта. Идеальный смоделированный партнер по диалогу мыслился как удобная замена живому собеседнику и как средство изучения процесса речевого общения и возможностей человеческого мозга. Эта потребность находила выражение не только в кинематографе и литературной фантастике, но и в науке.
В 1950 году была опубликована работа Алана Тьюринга «Вычислительные машины и интеллект». В ней английский ученый предположил, что компьютер можно считать способным к мыслительным действиям, если человек в процессе общения не сумеет отличить его от другого человека. Этот тест впоследствии получил название «теста Тьюринга».
Спустя четыре года в Нью-Йорке Джорджтаунский университет совместно с IBM провели демонстрацию возможностей машинного перевода, известную сегодня как Джорджтаунский эксперимент. Компьютер перевел более 60 предложений с русского языка на английский. Этот успех оказал влияние на мировую научную общественность и послужил стимулом к развитию вычислительной лингвистики в последующие годы.
Другой важной вехой в развитии искусственного интеллекта стала программа «Элиза», написанная в 1966 году Джозефом Вейценбаумом. На основе техники активного слушания она пародировала диалог с психотерапевтом. Чаще всего «Элиза» просто задавала собеседнику вопрос, используя ключевое слово из его последней реплики. Это была первая успешная имитация интерактивного общения между человеком и машиной.
Заметный шаг вперед в создании виртуального собеседника был сделан в 1995 году, когда американский ученый Ричард Уоллес разработал программу A.L.I.C.E. (Artificial Linguistic Internet Computer Entity). Она использовала технику сопоставления фразы пользователя с образцами, имеющимися в базе знаний, и подбирала оптимальный вариант для ответа с учетом ключевых слов. Языком программирования для A.L.I.C.E. был AIML.
Появление «Наносемантики» и рынка виртуальных собеседников в России
Язык AIML взяла поначалу за основу для своих разработок «Наносемантика» – основанная в 2005 году Игорем Ашмановым российская компания, лидирующая сейчас на отечественном рынке технологий искусственного интеллекта.
Вскоре ее лингвисты столкнулись с недостатками AIML – этот язык оказался слишком сложен, непрозрачен и порождал трудноуловимые ошибки. Кроме того, он, естественно, был рассчитан на работу с морфологией английского языка и плохо подходил для русского. Многообразие падежных и других грамматических и словообразовательных форм в русском языке слишком велико. Необходим был язык диалогов, который учитывал бы чередования, выпадающие гласные, развернутую систему приставок и другие нюансы одного из самых сложных языков мира. Поэтому «Наносемантика» создала свой, уникальный язык диалогов DL и собственный движок, поддерживающий этот язык и работающий по принципу нечеткой поисковой машины.
Отличал «Наносемантику» от предшественников и иной подход к моделированию виртуального собеседника. Если в конце 90-х при попытке разработок на основе A.L.I.C.E. коммерческих предложений во главу угла ставился вопрос, насколько успешно программа имитирует в общении живого человека, то специалисты «Наносемантики» – Кирилл Зоркий, Анна Власова и другие – изначально сделали акцент на практической пользе будущего продукта. Позиция «Наносемантики» заключается в том, что попытка выдать данную технологию за искусственного человека бессмысленна. По замечанию директора по лингвистическим разработкам «Наносемантики» Анны Власовой, это все равно что оценивать самолеты по тому, насколько они похожи на реальную птицу, тогда как у них другие критерии оценки: дальность полета, грузоподъемность и т.д.
Руководство компании пришло к выводу, что автоматизированные диалоговые системы должны встраиваться в бытовые приборы, устанавливаться на сайты, чтобы приносить реальную выгоду владельцам. Несмотря на то, что компания также начинала с описания общих моделей предложений и ключевых слов, большое внимание сразу же было уделено использованию переменных, в которых можно хранить информацию – например, о текущем разговоре с пользователем. Иными словами, «Наносемантика» изначально ставила своей целью создание функциональной модели, подходящей для русского языка и способной выдерживать большую нагрузку.
Главным продуктом «Наносемантики» стали коммерческие инфы – виртуальные роботы-собеседники, размещаемые на сайтах клиентов. Для общения с ними пользователям не требуются специальные знания и навыки: разговор идет на обычном (естественном) языке в режиме чата. Коммерческие инфы делятся на консультантов и промоутеров. Первые отвечают на вопросы пользователей и обеспечивают техническую поддержку. Вторые продвигают определенный товар или услугу и в большинстве случаев сами вступают в диалог с посетителем сайта.
Структура инфа
Три элемента, из которых состоит инф, – это виджет, движок и база данных.
Виджет – это пользовательский интерфейс для общения с инфом, по сути – приложение, которое видит у себя на сайте заказчик. Виджет может быть выполнен на Flash, HTML5 или JavaScript. Чаще всего инф выглядит как анимированный персонаж. Он умеет двигаться, жестикулировать, обладает мимикой. Иногда он выполнен в виде фото. Реже – в форме строки для ввода запроса и области вывода ответа.
Для того, чтобы язык диалогов в инфе заработал на странице пользователя, необходим ряд промежуточных, вспомогательных сервисов. Движок, разработанный «Наносемантикой», является одним из них. Это своего рода «проигрыватель» инфов. Он интерпретирует полученный запрос, то есть отвечает за «понимание» инфом реплики пользователя, и вслед за этим обеспечивает выбор и генерацию ответа на основе имеющихся шаблонов. За движком находится API-сервер, который выполняет роль коммутатора, соединяющего движок с виджетами.
Среди функций движка – поддержка модели пользователя, которая представляет собой набор фактов, известных о собеседнике: имя, пол, возраст, язык, город, ответы на предыдущие вопросы. Вся эта информация накапливается в процессе диалога и потом выборочно сохраняется специалистами «Наносемантики». Благодаря этому при повторном появлении пользователя инф уже может приветствовать его по имени и не задавать вопросов, прозвучавших в предыдущей беседе.
В развитии движка «Наносемантики» можно выделить три периода. Движок на первых инфах, разработанных для компаний DeltaCredit и RUcenter, соответствовал уровню языка DL на его начальном этапе, когда еще не было модели пользователя, когда возможности работы со сторонними сервисами были ограниченны и почти отсутствовал API-сервер (то есть для каждого инфа он был свой). Второй период связан с появлением общего API-сервера и подключением к внешним базам данных. Третий – со значительным усовершенствованием движка: сегодня он по сравнению с ранними версиями гораздо быстрей в работе и устойчивей к нагрузке.
Третья составляющая инфа – база данных (или база знаний инфа). Данные объединяются в модули – блоки, некоторые из которых связаны между собой.
Эти блоки делятся на несколько категорий. Есть общие, которые позволяют обеспечивать структуру разговора – поздороваться, попрощаться, понять, хочет ли пользователь продолжить общение на данную тему, переключиться на другую или вернуться к какой-то из предыдущих тем, доволен ли собеседник общением и т.д. Эти модули поддержания общей структуры беседы используются во всех инфах и постоянно совершенствуются.
Далее, есть данные, относящиеся к конкретной теме, специализации конкретного инфа. Если, к примеру, инф разработан для банка, то он рассказывает о кредитах, пластиковых картах и терминалах. Подобные данные готовятся под конкретную систему диалога, и у них может быть разная логическая структура. Они позволяют строить такой диалог, который востребован клиентом. Это может быть диалог в формате разговора с сотрудником колл-центра, когда человек задает разные тематические вопросы («Я потерял кредитную карту, что делать?», «Чем ваше предложение лучше предложения ваших конкурентов?» и т.д.) и получает на них ответы. Или диалог по принципу технической поддержки, когда специалист задает пользователю вопрос («Какая у вас проблема?», «Что вы видите на экране?», «Горит ли лампочка в вашем устройстве?») и далее четко ведет его по диалогу. Тип диалога определяется задачей, которая стоит перед инфом. Диалоговые деревья могут строиться по-разному в разных проектах. И данные в них, соответственно, будут отличаться.
Следующий тип данных – фактические данные по теме. Это общие терминологические знания о мире в конкретной специфической профессиональной среде. Такого рода тематические блоки в родственных, смежных инфах будут одни и те же. И когда они пополняются, они изменяются во всех похожих проектах.
Еще один блок – это знания о жизни вообще, которые, в свою очередь, распределены по отдельным тематическим блокам: времена года, музыка, спорт, привычки, увлечения, семейные отношения, взаимоотношения полов… Но если заказчик не хочет, чтобы инф отвлекался на общие разговоры, то данный блок в виртуальном собеседнике отсутствует. Таким образом, возможности инфа в разговоре сознательно сужаются, но это может быть оправдано с точки зрения бизнес-модели.
Данные представляют собой достаточно разветвленную структуру. Можно считать, что они состоят из правил. Классифицирующие правила обрабатывают входящий запрос и классифицируют его тем или иным образом. Если предложен какой-то шаблон для ответа на определенную реплику, значит, ей уже присвоена метка. Если реплика понята не полностью, то определяется ее тематика и структура. Например, вопрос это или утверждение.
Каков бы ни был уровень распознавания той или иной реплики пользователя, она в любом случае получает метку, и инф выдает ответ. Если вопрос совершенно не понят, то ответ будет взят из пласта «Что отвечать, когда вопрос непонятен». Количество таких ответов учитывается в статистике. У «молодых» инфов, сразу после запуска на сайте, подобных ответов много. По мере «взросления» и обучения их доля снижается.
Правила, применяемые для ответа инфа, могут быть сильными и слабыми. Они выбираются компьютером: чем больше конкретики, тем больше «силы» у правила. Например, в качестве правила можно написать целую фразу «Сколько стоит арбуз», и если задан вопрос, полностью совпадающий с этим правилом, то оно будет самым сильным в данном случае. Можно написать правило «Сколько стоит …. ?». Оно будет слабее и сработает при вопросе «Сколько стоит арбуз» лишь в том случае, если отсутствует правило для этой фразы целиком. «Сила» зависит от степени конкретности правила и от того, в какой точке диалога находятся собеседники. Правила содержат, кроме того, определенный набор условий.
Например, если есть выбор между двумя правилами – «Сколько стоит …?» и «Сколько стоит …? (в разговоре о кредитных картах)» и известно, что разговор идет о кредитных картах, то второе правило сильнее и, соответственно, срабатывает. Таких условий много, они сравниваются, и выбирается самое весомое. Если же выбирается несколько микродиалогов с одинаковым весом, то финальный выбор среди них происходит случайным образом. После того как сделан выбор, срабатывают правила генерации ответа. Ответ может содержать самое сильное правило, слово из синонимических словарей, слово из базы данных, к которой инф обращается. Правило генерации может быть командой: «Сходи в такую-то базу данных, возьми ответ и транслируй его». Тут же могут быть прописаны условия: если такого ответа нет, то сделай что-то еще. Причем программа может обращаться к абсолютно разным и независимым друг от друга внешним источникам – и к базам данных, и к независимым сервисам. Например, информация о погоде и курсах валют берется не из базы данных, а из динамических сервисов.
В правиле иногда прописывают ту или иную анимацию: инф при ответе может проиграть определенный ролик или, например, состроить рожицу.
Наряду с данными правило-распознающими и правило-генерирующими есть еще и такой тип данных, как словари. Это списки ключевых слов или фраз, которые используются в одной и той же позиции. Также используются словари наиболее типичных опечаток, словари, содержащие кальки, и другие. На данный момент в арсенале «Наносемантики» более 2500 словарей, общих и специфических. Среди них словари для распознавания (специфические) и словари для ответов (в основном общие, словари синонимов).
Особо стоит отметить присутствие функциональных модулей в базе данных инфа. Важное место занимают среди них фильтры контента – «взрослый», «обсценный» и т.п. В первую очередь, это возможность выделить грубую, оскорбительную и обсценную лексику и пометить, что она есть в реплике пользователя. Далее, с этой меткой, можно предпринять любое действие – прервать диалог, отказаться от записи его в лог (историю общения пользователя и инфа). По той же технологии можно не записывать разговоры, касающиеся терроризма или наркотиков, либо прекращать разговор при возникновении такой темы. При необходимости можно пометить и затем фильтровать любую тему – в зависимости от пожеланий заказчика.
Отдельную группу среди модулей составляют игровые блоки. Они позволяют инфу проводить викторины, поддерживать игры, отвечать на вопросы типа «Подскажи, как правильно…». Здесь задействованы такие технологии, которые не требуют детального прописывания модуля. Он возникает автоматически – нужно только прописать варианты ответов.
Существуют отдельные блоки, распознающие ситуации, в которых собеседник хочет оставить свои данные, чтобы пообщаться со специалистом-человеком. Как вариант – инф может сам предложить пользователю оставить контактный телефон или мейл. Это бывает в сложных случаях техподдержки, которые требуют участия консультанта.
«Наносемантикой» уже собран блок и данных, и переменных, который позволяет в разговоре отследить подобные ситуации и дать нужный ответ: либо «Звонить нужно по такому-то телефону», либо «Оставьте свои данные, и мы вам перезвоним». У инфа есть возможность пересылать полученные от пользователя данные на определенный адрес.
К специализированным лингвистическим технологиям «Наносемантики» относятся разработанные ее специалистами словари синонимов, которые позволяют повысить вариативность ответов инфа, и восстановление опущенных данных. Например, ответ «Да» на вопрос «Ты любишь читать?» поступает в движок в виде «Да, я люблю читать», то есть фраза восстанавливается на этапе обработки.