Про искусственный интеллект: как компьютер естественный язык обрабатывает

Материал размещён с разрешения его автора,
Владислава Январёва.
Первоисточник здесь (часть 1) и здесь (часть 3).

А мы попросим Влада не останавливаться на достигнутом и порадовать-таки нас частью 2. А там, глядишь, и до части 4 дойдёт...


Часть 1, историческая

Введение

Задачу обработки естественного языка (ЕЯ) обычно относят к задачам искусственного интеллекта. Причины просты: человек понимает текст? Понимает. Человек может написать статью? Может. А компьютер? Прочитать и пересказать Евгения Онегина не может. Следовательно, подумали товарищи ученые, ежели мы научим компьютер читать и писать, то тем самым решим Интеллектуальную задачу.

Можно выделить несколько задач, связанных с ЕЯ. Условно их можно поделить на следующие группы, согласно входам и выходам алгоритма:

  • ЕЯ → ЕЯ. Например, перевод с одного языка на другой;
  • ЕЯ → Данные. Например, категоризация: распознавание эмоциональной тональности текста – это позитивный отзыв, это негативный; или – этот текст о кошках, а этот – о политике. Или фраза для Сири «Позвони маме» должна вылиться в конкретное формальное действие (звонок) конкретному абоненту (маме);
  • Данные → ЕЯ. Генерация текста. Есть, например, данные эксперимента в табличном формате – надо по ним автоматически написать научную статью. Или пусть компьютер новую сказку сгенерирует!

Замечу, что мы совершенно не будем касаться пар «Речь → ЕЯ» (распознавание речи по звуку) и «ЕЯ → Речь» (синтез человекоподобной речи по тексту). Это совершенно отдельные задачи, с ними работают по другим принципам.

История

Исторически первый раз попытались самым простым алгоритмом решить задачу перевода (ЕЯ → ЕЯ). Взяли словарь, заложили его в машину, и начали переводить пословно. Получили то, что можно назвать «подстрочником» – т.е. буквальным переводом слов в предложении. По которому смысл текста понять было может и можно, но сложно. «Не… – сказали ученые – нам это не подойдет!»

И начали думать, как же переводчик тексты переводит. Додумались до того, что переводчик сначала анализирует смысл текста, а уже потом пытается изложить то же самое на другом языке. Заодно выяснилось, что переводчик/читатель, понимая смысл текста, также может отвечать на вопросы по содержанию типа «Кто влюбился в Онегина?».

Таким образом, перед учеными стал вопрос – как перевести ЕЯ-текст в некие формальные структуры данных, которыми может оперировать программа. И воспользовались они для этого наработками лингвистов – морфологией, синтаксисом и деревом синтаксического разбора.

Согласно идеям лингвистов, для членов предложения можно выделить морфологические признаки (род, время и т.д., в зависимости от языка), а затем, на основании них, построить дерево подчинения одних слов другим. Например, в конструкциях русского/английского языков разбор будет строиться вокруг глагола. «Петя пошёл в новый кинотеатр». Пошел кто? Петя. Пошел куда? В кинотеатр. Кинотеатр какой? Новый.

Подобная структура данных (дерево), в общем-то, несложно обрабатывается программами. Понятно, как отвечать на вопросы, например типа «Кто пошел в кинотеатр?». Для этого надо найти в дереве корень с глаголом «пошел», проверить, что есть ветка «куда?» со значением «В кинотеатр» и перейти по ветке «Кто?», получив слово «Петя».

Более того, у ученых появилась идея – если в самом начале в узлах дерева находятся слова (например, «Петя»), то мы можем обойти всё дерево и соотнести слова с понятиями реального мира. Например, в нашей базе данных уже есть знание о том, что «Петя» это «человек, рост 170 см, 19 лет» и т.д. Тогда, заменив в дереве слова на понятия, мы получим более полное представление о реальности, в которой происходит действие. Назвали этот этап «семантическим анализом» – когда мы переходим от синтаксического дерева слов к семантическому дереву понятий, которое и должно описывать смысл происходящего. Зная семантику, т.е. значение слов, мы можем обрабатывать более сложные запросы типа «Какого роста был человек, который пошел в кино?» (ответ: 170 см)

