XLNet против BERT



    В конце июня коллектив из Carnegie Mellon University показал нам XLNet, сразу выложив публикацию, код и готовую модель (XLNet-Large, Cased: 24-layer, 1024-hidden, 16-heads). Это предобученная модель для решения разных задач обработки естественного языка.

    В публикации они сразу же обозначили сравнение своей модели с гугловым BERT-ом. Они пишут, что XLNet превосходит BERT в большом количестве задач. И показывает в 18 задачах state-of-the-art результаты.

    BERT, XLNet и трансформеры


    Один из трендов последнего времени в глубоком обучении — это Transfer Learning. Мы обучаем модели решать несложные задачи на огромном объеме данных, а затем используем эти предобученные модели, но уже для решения других, более специфических задач. BERT и XLNet — это как раз такие предобученные сети, которые можно использовать для решения задач обработки естественного языка.

    Эти модели развивают идею трансформеров — доминирующего на данный момент подхода к построению моделей для работы с последовательностями. Очень подробно и с примерами кода о трансформерах и механизме внимания (Attention mechanism) написано в статье The Annotated Transformer.

    Если взглянуть на General Language Understanding Evaluation (GLUE) benchmark Leaderboard, то сверху можно увидеть много моделей, основанных на трансформерах. Включая обе модели, которые показывают результат лучше человека. Можно сказать, что с транформерами мы наблюдаем мини-революцию в обработке естественного языка.

    Недостатки BERT


    BERT является автокодировщиком (autoencoder, AE). Он скрывает и портит некоторые слова в последовательности и пытается восстановить изначальную последовательность слов из контекста.

    Это приводит к недостаткам работы модели:

    • Каждое скрытое слово предсказывается в отдельности. Мы теряем информацию о возможных связях между маскированными словами. В статье приводится пример с названием «New York». Если мы попытаемся независимо предсказывать эти слова по контексту, мы не будем учитывать связь между ними.
    • Несоответствие между фазами тренировки модели BERT и использования предобученной модели BERT. Когда мы тренируем модель — у нас есть скрытые слова ([MASK] токены), когда мы используем предобученную модель, мы на вход ей уже такие токены не подаем.

    И все же, несмотря на эти проблемы, BERT показывал state-of-the-art результаты на многих задачах обработки естественного языка.

    Особенности XLNet


    XLNet — это авторегрессионная модель (autoregressive language modeling, AR LM). Она пытается предсказать следующий токен по последовательности предыдущих. В классических авторегрессионных моделях эта контекстная последовательность берется независимо из двух направлений исходной строки.

    XLNet обобщает этот метод и формирует контекст из разных мест исходной последовательности. Как он это делает. Он берет все (в теории) возможные перестановки исходной последовательности и предсказывает каждый токен в последовательности по предыдущим.

    Вот пример из статьи, как предсказывается токен x3 из различных перестановок исходной последовательности.



    При этом контекст — это не мешок слов. Информация об изначальном порядке токенов также подается в модель.

    Если проводить аналогии с BERT-ом, то получается, мы не маскируем токены заранее, а как бы используем разные наборы скрытых токенов при разных перестановках. При этом исчезает и вторая проблема BERT-а — отсутствие скрытых токенов при использовании предобученной модели. В случае XLNet на вход поступает уже вся последовательность, без масок.

    Откуда XL в названии. XL — потому что XLNet использует Attention-механизм и идеи из модели Transformer-XL. Хотя злые языки утверждают, что XL намекает на количество ресурсов, необходимых для обучения сети.



    И про ресурсы. В твиттере выложили расчет, во что обойдется обучение сети с параметрами из статьи. Получилось 245000 долларов. Правда потом пришел инженер из Гугла и поправил, что в статье упоминаются 512 чипов TPU, которых по четыре на устройстве. То есть стоимость уже 62440 долларов, или даже 32720 долларов, если учитывать 512 ядер, которые тоже упоминаются в статье.

    XLNet против BERT


    К статье выложили пока только одну предобученную модель для английского языка (XLNet-Large, Cased). Но в статье упоминаются эксперименты и с меньшими по размеру моделями. И во многих задачах модели XLNet показывают лучшие результаты по сравнению с аналогичными моделями BERT.



    Появление BERT и особенно предобученных моделей привлекло большое внимание исследователей и привело к огромному числу связанных с ним работ. Теперь вот XLNet. Интересно посмотреть, станет ли он на какое-то время стандартом де-факто в NLP, или наоборот подстегнет исследователей в поиске новых архитектур и подходов для обработки естественного языка.
    Open Data Science
    187,02
    Крупнейшее русскоязычное Data Science сообщество
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 10

      +5
      Спасибо, интересно. Но из рисунков не очень понятно, как именно производятся «разные перестановки последовательности» и как именно работает Attention-механизм Transformer-XL. Что понимается под перестановкой, если у каждого токена кодируется его положение в строке и оно, как я понял, неизменно? Было бы неплохо как-то на пальцах или на примере пояснить.
        0

        Перестановки — это как раз там самое непонятное место. Да, поскольку положения токенов не меняется, то получается, мы пытаемся предсказать целевой токен по всем возможным сочетаниям остальных токенов.


        Но все возможные сочетания — это в теории. На практике же они используют ограничения. Для этой вот предобученной сетки они брали сочетания длины от (255 — 85) до 255. Это явно у них не прописано, но если я правильно понял, это означают их параметры --perm_size и --num_predict.

          +1
          Даже 255!/(255-85)! — это слишком много. При этом не понятно, зачем им брать эквивалентные наборы (те же токены, но в другой последовательности выбранные) — они же дают тот же эффект. Т.е. по-хорошему, нужно ещё на 85! разделить и получить C(n,k), но и это, конечно, очень много.
        +1
        Спасибо, получилось кратко и ясно, круто.
        С появлением BERT все NLP архитектуры стали строить на ячейках трансформерах, неужели архитектуры на двунаправленых слоях LSTM ячеек изжили себя? Есть ли информация у автора, о применении предобучения по типу BERT или XLNet для рекуррентных сеток? Я использовал архитектуру FLAIR На задаче выделения именованных сущностей неплохие результаты показывает.
        Все таки тип предобучения или тип используемых базовых ячеек дает такие результаты?
        +1
        Есть мнение, что большая точность XLNet может быть обусловлена большим размером корпуса при обучении и улучшенной сетью Transformer-XL, по сравнению с обычным Transformer в BERT. Но подход с этими перестановками тоже заслуживает внимания. Получается что-то вроде двунаправленного контекста как в автокодировщике, но в авторегрессинной модели. Автокодировщики вроде BERT хороши тем, что учитывают сразу всю строку, и поэтому лучше работают с общими языковыми задачами (лучше дообучаются под новые необычные задачи). Но авторегрессионные модели вроде GPT-2 более естественно строят предложения, так как действуют последовательно слово за словом. XLNet, по идее, совмещает достоинства обоих подходов.
          0

          Да, есть такое мнение. Но вроде как в экспериментах с XLNet-Base датасет брали тот же, на котором тренировали и BERT-Base. И там тоже XLNet-Base показывает лучшие результаты.


          Меня в этой истории с перестановками интересует, насколько более затратно обучить XLNet по сравнению с BERT.

          0
          Подскажите пожалуйста, а как тренировать эту сеть без предобученной модели, с нуля? Пример на githab есть, но там вроде как все действия происходят с предобученной моделью.
            0

            Ну вот, там раздел "Pretraining with XLNet" в Readme.


            Препроцессинг — в data_utils.py, само обучение — train_gpu.py. Еще можно посмотреть пояснения к параметрам обучения в пайторчевом репозитарии.


            Только, вероятно, это очень затратный по ресурсам процесс, наверное затратнее чем для BERT-a. Что-то не видно, чтобы кто-то что-то еще натренировал. Да и они сами пока только одну натренированную сетку выложили.

            0

            Ну вот, там раздел "Pretraining with XLNet" в Readme.


            Препроцессинг — в data_utils.py, само обучение — train_gpu.py. Еще можно посмотреть пояснения к параметрам обучения в пайторчевом репозитарии.


            Только, вероятно, это очень затратный по ресурсам процесс, наверное затратнее чем для BERT-a. Что-то не видно, чтобы кто-то что-то еще натренировал. Да и они сами пока только одну натренированную сетку выложили.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое