Natural Language Processing. Итоги 2019 и тренды на 2020 +30





Всем привет. С некоторым запозданием я решил опубликовать эту статью. Каждый год я стараюсь подвести итоги произошедшего в области обработки естественного языка (natural language processing). Не стал исключением и этот год.

BERTs, BERTs are everywhere


Начнем по порядку. Если вы не уехали в глухую Сибирскую тайгу или отпуск на Гоа на последние полтора года, то вы наверняка слышали слово BERT. Появившись в самом конце 2018-ого за прошедшее время эта модель завоевала такую популярность, что в самый раз будет вот такая картинка:



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



На картинке показано сравнение виновника торжества (слева) с двумя также прозвучавшими моделями. Справа расположен непосредственный предшественник BERT — модель ELMo.

Лирическое отступление.
image
Именно авторам этой модели мы обязаны захлестнувшим область цунами «улицы Сезам»: в России и СНГ эта детская телепередача не была так популярна, так что вы можете быть не в курсе, но и Elmo, и Bert — имена персонажей оттуда; ну а после того, как все увидели, что так можно, — креатив было не остановить. Дальше стали перебирать уже все имена из этой передачи. Я боюсь, что когда они кончатся, перейдут на Покемонов.

Модель ELMo от Allen AI — в своем роде наследник всего развития области в предыдущие годы — а именно двунаправленная рекуррентная нейронная сеть, плюс несколько новых трюков в придачу. Коллеги из OpenAI решили, что можно сделать лучше. И нужно для этого всего лишь применить представленную за год до этого Google архитектуру Transformer к этой задаче. Полагаю, что за истекшие с тех пор 2,5 года все желающие уже успели с этой архитектурой познакомиться, поэтому не буду останавливаться на ней подробно. Желающих причаститься отсылаю к своему обзору от 2017-ого года.

Назвали они (сотрудники OpenAI) свою модель GPT-2. А потом на этой модели неплохо попиарились. Но оставим это на их совести, и вернемся к нашим баранам, то есть моделям.

Одним из самых важных трюков ELMo стало предобучение на неразмеченном корпусе большого размера. Получилось очень неплохо, и коллеги из Google решили, что можно сделать еще более лучше. Помимо применения архитектуры Transformer (что уже было в GPT-2), BERT, что расшифровывается как Bidirectional Encoder Representations from Transformers, то есть векторные представления из двунаправленного кодировщика на основе архитектуры Transformer, содержал в себе еще несколько важных вещей. Конкретно самой важной стал способ претренировки на большом корпусе.



На картинке показан способ разметки неразмеченных данных. Конкретно показаны сразу два метода разметки. Первый — берется последовательность токенов (слов), например, предложение, и в этой последовательности маскируется один произвольный токен ([MASK]). А модель в процессе обучения должна угадать, что за токен был замаскирован. Второй способ — берется два предложения последовательно или из произвольных мест текста. А модель должна угадать, были ли эти предложения последовательными ([CLS] и [SEP]).

Идея такой претренировки оказалась чрезвычайно эффективной. Ответом от заклятых друзей из Facebook была модель RoBERTa, статья про эту модель называется «устойчиво оптимизированная претренировка BERT». Дальше — больше.

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

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

Маленькие модели


Но хватит про BERT'ов. Есть еще несколько важных трендов. Прежде всего это тренд на уменьшение размера модели. Тот же BERT очень требователен к ресурсам и многие стали задумываться о том, как сохранив (или не очень потеряв) качество, снизить требуемые ресурсы для работы моделей. Коллеги из Google придумали маленький BERT, я не шучу — ALBERT: A little BERT. Можно посмотреть, что маленький BERT даже превосходит своего старшего брата в большинстве задач, имея при этом на порядок меньше параметров.



Другой подход к той же штанге совершили опять же мои коллеги из Гонконга. Они придумали крошечный BERT — TinyBERT. (Если вы в этом месте подумали, что названия стали повторяться, я склонен с вами согласиться.)



Принципиальное отличие двух вышеназванных моделей состоит в том, что если ALBERT использует хитрые трюки для уменьшения оригинальной модели BERT, например, parameter sharing и уменьшение размерности внутренних векторных представлений через матричную декомпозицию, то TinyBERT использует принципиально другой подход, а именно дистилляцию знаний, то есть существует маленькая модель, которая учится повторять за своей старшей сестрой в процессе обучения.

Маленькие корпуса


Последние годы (примерно с 1990, когда появился Интернет), шло нарастание доступных корпусов. Потом появились алгоритмы, которые стали способны такие большие корпуса обрабатывать (это то, что мы называем «революцией глубокого обучения», это уже года с 2013). И, как следствие, стало восприниматься нормально, что для получения хорошего качества в какой-то задаче, необходимы огромные массивы размеченных данных — корпусов текстов в нашем случае. Например, типичные корпуса для обучения задачи машинного перевода сегодня измеряются миллионами пар предложений. Достаточно давно стало очевидно, что для многих задач невозможно в разумные сроки и за разумные деньги собрать такие корпуса. Долгое время было не очень понятно, что с этим делать. Но в прошлом году на сцену вышел (кто бы вы думали?) BERT. Эта модель смогла предобучаться на больших объемах неразмеченных текстов, а уже готовую модель было легко адаптировать под задачу с небольшим корпусом.



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

Новые тренды


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



Другой важный тренд — область заново учится работать с длинными текстами. С 70-ых годов сообщество имеет способы работы с текстом произвольной длины — взять тот же TF-IDF. Но у этих моделей есть свой предел качества. А вот новые модели глубокого обучения не были способны работать с длинными текстами (тот же BERT имеет ограничение в 512 токенов длины входного текста). Но за последнее время появилось, как минимум, две работы, которые с разных сторон подходят к проблеме длинного текста. Первая работа от группы Руслана Салахутдинова под названием Transformer-XL.



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

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

На этом я бы хотел закончить обзор произошедших перемен и наметившихся трендов. Посмотрим, что будет в этом году, уверен, что много интересного. Видеозапись моего выступления на эту же тему на Data Ёлке:


P.S. У нас скоро будет еще несколько интересных анонсов, не переключайтесь!

Вы можете помочь и перевести немного средств на развитие сайта



Комментарии (0):