«Отлично, – потирали руки ученые – скоро, скоро мы опишем все схемы предложений и сможем давать ответы на все вопросы!»

Реальность

Увы, довольно скоро выяснилось, что предложенный метод хорошо работает только на довольно простых примерах типа «Петя пошел в новый кинотеатр» и «Peter goes to school everyday». Реальность же обозначила следующую проблему: часто дерево синтаксического разбора сильно неоднозначно, и сильно зависит от семантики.

Пример – «Петя пошел в новый кинотеатр. Он купил билет на 19 ряд». Человеку совершенно очевидно, что «Он» (это, кстати, явление «референции» в лингвистике) относится к Пете. Но, чисто формально, у нас есть «кинотеатр». И в альтернативном предложении «Он находился на улице Ленина», «Он» имело бы отношение к кинотеатру. Оказалось, что построить дерево разбора без учета того, что начали называть человеческим «common sense» (здравым смыслом) чаще всего невозможно – получается много вариантов.

Более того – начали проявляться проблемы даже на уровне морфологии. Например, слово «милая» можно отнести и к существительным, и к прилагательным. Что, опять же, порождает проблемы с разбором – поскольку этап создания дерева подчинения в целом должен идти после этапа анализа форм слова. Два варианта интерпретации формы слова – и у нас опять проблемы с анализом.

Конечно, ученые рассчитывали, что постепенно решат все эти «побочные» проблемы, но время шло, а проблемы оставались. Некоторое время считалось, что проблемы можно решить, используя идеи фреймов Марвина Мински и сценариев Роджера Шенка, исследователей в области искусственного интеллекта…

Фреймы, сценарии, онтологии

Марвин Мински, на кафедре (очень вольный пересказ):

Товарищи и друзья! Мы пытались анализировать текст через его структуру. Но есть же еще и реальность – и именно она помогает человеку понимать, что происходит.

Например, возьмем фразу «Петя дал 100 рублей». Очевидно, что в реальной жизни 100 рублей не могут деться «куда-то»! (отпивает) Поэтому, перед тем как анализировать текст, мы должны понять, к какой ситуации он относится! Скажем, здесь, в ситуации передачи денег, очевидно должно быть как минимум три параметра: (кто, кому, сколько). Эта тройка не зависит от ситуации, и должна быть всегда в условиях передачи денег – т.е., она универсальна. И хорошая программа, пытаясь узнать пропущенные данные, должна спросить, «Кому Петя дал 100 рублей»? – «Васе!»

Я назвал такой набор параметров «фреймом». Конечно, разные типы ситуаций потребуют разных фреймов. Но рано или поздно мы их все опишем!

PS: Отдельным бонусом такого описания можно считать то, что мы, опираясь на фундаментальный смысл предложения, часто можем игнорировать дополнительные красивости описания и не тратить время на их разбор. Такое предложение будет эквивалентно «Петя, смущаясь и теребя в руках свой бумажник, медленно достал 100 рублей и медленно передал их Васе».

PPS: А еще фреймы можно наследовать… Например, «ребенок» является подклассом класса «человек», а тот – «млекопитающих», и из этого тоже можно делать выводы (см. рисунок ниже [1]).

Роджер Шенк, на кафедре (очень вольный пересказ):

Ну, еще можно сказать, что типовые ситуации могут идти друг за другом по времени. Я назвал это явление «сценарием». Например, «Петя пришел в кафе. Петя заказал еду. Пете принесли еду. Петя съел еду. Петя оплатил счёт. Петя ушел из кафе». Если какой-то фрагмент пропущен, то его может либо домыслить программа, автоматически добавив соответствующий факт, либо запросить дополнительные данные у пользователя…

Другие исследователи (сейчас, увы, быстро не найду, кто выдвинул эту идею первым и как она развивалась):

А еще можно учитывать свойства объектов! Например, «Маша поставила сковородку на стол» – можно, потому что стол обладает атрибутом «твердый». А, «Маша поставила сковородку на воздух» – нельзя…

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

Возникло два подхода. Представители первого (узкого) упирали на то, что надо смоделировать узкую предметную область (например, часть юриспруденции или медицины) и анализировать типовые фреймы/сценарии там. Представители второго (широкого) замахнулись на то, чтобы смоделировать фреймы/сценарии вообще большинства типовых жизненных ситуаций – т.е. common sense в целом….

Реальность 2

Первый подход продолжает жить и здравствовать, поскольку позволил быстро получить конкретные результаты в узких сферах деятельности. Кстати, он используется и в современных помощниках типа Siri или Алисы – но об этом чуть позже. А вот второй подход… Оказалось, что набор жизненных ситуаций он очень-очень большой. И общих знаний о мире у нас как-то очень много, и как мы их применяем – не очень понятно.

Приведу один пример. В 1984 году был запущен проект Cyc — проект по созданию объёмной онтологической базы знаний, позволяющей программам решать сложные задачи из области искусственного интеллекта на основе логического вывода и привлечения здравого смысла. Да, да, тех самых смыслов в духе «стол – твердый».

Последняя версия OpenCyc, 1.0 была выпущена в июле 2006 года. OpenCyc 1.0 включает в себя полную онтологию Cyc, содержащую сотни тысяч выражений, миллионы утверждений, связывающих термы между собой. База знаний содержит 47 000 концепций и 306 000 фактов, и её можно просмотреть на сайте OpenCyc.

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

Важный вывод по части 1

К середине 90-х – началу 2000-х исследователи разочаровались в идее описания common sense и универсальном алгоритме поиска смысла текста, и сфокусировались на конкретных задачах – поиска, перевода, локальных предметных областях. Этот тренд продолжается и до сих пор – заниматься смыслом текста сейчас несколько… моветон и совершенно не мейнстрим. (Кстати, у меня есть авторская теория, которая объясняет эту проблему, но поля слишком малы… ну, вы поняли.)

В следующий раз (который, я надеюсь, будет) мы поговорим о современном состоянии дел: поиске, переводе, чат-ботах.


Часть 3: чат-боты

Вторую часть сожрал кадавр, не ищите :)

Введение

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

Таким образом, можно точно сказать одно – современные чат-боты, на каких бы принципах они ни были построены, не обладают знаниями мира. Всё, что вы видите, как искусственный интеллект, построено на определенных приемах/трюках, которые работают в конкретных ситуациях. Об этих приемах мы и поговорим.

Мы рассмотрим три варианта чат-ботов:

  1. Чат-боты общего назначения (Сири, Алиса и пр.).
  2. Чат-боты отдельных компаний, предназначенные для решений конкретных вопросов.
  3. Чат-боты, использующие нейросети в качестве обработчика.

Чат-боты общего назначения

Начнем с Сири, Алисы и им подобных. Безусловно, точно сказать, как устроены эти системы внутри, сложно (поскольку это закрытая разработка), но принципы угадать можно – они часто похожи в современных системах.

Наибольшей проблемой, как вы понимаете, для подобных систем является ведение диалога. Потому что диалог испытывает способность систем к пониманию фактов и их взаимосвязей – например, референций (ссылки на упомянутые прежде объекты), понимание контекста (например, что значит «коса», учитывая предыдущий диалог) и т.д.

Поэтому часто системы упрощенно предполагают, что в фразе пользователя будет содержаться «команда» – например, «открыть сайт X» или «позвонить Y». Если быть более точным – действие (intent) и объект действия (параметр), иногда несколько. Под эту формулу попадают много навыков Сири – например «позвонить X» или «поставить таймер на 10 минут». На самом деле сложностей хватает и здесь – команды можно формулировать разным образом, или сложно идентифицировать параметр или даже два (например «напоминание на завтра на 10 утра» – это всё надо отследить и перевести в формальную запись времени). Разработчики Алисы также подтверждают подобный процесс – см. рисунок ниже[2].

