Глубинное обучение в обработке и анализе текстов

Идея искусственной нейронной сети принадлежит Уоррену Маккаллоку и Уолтеру Питтсу. В совместном исследовании начала 40-х годов XX века они предложили формальную модель человеческого мозга — искусственную нейронную сеть, а чуть позже Фрэнк Розенблатт обобщил их работы и создал модель нейронной сети на компьютере.

Алгоритм обратного распространения ошибки состоит из двух шагов. На первом шаге нейронная сеть делает предсказание целевого признака, затем предсказанное значение сравнивается с истинным, вычисляется ошибка — разница между предсказанным и истинным значением. На втором шаге веса нейронной сети корректируются так, чтобы уменьшить ошибку.

Примерно через двадцать лет нейронные сети стали использоваться в качестве одной из многочисленных моделей машинного обучения. Это стало возможным благодаря появлению алгоритма обратного распространения ошибки, который учит нейронную сеть правильно предсказывать требуемые показатели. Оказалось, однако, что нейронные сети хоть и мощный, но медленный инструмент, поэтому на некоторое время они практически были забыты. С появлением новых устройств для вычислений — видеокарт (GPU), на которых алгоритм обратного распространения ошибки вычисляется существенно быстрее, чем на процессорах (CPU), —нейронные сети стали использоваться все чаще и чаще.

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

За последние десятилетия было придумано несколько специфических видов нейронных сетей: сверточные, рекуррентные, рекурсивные сети, сети указателей, которые, благодаря особенностям архитектуры, быстрее решают специфические классы задач, обучаясь при этом на меньших объемах данных. Например, сети указателей используют, как правило, в комбинаторных задачах, сверточные сети — в компьютерном зрении и обработке текстов, рекурсивные сети — в предсказании временных рядов и обработке текстов. Такие специфические архитектуры принято называть глубокими: от обычных сетей прямого распространения их отличает наличие большого количества нестандартных слоев.

Автоматическая обработка текстов

Область автоматической обработки текстов (АОТ) возникла из смешения компьютерной (или математической) лингвистики и машинного обучения. Одна из основных проблем АОТ — это модели представления текста: как передать в память компьютера текст так, чтобы сохранялась его структура и семантика?

Существует два принципиально разных подхода к решению этой проблемы: линейно-алгебраическая векторная модель и вероятностная языковая модель. Векторная модель в каком-то смысле проще: в ней любой документ представляется вектором частот слов, в него входящих. Именно благодаря этой модели, появившейся в середине 1970-х и до сих пор не утратившей своей актуальности и востребованности, стало возможным использование методов традиционного машинного обучения, таких как случайный лес или метод опорных векторов, и алгоритмов кластеризации — метода k-средних или иерархической кластеризации.

А. А. Марков (1856–1922) — русский математик, в честь которого были названы скрытые математические модели, лежащие в основе традиционных систем распознавания речи.

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

Другая проблема, существующая в АОТ, касается представления смысла слова. В традиционной (когнитивной) лингвистике считается, что смысл слова человек понимает по его контексту, то есть по рядом стоящим словам. Основываясь на этой идее, лингвисты пришли к выводу, что смысл слова представим вектором. В этом случае говорят о векторе контекстов, который показывает, какие слова встречались рядом с данным.

Таким образом, в современной АОТ оперируют тремя конструкциями: векторными моделями документа и слова и языковыми моделями — методами как традиционного, так и глубинного машинного обучения. Принципиальное различие между подходами традиционного и глубинного машинного обучения заключается в том, как задается пространство признаков для описания документов или слов.

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

В случае использования глубинного обучения специализированные внешние ресурсы привлекают редко, и это заметно упрощает работу. Тем не менее, поскольку для обучения нейронной сети все еще нужны очень большие объемы данных, возникает другая проблема, а именно разметка этих данных. Сейчас фактически под каждую частную задачу приходится размечать новые коллекции документов. Процесс разметки предполагает обработку текстов вручную: в каждом предложении аннотаторам нужно выделить слова, которые потом нейронная сеть научится извлекать. Для человека эта задача несложна содержательно, но затратна по времени, поэтому часто разметку ведут на краудсорсинговых платформах, где за сравнительно небольшую компенсацию можно привлечь к разметке множество анонимных аннотаторов, не имеющих профессионального лингвистического образования.

