Обработка естественного языка включает в себя распознавание и генерацию речи, классификацию, экстракцию знаний из текстов и другие действия, направленные на понимание текстов с целью наполнения баз знаний, формирования ответов на вопросы и ведения диалога. Сама задача обработки текстов впервые была рассмотрена в пятидесятых годах в работах американского лингвиста Ноама Хомского по грамматике естественного языка, в которых была описана ключевая парадигма компьютерной лингвистики — контекстно-независимая грамматика. Первые подходы к глубокой обработке текстов обычно сводились к разбору языка с применением такой грамматики, а также путем перевода из дерева разбора в некоторое логическое представление знаний с помощью свода правил и специально заготовленного лексикона. После этого логическое представление можно было добавить в базу знаний и выполнять над ней разного рода операции, отвечать на вопросы, проверять утверждения и т. п. Однако при попытках практического применения этого подхода возникали сложности, связанные в том числе с необходимостью учитывать общепринятые (то есть элементарные, базовые) знания о мире. Например, интеллектуальный ассистент планирования поездки должен обладать большим количеством вроде бы примитивных данных: ему надо понимать, что ночью люди спят (чтобы не планировать на ночь какие-то переезды), что в северных морях зимой большинство людей не купаются и т. д. Все эти сведения надо было как-то хранить и учитывать при принятии решений, и в 1984 году стартовал проект CYC (от английского encyclopedia) по созданию большой базы общих знаний и разработке приемлемого механизма формирования выводов. Проект существует до сих пор, но по сути провалился — лишь немногие исследовательские разработки используют сегодня эту базу знаний.

В начале 90-х годов стали развиваться методы машинного обучения и одновременно был сделан ряд работ по статистической лингвистике. В машинном обучении отлично себя показали алгоритмы классификации для различных задач, связанных с обработкой текстов: детекция спама, сортировка документов по тематикам, выделение именованных сущностей. Появилась область тематического моделирования, в которой документы считаются порождением некоего вероятностного процесса и состоят из смеси тем. В компьютерной лингвистике определение частей речи стало высокоточным благодаря таким статистическим методам, как скрытые цепи Маркова и модели максимальной энтропии. Появились парсеры на основе вероятностных контекстно-независимых грамматик, а в корпорации IBM прошел масштабный проект по статистическому машинному переводу. Наконец, были заложены основы глубокого обучения (deep learning), которое только недавно дало первые ростки, обусловленные прогрессом в области высокопроизводительных систем и появлением больших объемов данных, используемых для обучения. Глубокое обучение — обучение многоуровневых («глубоких») нейронных сетей на больших объемах данных, позволяющих исключить работу по созданию признаков для машинного обучения, предоставляя возможность одновременного обучения выделению признаков и обучения непосредственно самой задаче.

В 2010 году была предложена модель лексикализованной вероятностной грамматики, которая позволила повысить точность грамматического разбора до 93%, что, конечно, далеко от идеала. Точность разбора — это процент правильно построенных грамматических связей, и вероятность того, что длинное предложение будет разобрано правильно, обычно очень низка. Одновременно, благодаря новым алгоритмам и подходам, включая глубокое обучение, увеличилась скорость грамматического разбора. Кроме того, практически все ведущие алгоритмы и модели стали доступны широким массам исследователей, и, наверное, самой известной работой в области глубокого обучения для NLP (Natural Language Processing) стал алгоритм Томаса Миколова [1].

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

Пакеты для NLP и глубокого обучения
Пакеты для NLP и глубокого обучения

 

Представления слов

Традиционно слова предложения обрабатывались как элементы множества слов из словаря, но при этом возникали серьезные сложности: если учитывать различные разговорные формы, например технический жаргон, то объем слов, даже в английском языке, становился огромным и составление полного семантического словаря для широкой области применения — задачей весьма трудоемкой. Большую известность получил алгоритм word2vec, входящий во многие стандартные пакеты машинного обучения и обучаемый качественным представлениям слов на больших неразмеченных корпусах (множестве разнообразных текстов по разным темам, написанных в различных жанрах и стилях). В отличие от традиционных представлений слов, здесь используется нейровероятностная модель языка (отсюда и связь с глубоким обучением) — каждое слово представляется вектором из вещественных чисел в маленьком (относительно размера полного словаря) пространстве, например размерностью в 300 измерений. Изначально векторам присваиваются случайные значения. Далее в процессе обучения для слова подбирается вектор, максимально похожий (в случае данного алгоритма по мере скалярного произведения) на векторы других слов, которые встречаются в похожих контекстах. В качестве контекста берется небольшое окно предшествующих и последующих слов, например в пять слов. Этот достаточно простой подход дает интересные результаты. Во-первых, близкие по мере скалярного произведения или косинуса слова действительно часто семантически близки. Во-вторых, оказывается, что многие интересные для обработки естественного языка отношения закодированы в векторы. Знаменитый пример: если от вектора слова «Париж» отнять вектор слова «Франция» и прибавить вектор «Италия», то получится вектор, очень близкий к вектору «Рим» — отношение «столица» оказалось закодированным в векторы слов.

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

Дополнительные отношения (признаки), которым обучается word2vec, могут оказаться полезными для задач обработки текстов, но, к сожалению, непонятно, какие отношения действительно содержатся в векторах после обучения и насколько надежно они закодированы — выполняются ли они для всех сущностей отношений. Правда, имеются методы, которые позволяют дополнять векторные представления слов онтологиями, гарантирующими, что отношения будут надежно закодированы в векторы. Например, в статье [2] исследователи предложили метод обучения векторов, в котором любые отношения и таксономии надежно кодируются в векторные представления.

Стандартный алгоритм word2vec не позволяет решить вопросы, связанные с омонимией. Например, в английском языке примерно в 40% случаев употребляются омонимичные слова, имеющие разные смыслы при одном написании («машина»: автомобиль, компьютер, механическое устройство). Это очень сложная задача при обработке естественного языка, и для ее решения предложена модификация алгоритма word2vec с целью автоматического определения омонимов и создания отдельных векторов для отдельных смыслов, а также процедуры определения правильного смысла омонима относительно заданного контекста. В работе [3], выполненной российскими исследователями, описан метод обучения векторов для слов, которые могут быть омонимичными. В отличие от других методов, этот алгоритм обучается количеству смыслов разных омонимичных слов.

Как известно, большинство методов обработки естественного языка успешно используют только представления слов, игнорируя синтаксис и семантику, которые можно вывести из синтаксической структуры предложений. Такая модель представления текстов называется «bag of words» — простой набор слов без учета их порядка. Например, в случае векторных представлений можно объединить в кластеры векторы слов корпуса, на которых тренируется модель, и использовать такие кластеры для задач простой классификации. Но если задача состоит в извлечении более качественных семантических представлений, то понадобятся инструменты обработки текстов, работающие с синтаксической структурой предложений или хотя бы не игнорирующие порядок слов в предложении. Например, если требуется анализировать отзывы в социальных медиа о гостиницах, оставленные их клиентами, то можно встретить такое предложение: «Отель приятный, но бар — прокуренный». Без анализа структуры предложения, мы не сможем понять, к какому слову относится каждое прилагательное.

Предложения, синтаксис и семантика

Обычно при работе с предложениями бывает полезно восстановить их синтаксическую структуру. Инструменты работы с синтаксисом заметно прогрессировали за последние годы — лексикализированные вероятностные грамматики значительно повысили качество синтаксического разбора, а более удобные для многих случаев грамматики зависимостей достигли качества, достаточного для решения большого класса задач обработки текстов. Кроме того, за последние несколько лет в сотни раз увеличилась эффективность алгоритмов, восстанавливающих синтаксис. Например, если еще недавно грамматический парсер Стэнфорда обрабатывал несколько предложений в секунду на компьютере стандартной архитектуры, то сегодня можно за минуту получить грамматику составляющих и грамматику зависимостей для всего корпуса Penn Treebank (1 млн лингвистически размеченных предложений, которые обычно используются для обучения).

Тем не менее при грамматическом разборе по-прежнему возникают серьезные проблемы с точностью. Во-первых, многое здесь зависит от качества распознавания частей речи, которое должно быть очень высоким (97–98%), однако в длинных предложениях очень часто можно встретить неправильно определенную часть речи, что приводит к ошибкам разбора. Во-вторых, сам грамматический разбор дает точность примерно 90–93% (процент правильно определенных отношений), а это, в свою очередь, означает, что в длинном предложении практически всегда будут ошибки разбора. Например, при точности разбора 90%, вероятность разбора предложения длиной 10 слов без единой ошибки составит всего 35%. Есть надежда на улучшение в ближайшее время качества разбора, однако часто правильный грамматический разбор подразумевает понимание семантики предложения, но, например, в английском языке это нередко вызывает затруднения. Так, в предложении «Не saw a man with a hammer» может быть два разных грамматических разбора в зависимости от того, считаем ли мы, что человека увидели с помощью молотка или увидели человека с молотком. Конечно, если требуется максимально точный грамматический разбор, то имеет смысл оставлять несколько наиболее вероятных вариантов, а затем определять правильный по совокупности различных факторов, в том числе семантических.

Методы глубокого обучения предоставляют возможность другого подхода к работе с предложениями — моделирования предложения как последовательности векторов, полученных методом из класса word2vec, и использования его в алгоритмах машинного обучения. Стандартные алгоритмы машинного обучения работают с фиксированным набором атрибутов, и их нельзя приспособить к такой модели, но с ней отлично справляются рекуррентные нейронные сети, которые на входе принимают одно слово в векторном представлении и имеют несколько внутренних уровней, а на выходе строят классификатор или регрессор. Но, в отличие от обычных нейросетей, внутренние уровни рекуррентной сети (а иногда и верхний уровень) подключены обратно в сеть, то есть состояние сети, в которое она перешла на предыдущем слове, будет передано в сеть как дополнительный вход на последующем слове. Таким образом, у нейросети появляется «память», позволяющая ей последовательно обрабатывать слова из предложения и делать предсказания отдельно относительно каждого слова или всего предложения сразу. Иначе говоря, сети последовательно предоставляется одно слово предложения за другим, а сеть использует свои предыдущие состояния для определения текущего шага. Однако на практике простые рекуррентные сети работают не очень хорошо из-за того, что память о предыдущих словах предложения быстро теряется при тренировке и эксплуатации сети. Поэтому обычно используются специальные элементы памяти — LTSM (Long Term Short Memory), представляющие собой множество нейронов и управляющих элементов, которые определяют, когда следует записывать, читать и очищать память. Эти элементы позволяют памяти не меняться на протяжении длительного последовательного вычисления и дают возможность правильно атрибутировать ошибку при обучении. Управляющие элементы также обучаются в процессе обучения нейросети.

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

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

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

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

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

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

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

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

Текст из нескольких предложений

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

***

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

Литература

  1. Tomas Mikolov et. al. Efficient Estimation of Word Representations in Vector Space, arxiv.org. URL: http://arxiv.org/pdf/1301.3781.pdf (дата обращения: 18.03.2016).
  2. Chang Xu et. al. RC-NET: A General Framework for Incorporating Knowledge into Word Representations // Proceedings of the 23rd ACM International Conference on Information and Knowledge Management. P. 1219–1228. URL: http://research.microsoft.com/pubs/226869/%5BCIKM2014%5D%20RC-NET.pdf (дата обращения: 18.03.2016).
  3. Sergey Bartunov et. al. Breaking Sticks and Ambiguities with Adaptive Skip-gram. // International Conference on Artificial Intelligence and Statistics (AISTATS), 2016, arxiv.org. URL: http://arxiv.org/abs/1502.07257 (дата обращения: 18.03.2016).
  4. Kai Sheng Tai et. al. Improved Semantic Representations From Tree-Structured Long Short-Term Memory Networks // Association for Computational Linguistics (ACL), 2015. URL: http://nlp.stanford.edu/pubs/tai-socher-manning-acl2015.pdf (дата обращения: 18.03.2016).

Павел Велихов (pavel.velikhov@gmail.com) — директор по науке, компания Toprater.com (Москва).