Отмечу, что подобная структура (команда + параметры команды) вполне себе соответствует изложенной в первой части идее фреймов Минского. Фрейм – это модель некоторой стандартной ситуации; программа, сталкиваясь с пользователем, старается эту ситуацию идентифицировать и заполнить все слоты фрейма. Нужна «погода завтра»? Слоты когда=завтра, где=неизвестно, подставим текущую локацию или запросим у пользователя.

Алиса, кроме того, предлагает некие более сложные варианты за счет реализуемых сторонними разработчиками «навыков». Фактически, первой фразой кроме команд вы можете активировать взаимодействие с навыком – некоторой программой стороннего разработчика, который на основании отдельного алгоритма обрабатывает то, что вы говорите. Конечно, непонимание реального мира будет и здесь – так что вряд ли даже со сторонним навыком получится содержательный диалог. Но есть и исключения – например, с Алисой можно поиграть в «города». Реализация подобной игры возможна, потому что понятно, как формализовать её диалог – от пользователя всегда будет ожидаться только одна фраза – название города (корректность которой, кстати, можно проверить по базе данных).

Наконец, еще один интересный момент – как подобные Сири боты общего назначения обрабатывают фразы, в которых нельзя понять команду пользователя? Тут есть три классических варианта:

  1. Сказать «я не поняла» и пр.
  2. Отшутиться или сказать что-то своё, симулируя перехват разговора и, в каком-то смысле, игнорирование собеседника.
  3. В случае оскорбления – обидеться, завершить разговор (известно для Алисы).

Про генерацию ответов типа 2 в Алисе[3]:

Болталка — на самом деле fallback. В Алисе это работает так, что если классификатор интентов [команд] не может уверенно определить, чего хочет пользователь, то другой бинарный классификатор сперва пытается решить — может, это поисковый запрос и мы найдем что-то полезное в поиске и туда отправим? Если классификатор говорит, что нет, это не поисковый запрос, а просто болтовня, то срабатывает fallback на болталку. Болталка — система, которая получает текущий контекст диалога, и ее задача — сгенерировать максимально уместный ответ.

Интересно, откуда взялся вариант 3 – даже в Избе был один раз вопрос «почему Алиса огрызается». Ответ такой – к сожалению, на практике очень много людей начинают проверять ИИ «на прочность». Может, им нравится, что она не может дать сдачи или что-то в этом духе. Постоянные ответы «я не поняла» ещё больше их распаляют. Одна из стратегий – учитывать подобное поведение и пресекать. Возможно, оскорбления, если на них не реагировать, также могут создать негативный пиар продукту.

Чат-боты для решений конкретных вопросов

Второй случай – чат-боты для решения частных проблем. Бывают на сайтах разных компаний. Редко обрабатывают фразы любого типа, потому что подразумевается, что к ним пользователь обращается в случае проблем, а не просто «пообщаться». Дальше алгоритмов два – либо уже упомянутое распознавание «команда-параметр» (реже), либо еще более простой алгоритм – ищем совпадение фразы с вопросом из базы данных «вопросов-ответов» и выводим наиболее подходящий ответ. Как оценивать схожесть предложений – это отдельный технический вопрос, важный, но в этой статье мне бы не хотелось его детально касаться. Можно, например, создать ряд шаблонов и отслеживать их появление; или переводить текстовые предложения в векторы (наборы чисел) с помощью определенных процедур, а дальше оценивать дистанцию между векторами и пр.

Кстати, из истории. Для относительно формального описания пар «вопрос-ответ» в диалоге для разных реализаций чат-ботов был придуман язык AIML. Вот пример описания:

<category>
<pattern>КАКОЕ ВАШЕ ИМЯ</pattern>
<template>Моё имя – <bot name="имя"/>.</template>
</category>

Учитывается, что, возможно, бот уже что-то знает и сохранил это в памяти программы. Также интересной особенностью было то, что какая-то фраза, например «Что ты знаешь о футболе» могла активировать переменные внимания – т.е. бот начинал далее учитывать, что вроде как мы погружены в тему футбола, и обрабатывать фразы с учетом этого. К сожалению, на практике бот с трудом понимает момент смены темы, знает не все факты и т.д. – т.е. мы натыкаемся на классическую проблему «непонимания», несмотря на подобный обходной путь. Но и такой подход есть.

Чат-боты, использующие нейросети в качестве обработчика

Третий случай – чат-боты на нейросетях. Это интересно.

В современном IT были придуманы архитектуры нейросетей, которые позволяют тренировать их на последовательную генерацию текста предложений. Очень упрощенно: «В настоящее время актуальной…» далее можно почти точно сказать, что будет идти слово «задачей». Подобные нейросети тренируются на гигантском наборе пар «вход-выход». В качестве базы для тренировки можно, например, взять пары реплик из фильмов. «Вы кто? – Вы что, меня не знаете?». Готовая база для чат-бота – вопрос пользователя, ответ бота. (Кстати, если мы возьмем субтитры на одном языке и на втором, мы получим параллельные тексты на разных языках и по похожему принципу сможем сделать переводчик.)

Собственно, отсюда и появляются боты, основанные на этом принципе. Несложно понять, что они не очень заточены под решение конкретных задач – но зато хорошо справляются с подбором фраз, явно следующих из предыдущего диалога (в конце концов, они тренируются на гигантской базе диалогов). Вполне возможно, что, если мы посмотрим на локальную пару фраз в диалоге с таким ботом, мы удивимся качеству его ответа. Но – увы – он также не обладает знанием о мире, и поэтому на большом диалоге отсутствие смысла будет, скорее всего, заметно.

В качестве примера можно взять представленного Google AI чат-бота на нейросетях Meena[4]. Авторы упоминают о том, что если взять оценку «разумности и конкретность», то их бот выигрывает у множества других. «Разумность» определяется как «имеет ли смысл реплика в данном контексте», «конкретность» – «отвечает ли реплика на предыдущую реплику, или же она является, скорее, общей фразой».

Безусловно, авторы проделали большую работу по тренировке нейросети и созданию процедуры оценки для ботов. Но если посмотреть детально – что именно оценивается? Нейросеть может работать, определяя тематику вопроса. Далее, используя нейросети-декодеры, можно давать ответы, привязанные к вопросу, ответы, которые будут гладко следовать из заданного вопроса. Т.е. надо понимать, что, даже несмотря на то, что данный бот будет выдавать реплики с высокими параметрами разумности и корректности (как показывают авторы – достаточно близким к значениям в человеческом диалоге), это всего лишь означает, что диалог приятен для уха и относительно связен в пределах 1–2 фраз. Это далеко не означает, что «машина начала мыслить»!

В сообществе существует вопрос – может ли количество перейти в качество, и не начнет ли нейросеть на основании загруженных в неё текстовых данных о мире генерировать содержательные тексты относительно этого самого мира. Одни считают, что такое возможно, другие – что нет. Я принадлежу второй категории – мне кажется, что одних лишь текстов недостаточно, чтобы описать то, что происходит в мире. Но, конечно, время покажет, кто прав.


  1. Т.А. Гаврилова, В.Ф. Хорошевский. Базы знаний интеллектуальных систем
  2. Как устроена Алиса. Лекция Яндекса
  3. См. [2]
  4. Google представляет Meena, чат-бота на нейросетях – по материалам Towards a Conversational Agent that Can Chat About… Anything


Источник: http://janvarev.ru/ObAvtore/Filosofija/

Категория: Искусственный интеллект | Добавил: agradov 07.07.2020 | Автор: Владислав Январёв W
Просмотров: 99 | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
close