Сегодня большинство исследовательских или практических проектов в области АОТ тем или иным образом использует нейросетевые (необязательно глубинные) технологии. Особенно широкое распространение получили модели распределенных векторов слов, которые позволяют представить смысл слова такими векторами, на которых можно выполнять арифметические операции, например складывать или вычитать. Уже стал классическим пример из работ Томаса Миколова, в которых он продемонстрировал, как на таких векторах решается уравнение «король – мужчина + женщина = королева». Такие уравнения справедливы и для морфологических аналогий, например: «хорошо – хороший + плохой = плохо».

С тех пор не только сложность архитектур, используемых в задачах АОТ, возросла в разы, но и стали использоваться альтернативные парадигмы обучения, например обучение с подкреплением, которое позволяет научить нейронную сеть не предсказывать правильные значения, а вести себя определенным образом (скажем, генерировать тексты определенного жанра или поддерживать длинные диалоги).

По всей видимости, именно из-за отсутствия больших размеченных данных интерес к глубинному обучению пришел в АОТ довольно поздно по сравнению с компьютерным зрением: в 2003 году вышла статья Йошуа Бенджо о нейронных языковых моделях, а в 2011-м — работа Ронана Коллоберта и Джейсона Вестона. В обеих работах были использованы сравнительно простые архитектуры нейронных сетей для решения стандартных задач — предсказания следующего слова в работе Бенджо и определения части речи слова и извлечения именованных сущностей (названий стран и компаний и имен людей)

Другая архитектура, которая показывает стандартные результаты порядка 90% правильных ответов во множестве задач — от выделения именованных сущностей до машинного перевода, — это двуслойная рекуррентная сеть с ячейками длинной краткосрочной памяти (biLSTM). Эта архитектура умеет читать входные предложения справа налево и слева направо и сохраняет в отдельные векторы смысл как каждого индивидуального слова, так и всего предложения. Именно по этим векторам нейронная сеть и принимает решение, является ли, например, слово названием города или фамилией, или учится генерировать перевод на другой язык.

Часто в этой архитектуре используется так называемый механизм внимания: оказывается, что при добавлении к рекуррентным слоям очень простой надстройки можно научить нейронную сеть обращать внимание на важные элементы в предложении. Механизм внимания интересен по двум причинам: во-первых, несмотря на его простоту, его использование дает ощутимый прирост показателей качества, а во-вторых, он помогает понять, как именно идет процесс обучения нейронной сети, и делает его более прозрачным.

Особенности анализа

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

Свертка — специальный вид оператора, ставящий в соответствие нескольким векторам скаляр. Как правило, применяется несколько сверток, а на выходе получается несколько скаляров.
Сверточные нейронные сети пришли в АОТ из компьютерного зрения. Мотивация использования слоя свертки в компьютерном зрении довольно естественная: на изображении, как правило, пиксели похожи по цвету, поэтому говорят о регионах определенного цвета, а не о цвете каждого конкретного пикселя. При работе с текстами слой свертки имеет другую интерпретацию: он помогает найти устойчивые n-граммы, то есть последовательности из n слов, которые значимы для решаемой задачи. Например, для задачи классификации по теме такими n-граммами могут быть термины, названия, устойчивые коллокации.

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

В первом случае для пары предложений нейронная сеть должна решить, одинаковы ли они по смыслу (например, предложения «Сыну Марии 18 лет» и «Он родился в 2000 году, и его маму зовут Мария» одинаковы по смыслу), а во втором — определить, находится ли пара объектов в конкретном отношении (например, находятся ли в отношении «часть—целое» слова «двигатель» и «машина» в предложении: «После мойки машины двигатель перестал заводиться»).

Сверточные нейронные сети

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

1.      Стандартная задача классификации: по вектору предложения определить, к какому классу относится документ.

2.      Решить локальную задачу для каждого слова: например, понять, является ли слово частью именованной сущности, предсказать следующее слово, определить часть речи слова.

3.      Раскодировать вектор предложения, вычисленный (или закодированный) другой нейронной сетью, то есть, например, сгенерировать ответ на вопрос или предложение на другом языке.

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

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

До последнего времени эти архитектуры редко использовались для работы с текстами. Причина вполне проста: текст — это набор дискретных признаков, то есть слов или даже букв. Несмотря на то что каждое слово или букву можно представить вектором, состоящим из чисел, эти числа нельзя немного поменять и получить другое слово или другую букву. За последние пару лет появилось множество исследовательских проектов, посвященных адаптации этих архитектур для работы с текстовыми данными.

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

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

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

При использовании глубинного обучения в АОТ особенно остро ощущается проблема переноса обучения: нейронная сеть, обученная решать определенную задачу на одном корпусе текстов, может не справиться с той же самой задачей на другом корпусе. К сожалению, обученные на хороших, академических корпусах нейронные сети могут показывать очень слабые результаты на практике, и дело не в плохой архитектуре или самой идеологии, а в том, что реальные пользовательские тексты далеки от тех, которые были использованы при обучении сети.

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

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

Применение и перспективы

Очевидно, что в академических разработках глубинное обучение занимает центральное место. Почти в каждой статье, опубликованной в сборниках ведущих лингвистических конференций, так или иначе используются нейросетевые методы. Иногда их использование полностью оправдано, иногда выглядит довольно комично: утверждается, что использование десятка или двух дополнительных слоев приводит к приросту показателей качества решения задачи порядка десятых или сотых процента.

Тем не менее глубинное обучение проникает и в индустриальные разработки, связанные с обработкой речи или текста. Например, машинный перевод Google,Microsoft и «Яндекс» основан на использовании нейросетевых технологий, практически все поисковики, персональные помощники или чат-боты тем или иным образом используют нейронные сети. В любой задаче, где необходимо классифицировать тексты, будь то фильтрация спама, определение мошенничества или кредитный скоринг, определение настроения текста или даже склонности автора текста к депрессии, могут быть использованы нейросетевые технологии.

В 2011 году суперкомпьютер IBM Watson, оснащенный вопросно-ответной системой искусственного интеллекта, одержал победу над людьми в телевикторине Jeopardy! (российский аналог — «Своя игра»). Во время игры Watson не имел доступа к интернету.

Более структурированные тексты, например истории болезней, легче обрабатывать и анализировать с помощью нейронных сетей, поскольку связи между словами в них более очевидны. Система IBM Watson, известная победой над человеком в Jeopardy, на самом деле используется как помощник диагноста: она ищет похожие по различным параметрам истории болезни и подсказывает несколько возможных вариантов диагноза.

Отдельное направление использования нейронных сетей — это генерация текстов. Она применяется в самых разных ситуациях (например, когда нужна сокращенная версия текста, его реферат или упрощенная версия с использованием минимума терминов, понятная непрофессионалу). Автоматически может быть сгенерирована подпись к изображению или даже описание пространства для слабовидящих (такое описание компьютер потом прочитает тоже сам). Те же технологии используются для преобразования вопроса, заданного на естественном языке, в запрос на SQL или другом языке программирования.

Особенность таких задач заключается в том, что на них не существует единственного правильного ответа, а даже если бы он и был, то составить обучающие данные было бы невероятно дорого. Как решать такие задачи, пока непонятно, один из возможных сценариев — это использование обучения с подкреплением.

Между использованием нейронных сетей в академических и индустриальных условиях есть определенные различия: в индустрии нейронные сети больше воспринимаются как черный ящик со множеством «ручек» — параметров, которые можно как-то покрутить, тем самым изменить качество решения задачи. На вход этому ящику подают множество размеченных текстов, а на выходе получают решение задачи.

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

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