Natural Language Processing (NLP), обработка естественных языков, — это наука на стыке искусственного интеллекта и компьютерной лингвистики. И хотя термин этот не настолько популярен сегодня, как Big Data или машинное обучение, все мы сталкиваемся с достижениями NLP каждый день: автоматическим переводом, автозаменой в телефоне, чат-ботами, системами рекомендаций, различными агрегаторами и так далее. Как с помощью методов NLP предсказывать исход выборов, совершенно не разбираясь в политике, или предупреждать эпидемию гриппа, не являясь врачом-эпидемиологом, рассказывает Дарья Смирнова, студентка кафедры системного анализа и управления МФТИ.

Машинный перевод

Машинный перевод с русского языка на английский стал первым в истории применением NLP. Это произошло в 1954 году. В основе переводчика лежала довольно простая система из всего шести грамматических правил и словаря с 250 записями. Система была специализированной: в качестве предметной области для перевода тогда была выбрана органическая химия. В торжественной обстановке в компьютер на перфокартах вводились предложения вроде «Обработка повышает качество нефти», «Командир получает сведения по телеграфу», и машина выводила их перевод, напечатанный транслитом. Демонстрация была широко освещена в СМИ, а сама технология воспринята как успех. Тем не менее, когда после десяти лет значительных улучшений качества машинного перевода достичь не удалось, инвестирование в эту область было сильно урезано.

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

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

Анализ настроений (Sentiment Analysis)

Задача такого анализа — идентифицировать в тексте субъективную информацию. Это может быть, например, мнение о только что вышедшем фильме или вызванное им эмоциональное состояние. Компании используют анализ настроений, чтобы быть в курсе своей репутации. С его помощью легко проверить, довольны ли клиенты товарами или услугами. Анализируя твиты на политические темы, можно даже научиться предсказывать исход выборов. Twitter — невероятно богатый источник данных для анализа настроений. Это легкодоступная, по большей части субъективная информация, появляющаяся в режиме реального времени. А поскольку подавляющая часть твитов еще и снабжается хэштегами, у исследователей отпадает необходимость вручную размечать данные на категории. То есть, например, если мы хотим проанализировать, что пользователи думают о новом альбоме Radiohead, достаточно просто отфильтровать твиты по хэштегам в духе #radiohead и #newalbum.

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

Тем не менее в анализе настроений есть несколько неочевидных проблем, одна из них — множество значений. Предположим, компания выпустила новую модель телефона. Твит о том, что этот телефон light-weighted (легкий), без сомнений, несет положительный оттенок. Но что, если это слово (а его также можно перевести как «несерьезный», «поверхностный») употребить в отношении, скажем, известного политика или новой книги? Так себе комплимент.

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

Word2Vec: превратим слово в вектор

Еще в 1957 году английский лингвист Джон Руперт Ферс сказал: «Лингвистические единицы, встречающиеся в схожих контекстах, имеют близкие значения». Именно по этому принципу сегодня работает Word2Vec. Он собирает статистику по совместному появлению слов в фразах, после чего с помощью нейронных сетей снижает их размерность и выдает на выходе компактные векторные представления слов, в максимальной степени отражающие их отношения в обрабатываемых текстах. Word2Vec охватывает большое количество лингвистических закономерностей. Оказывается, линейные операции над словами-векторами соответствуют семантическим преобразованиям!

Вычисляя косинусное расстояние между словами-векторами, мы легко сможем найти слова, которые очень часто встречались в сходном контексте, то есть своего рода синонимы. Однако нужно помнить, что эта синонимичность верна только внутри текстов, родственных по тематике тем, на которых Word2Vec был обучен. Нельзя натренировать нейросеть на «Игре престолов», а полученные векторные представления использовать на текстах из кулинарных блогов (и удивляться, почему вектор слова «лук» находится так далеко от вектора «чеснок», но зато так близко к «арбалету»).

Классификация текстов

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

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

Чтобы улучшить качество отбора, можно наравне с «мешком слов» использовать N-граммы (биграммы, триграммы и так далее): так в NLP называют сочетания из вектора N тех слов, которые часто встречаются вместе. Это не обязательно фразеологизмы и популярные словосочетания в духе «точка зрения» или «красное вино». Это любые пары (тройки, четверки, в зависимости от N) слов, которые в данном конкретном тексте часто идут одно за другим. Задачи классификации в NLP не ограничиваются разделением текстов по темам. Аккуратно подбирая признаки, можно по стилю текста угадывать автора произведения, то есть классифицировать тексты по авторам. Автоматическое определение языка — следующий пример классификации, решаемой NLP.

Автоматическое определение языка

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

Но как? Неужели Google-переводчик за секунды пролистывает все словари на всех языках мира, чтобы только в одном из них найти запрашиваемое слово? Тоже вариант, но такой огромный словарь, во-первых, занимает огромное количество памяти, а во-вторых, его необходимо постоянно поддерживать, дополняя новыми словами. На деле же все можно устроить гораздо проще. И здесь мы снова сталкиваемся с N-граммами. Каждый язык имеет свой набор наиболее характерных сочетаний букв в словах, и именно по этим сочетаниям современные переводчики и производят идентификацию языка.

Тематическое моделирование: LDA

Представим, что у нас есть огромная база каких-то текстов и мы бы очень хотели разбить их по темам. При этом про сами тексты мы не знаем вообще ничего: ни количество тем, ни сами темы — мы не имеем представления вообще ни о чем. Если в задачах классификации все тексты из обучающей выборки были размечены (то есть мы знали категорию каждого из них), то теперь мы встретились лицом к лицу с задачей кластеризации текстов. Она широко применяется при построении, например, рекомендательных систем: чтобы посоветовать человеку новую статью, нужно знать, какой тематикой он интересовался до этого, то есть тексты из какого кластера он читал. Для решения задачи кластеризации текстов существует сильный инструмент — латентное размещение Дирихле (Latent Dirichlet Allocation, LDA). Эта модель порождающая: она рассматривает каждый текст как смесь тем, где каждое слово может быть порождено одной из тем в этой смеси. Проще говоря, мы сначала кидаем кубик-документ, определяя тему для каждого слова, а потом вытаскиваем слово из соответствующего «мешка».

К примеру, модель может иметь тематики, которые классифицируются как САТrelated (относящиеся к кошкам) и DOGrelated (относящиеся к собакам). Тематика обладает вероятностями генерировать различные слова, такие как «мяу», «молоко» или «котенок», которые можно было бы классифицировать как CAT_related. Слова, не обладающие особой значимостью (к примеру, служебные слова), будут обладать примерно равной вероятностью в различных тематиках.

Что дальше

В 1950-х вышла статья Алана Тьюринга «Computing Machinery and Intelligence», в которой впервые упоминается знаменитый тест Тьюринга. Компьютер проходит этот тест, если может поддержать диалог с человеком на таком уровне, что тот не заподозрит, что разговаривает с машиной. Основной целью NLP можно считать как раз создание такой системы, по сути искусственного интеллекта — системы, которая позволила бы человеку получать необходимую информацию, ничего при этом не программируя, а обращаясь к компьютеру на своем естественном языке. Сегодня мы убедились, что многие подзадачи уже успешно решаются. И хотя вряд ли можно назвать современных чат-ботов разумными, NLP быстро эволюционирует: ранние методы основывались на правиловых подходах, затем задачи стали успешно решаться методами машинного обучения. Нейросети показали еще лучшие результаты, и сегодня специалисты считают, что будущее обработки текстов — за Deep Learning.

Не пропустите лекцию Дарьи: