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

Ещё в начале пути создания виртуальных ассистентов Салют мы, команда NLP R&D SberDevices, поняли, что нужно обучать базовые языковые модели для русского языка, ориентируясь на успешные модели для английского. Опыта в этом, надо сказать, у нас было немного. Прошло два года, и сейчас мы обучили множество моделей, которыми хотим поделиться с вами.

С нашими «гптшками» вы уже знакомы, и про них мы уже рассказывали. Сейчас мы решили расширить наш открытый зоопарк и остальными моделями. Их все легко дообучать и использовать в проме на одной GPU, в том числе в Colab. Мы надеемся, что эти модели будут полезны русскому NLP-сообществу и помогут родиться многим интересным решениям.

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

Все модели размещены в формате PyTorch-Transformers. Вы можете скачать их в HF transformers.

Colab с примерами.

Что нового?


Модели ruT5 — ruBERT — ruRoBERTa для нашего зоопарка русскоязычных архитектур: 
  • sequence2sequence модель (ruT5); 
  • и два encoder’а (ruBERT, ruRoBERTa) в добавление к decoder’у (ruGPT-2, ruGPT-3).

Модели представлены в разных вариациях: base и large. Для ruRoBERTa – только large.



Детали обучения


ruBERT


2019 год, начало эры больших предобученных моделей: RuBERT-base стала первой моделью на базе трансформеров, за которую мы принялись. Мы обучали модель совместно с коллегами из DeepPavlov, так как у них уже была хорошая компетенция в этом вопросе. На тот момент ребята выложили свою модель ruBERT-base, обученную на восьми P100 16GB. Наша идея была в том, чтобы обучить модель с полноценным размером батча и без всяких ограничений, которые накладывали GPU. Тогда в Сбере появились первые DGX-2 с 16 V100 32GB. Мы вместе с Юрой Куратовым из DeepPavlov подготовили датасет, код и запустили обучение на 16 V100. За основу был взят оригинальный код от Google. Училась модель тогда около 7—8 дней. 

  • Детали: ruBERT-base имеет BPE-токенизатор со словарём 120 тыс токенов. В модели 178M весов. 
  • Данные: 30 GB русского текста, в котором была Википедия, новости, часть корпуса Taiga и немного книг. 

На момент обучения русских сетов для скоринга языковых моделей было немного. Основным из них был SberSQUAD. На нём модель показала результаты, близкие к результатам модели коллег из DeepPavlov. Позднее, на RussianSuperGLUE, она показала себя чуть лучше.

Следующей на очереди стояла модель размера «large». Словарь и обучающие данные те же, что и у base-модели. Модель имеет 427M параметров. Мы поменяли конфигурацию модели и запустили обучение на 16 V100: модели large для обучения потребовалось уже 17—20 дней. В последствии эта модель легла в основу модели SBERT наших коллег из смежной команды SberDevices, которую они выложили в открытый доступ.



ruRoBERTa


После обучения ruBERT мы занялись ruRoBERTa. Архитектурно это тот же BERT, обученный на большом корпусе текста, только на задачу восстановления маскированных токенов, на большом батч-сайзе и с токенизатором BBPE от ruGPT-2. 

  • Детали: немного переделали код для обучения из библиотеки Transformers. Обучали мы в итоге модель на 64 GPU Tesla V100 три недели.
  • Данные: мы взяли сет, который использовали для ruGPT-3, и удалили оттуда английский, а также убрали часть грязного Common Crawl. Получилось 250GB текста.



ruT5


К концу 2020 года в нашем зоопарке уже были модели, являющиеся энкодером (ruBERT и ruRoBERTa) и декодером (ruGPT-2, ruGPT-3). Но полноценного трансформера у нас не было, т.е. энкодер + декодер архитектуры в классическом понимании трансформера. 

Выбор пал на модель T5. Оригинальный код для T5 был написан на TensorFlow, и, чтобы обучать модель на нашем кластере, нужно было его переписать. Мы решили сделать свою реализацию denoising-задачи для T5 и обучать на Transformers. Размер словаря сделали таким же, как в оригинальной английской модели. Обучали на всём русском корпусе, что у нас был для ruGPT-3 (Википедия, книги, новости, русский Common Crawl и т. д.). Base-модель обучали на 32 GPU две недели, а large — на 64 GPU три недели.



Оценка моделей


Все наши модели проходят скоринг на стандартных задачах и бенчмарках. В частности, для ruT5, ruRoBERTa и ruBERT мы выбрали RussianSuperGLUE (набор из 9 задач на понимание текста и классификацию) и SberSQUAD (задача ответа на вопрос по тексту). 

На RSG модель ruT5 мы тюнили сразу на все задачи, предварительно их объединив и добавив в начало каждого примера название задания:

  • 'muserc: (1) Американского рэпера Басту Раймса обвинили в умышленном причинении вреда здоровью человека, передает Associated Press...
  • 'rucos: Премьер-министр Украины Алексей Гончарук никогда не ...
  • 'danetqa: Главным среди джучидских государств формально продолжала считаться...

После первого этапа тюнинга — дообучения на трейне сразу всех заданий — мы получили N чекпойнтов. После для каждой задачи мы взяли лучший чекпойнт из N и продолжили тюнить его на трейне этой задачи до наилучшего валидационного скора. Этот способ описан в оригинальной статье по T5. 

Для ruBERT/ruRoBERTa дообучали уже без изысков, как обычно, для каждой задачи отдельно.

В рейтинге RSG лучшей моделью оказалась ruT5-large, а на втором месте — ruRoBERTa-large. Эти скоры были получены в результате одной попытки обучения для T5 и для ruRoBERTa — см. таблицу ниже.


RussianSuperGLUE

Golden Transformer — это решение, основанное на ансамбле (в основном, английских моделей). Коллеги брали задания, переводили их на английский, а затем использовали лучшие английские модели, затюненные на соответствующую задачу на английском SuperGLUE. Предикт этих моделей использовали как признак в модели градиентного бустинга.

Думаем, что можно добиться и более высоких значений, если провести дополнительные эксперименты. На разных заданиях топовые метрики далеко не только у ruT5-large: лучшие single-model решения также есть у ruRoBERTa-large (задача TERRa и DaNetQA). А на некоторых заданиях лучших результатов удалось достичь на few-shot, т. е. без дообучения модели (задача RCB и RuCoS, YaLM от Яндекса). Возможно, дело в необходимости более тонкой подстройки параметров обучения при дообучении. Надеюсь, после публикации наших моделей найдутся коллеги, которые затюнят наши модели по-своему. Мы также продолжаем эксперименты.

Для решения задачи SberSQUAD мы использовали стандартный код из библиотеки Transformers. Прогнали по разу каждую модель с одинаковыми параметрами и получили следующие результаты:

SberSQUAD

Лучший результат показывает модель mT5-large от Google, опередив ruT5-large. Возможно, объяснение здесь в том, что эта модель больше видела разнообразных текстов Википедии, чем наша русская модель. 

  • Уже давно замеченный нами факт: если затюнить модель на бОльшем объёме текстов Википедии, то метрики SberSQUAD растут. 


Все наши модели можно найти в ModelHub HuggingFace Transformers:

Репозиторий с примерами: https://github.com/sberbank-ai/model-zoo

И, конечно, stay tuned!

Комментарии (11)


  1. nikolay_karelin
    15.07.2021 10:24
    +1

    А под какими лицензиями распространяются сами модели (их двоичные файлы)?


    1. Dmitry_zm Автор
      15.07.2021 10:31
      +2

      Apache 2.0


      1. nikolay_karelin
        15.07.2021 13:43

        Спасибо. Почему-то эту информацию бывает кратко сложно найти...


        1. oulenspiegel
          15.07.2021 14:10

          А там же в репе лежит файл «License».


  1. JTDamaja
    15.07.2021 15:14

    Добрый день!
    Отличная статья, и спасибо за открытые модели.
    Один момент, почему-то не удаётся скачать модели ruBERT-base и ruBERT-large, хотя с ruT5-base, ruT5-large и ruRoBERTa всё отлично удаётся.


    1. Dmitry_zm Автор
      15.07.2021 15:16
      +2

      Все чекпойнты в формате pytorch transformers. Может у вас tf используется?

      вот пример кода:

      from transformers import BertForMaskedLM,BertTokenizer, pipeline model=BertForMaskedLM.from_pretrained('sberbank-ai/ruBert-large') tokenizer=BertTokenizer.from_pretrained('sberbank-ai/ruBert-large')

      unmasker = pipeline('fill-mask', model=model,tokenizer=tokenizer)

      unmasker("Привет! Я модель bert. Я много знаю про [MASK] язык.")


      1. JTDamaja
        15.07.2021 15:27
        +2

        Помогло, спасибо!

        Остальное грузил через

        from transformers import AutoModel
        bert = AutoModel.from_pretrained(...

        Такое срабатывало со всеми бертами.

        В любом случае, спасибо за модели и помощь!


  1. Sergey_Kovalenko
    15.07.2021 20:56

    Не мог бы кто-либо помочь математику инди-исследователю?

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

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

    Не мог бы кто-нибудь, кто "в теме" и знаком с соответствующими библиотеками переслать мне txt файлик, в котором первый том войны и мира представлен следующим образом:

    1)Каждое предложение представлено в файле отдельной строкой;

    2)Строка состоит из разделенных табом данных в фигурных скобках {},

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

    Буду признателен за помощь!


  1. averkij
    23.07.2021 16:16

    Зафайнтюнил ruT5 на суммаризацию новостей на датасете Газеты, результаты хорошие. Спасибо за модели!


  1. manefon
    31.07.2021 01:28

    А на каких задачах предобучалась T5?


    1. Dmitry_zm Автор
      03.08.2021 11:59

      Модель обучалась на задаче denoising, как в пейпере описано.