Bert reader device что это

Обновлено: 03.07.2024

BERT - это нейросеть, созданная Google в 2018 году и уже доказавшая преимущества в ряде практических задач. Используя её можно решать целый ряд задач: анализировать текст, отвечать на вопросы, создавать переводчики, выявлять спам, создавать системы предиктивного ввода текста и т.д. В октябре 2019 года Google добавила нейронную сеть BERT в ядро алгоритмов поиска Google для английского языка, а в декабре – для более чем 70 языков. Новое обновление поиска получило название BERT и затронуло 10% всех поисковых запросов.

1. BERT - нейронная сеть, созданная Google

Научить компьютеры понимать естественный текст, как это делает человек, является интересной и крайне сложной задачей. Ведь в естественном языке много нюансов, разобраться в которых с трудом могут даже люди. В информатике есть целый подраздел Natural Language Processing (далее – NLP) – методы обработки естественного языка. NLP позволяет применять алгоритмы машинного обучения для текста и речи.

Сегодня у многих из нас есть смартфоны с распознаванием речи – в них используется именно NLP. Также, многие люди используют ноутбуки и компьютеры со встроенным в ОС распознаванием речи.

Итак, в 2018 году Google анонсирует новейшую нейронную сеть BERT (Bidirectional Encoder Representations from Transformers). BERT использует Transfer learning (трансферное обучение), что позволяет использовать его основную языковую модель, дополнительно обучив её под свои конкретные задачи, самым разнообразным компаниям. Это означает, что обучение нейронной сети происходит в два этапа. Сначала долго и дорого её обучают на огромном корпусе в миллиарды слов (это называется pre-training). На втором этапе сеть можно быстро дообучить под разные задачи.

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

В Google разработали уникальную систему претренинга для обеспечения нейросети более богатыми правилами – не только словарём, но и синтаксисом с контекстом. Исследователи начали обучать нейросети на более общей задаче под названием языковое моделирование, скармливая нейросетям огромные объёмы текста – миллиарды слов, расставленных в грамматически корректные предложения. После этого нейросеть должна уметь предсказать следующее слово в тексте самостоятельно.

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

Каждый из трёх этих составляющих – глубокая модель языка с претренингом, внимание и двунаправленность – существовали до BERT по отдельности. Но до тех пор, пока Google не выпустил свой алгоритм в конце 2018 года, никто не скомбинировал их таким успешным образом.

2.Внедрение BERT в основной алгоритм поиска Google

В октябре 2019 года Google «выкатил» обновление ядра алгоритмов поиска под названием BERT. Отныне, одноименная нейросеть будет работать в качестве составляющего ядра алгоритмов поиска. По заверению Google - это крупнейшее обновление ядра со времен RankBrain.

Многие вебмастера не заметили скачков трафика после внедрения нового алгоритма, хотя Google заверяет, что оно коснулось 10% всех поисковых запросов. Чтобы понять, почему вебмастера не ощутили значительных колебаний трафика, еще раз рассмотрим как работает BERT и на какие запросы он влияет.

Типичный вебмастер, в основном, сфокусирован на СЧ или даже ВЧ запросы, которые достаточно коротки (1-3 слово). BERT сфокусирован на обработке длинных запросов. Именно поэтому большинство вебмастеров пока не замечают колебания, которое оказал BERT на выдачу.

Итак, BERT лучше понимает и интерпретирует НЧ и микро-НЧ запросы, длинный хвост запросов. В частности, - это могут подтвердить дорвейщики, которые ощутили резкие колебания трафика и некоторые вебмастера, плотно работающие с 3-5-словниками, что характерно для продуктовых партнерок, например работающих под Amazon.

Необходимо понимать, что BERT – это не фактор ранжирования. Непосредственно на ранжирование органической выдачи она не влияет. Однако, нейросеть позволяет Google лучше интепретировать запросы пользователей, лучше понимать интент. Именно это может достаточно сильно повлиять на Ваш трафик, после дальнейшего обучения нейросети.

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

3. Как найти запросы, на которые повлиял BERT и как оптимизировать сайты под них

Методика поиска запросов, на которые оказал влияние алгоритм BERT – достаточно стандартна и я расписывал её неоднократно за последние несколько лет.

Смотрите например в статье про YMYL в разделе «Как найти некачественный контент на сайте».

Еще один способ есть непосредственно в разделе статьи про BERT, где ищем запросы используя Search Console.

В целом алгоритм очень прост. Для поиска запросов, на которые оказал влияние BERT можно использовать Google Analytics или Google Search Console.

Даты релиза алгоритма нам известны - 21 октября 2019 для англоязычных и 9 декабря для русскоязычных сайтов. Отсчитываем 3-4 недели после даты релиза (можно и больше) и сравниваем его с аналогичным предыдущим периодом.

Для поиска используем каналы (органическую выдачу Google). И далее строим разрез по ключевым словам.

Нам интересны запросы, которые существовали в предыдущем периоде, а в новом периоде (после внедрения алгоритма) не имеют показов. Так мы найдем утерянные запросы. Отсортировав результат по отсутствующим в предыдущем периоде и появившемся в новом (после релиза ядра алгоритмов), мы увидим, какие запросы появились, как теперь Google осмысляет контент.

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

Получив список запросов можно приступать к оптимизации вашего сайта.

Как известно, сотрудники Google утверждают, что оптимизация под BERT - невозможна. Об этом высказался и Дэнни Салливан и Джон Мюллер.

«Запросы не являются чем-то, на что вы можете повлиять в плане SEO», – сообщил Мюллер.

«Если есть что-то, что вы можете сделать для оптимизации под алгоритм BERT, так это убедиться, что на ваших страницах естественный текст… Вместо того, чтобы использовать как можно больше ключевых слов, пишите естественно».

Не густо, не правда-ли?

Итак, чтобы «оптимизировать» под алгоритм BERT, рекомендую изучить ваш набор данных по приобретенным и потерянным ключевым словам и провести традиционную оптимизацию контента, чтобы улучшить или восстановить позиции запросов.

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

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

Говоря попросту, ранее страница незаслуженно ранжировалась по утерянным запросам. Новый алгоритм BERT помог Google это понять. Вам придется немного постараться, обновляя контент, чтобы вернуть утерянные запросы.

Улучшайте ваш контент и для тех ключей, которые появились после обновления BERT. Изучите, что именно пишут конкуренты и как они расставляют акценты в своих текстах. Используйте идеи конкурентов, чтобы сделать свой контент более «ценным», чем у них. Необходимо отвечать на конкретные запросы в своем контенте лучше, чем конкуренты.

Огромное количество способов оптимизации приведено в моей книге «SEO Монстр 2020». На более чем 700 страницах раскрыты все важнейшие факторы ранжирования и методы воздействия на них с практическими примерами.

Хороший рост показали информационные сайты, построенные по SILO-структуре. Здесь изолированные кластеры запросов более точно давали ответы на НЧ запросы за счет наличия значительного числа «поддерживающих» страниц.

Внедрение нейросети BERT в ядро алгоритмов поиска Google - очередной шаг корпорации к улучшению понимания запросов пользователей, заданных на естественном языке.

Нейросеть будет развиваться на всех уровнях. Уверен, что она пройдет не только post но pre- тренинг, будет постоянно обучаться, в том числе и силами асессоров, контролирующих качество органической выдачи. Все это скажется в дальнейшем на стратегиях продвижения сайтов и способах манипуляции ранжирующими факторами.

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

Готовьтесь и читайте правильную литературу, чтобы понимать, как нужно оптимизировать свой сайт.

Если вы интересуетесь машинным обучением, то наверняка слышали про BERT и трансформеры.

BERT — это языковая модель от Google, показавшая state-of-the-art результаты с большим отрывом на целом ряде задач. BERT, и вообще трансформеры, стали совершенно новым шагом развития алгоритмов обработки естественного языка (NLP). Статью о них и «турнирную таблицу» по разным бенчмаркам можно найти на сайте Papers With Code.

С BERT есть одна проблема: её проблематично использовать в промышленных системах. BERT-base содержит 110М параметров, BERT-large — 340М. Из-за такого большого числа параметров эту модель сложно загружать на устройства с ограниченными ресурсами, например мобильные телефоны. К тому же, большое время инференса делает эту модель непригодной там, где скорость ответа критична. Поэтому поиск путей ускорения BERT является очень горячей темой.

Нам в Авито часто приходится решать задачи текстовой классификации. Это типичная задача прикладного машинного обучения, которая хорошо изучена. Но всегда есть соблазн попробовать что-то новое. Эта статья родилась из попытки применить BERT в повседневных задачах машинного обучения. В ней я покажу, как можно значительно улучшить качество существующей модели с помощью BERT, не добавляя новых данных и не усложняя модель.


Knowledge distillation как метод ускорения нейронных сетей

Существует несколько способов ускорения/облегчения нейронных сетей. Самый подробный их обзор, который я встречал, опубликован в блоге Intento на Медиуме.

Способы можно грубо разделить на три группы:

  1. Изменение архитектуры сети.
  2. Сжатие модели (quantization, pruning).
  3. Knowledge distillation.

Если первые два способа сравнительно известны и понятны, то третий менее распространён. Впервые идею дистилляции предложил Рич Каруана в статье “Model Compression”. Её суть проста: можно обучить легковесную модель, которая будет имитировать поведение модели-учителя или даже ансамбля моделей. В нашем случае учителем будет BERT, учеником — любая легкая модель.

Задача

Давайте разберём дистилляцию на примере бинарной классификации. Возьмём открытый датасет SST-2 из стандартного набора задач, на которых тестируют модели для NLP.

Этот датасет представляет собой набор обзоров фильмов с IMDb с разбивкой на эмоциональный окрас — позитивный или негативный. В качестве метрики на этом датасете используют accuracy.

Обучение BERT-based модели или «учителя»

Прежде всего необходимо обучить «большую» BERT-based модель, которая станет учителем. Самый простой способ это сделать — взять эмбеддинги из BERT и обучить классификатор поверх них, добавив один слой в сеть.

Благодаря библиотеке tranformers сделать это довольно легко, потому что там есть готовый класс модели BertForSequenceClassification. На мой взгляд, самое подробное и понятное руководство по обучению этой модели опубликовал Thilina Rajapakse на Towards Data Science.

Давайте представим, что мы получили обученную модель BertForSequenceClassification. В нашем случае num_labels=2, так как у нас бинарная классификация. Эту модель мы будем использовать в качестве «учителя».

Обучение «ученика»

В качестве ученика можно взять любую архитектуру: нейронную сеть, линейную модель, дерево решений. Давайте для большей наглядности попробуем обучить BiLSTM. Для начала обучим BiLSTM без BERT.

Чтобы подавать на вход нейронной сети текст, нужно представить его в виде вектора. Один из самых простых способов — это сопоставить каждому слову его индекс в словаре. Словарь будет состоять из топ-n самых популярных слов в нашем датасете плюс два служебных слова: “pad” — «слово-пустышка», чтобы все последовательности были одной длины, и “unk” — для слов за пределами словаря. Построим словарь с помощью стандартного набора инструментов из torchtext. Для простоты я не стал использовать предобученные эмбеддинги слов.

Модель BiLSTM

Код для модели будет выглядеть так:

Обучение

Для этой модели размерность выходного вектора будет (batch_size, output_dim). При обучении будем использовать обычный logloss. В PyTorch есть класс BCEWithLogitsLoss, который комбинирует сигмоиду и кросс-энтропию. То, что надо.

Код для одной эпохи обучения:

Код для проверки после эпохи:

Если это всё собрать воедино, то получится такой код для обучения модели:

Дистилляция

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

В оригинальной статье предлагается в функцию потерь добавить слагаемое, которое будет отвечать за ошибку «подражания» — MSE между логитами моделей.


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

Можно переиспользовать весь код, который мы написали, переопределив только модель и loss:

Вот и всё, теперь наша модель учится «подражать».

Сравнение моделей

В оригинальной статье наилучшие результаты классификации на SST-2 получаются при a=0, когда модель учится только подражать, не учитывая реальные лейблы. Accuracy всё ещё меньше, чем у BERT, но значительно лучше обычной BiLSTM.


Я старался повторить результаты из статьи, но в моих экспериментах лучший результат получался при a=0,5.

Так выглядят графики loss и accuracy при обучении LSTM обычным способом. Судя по поведению loss, модель быстро обучилась, а где-то после шестой эпохи пошло переобучение.


Графики при дистилляции:


Дистиллированная BiLSTM стабильно лучше обычной. Важно, что по архитектуре они абсолютно идентичны, разница только в способе обучения. Полный код обучения я выложил на ГитХаб.

Заключение

В этом руководстве я постарался объяснить базовую идею подхода дистилляции. Конкретная архитектура ученика будет зависеть от решаемой задачи. Но в целом этот подход применим в любой практической задаче. За счёт усложнения на этапе обучения модели, можно получить значительный прирост её качества, сохранив изначальную простоту архитектуры.

В конце прошлого года команде NVIDIA удалось достичь четырёхкратного ускорения нейронной сети BERT (Bidirectional Encoder Representations from Transformers). С тех пор эта ускоренная реализация была доработана и выложена на GitHub и NGC. TensorFlow-скрипт поддерживает точную настройку SQuAD QA, конфигурации серверов DGX-1 и DGX-2, а также использует новую функцию Automatic Mixed Precision (автоматический режим смешанной точности).

BERT — современная NLP-сеть, способная по воспроизводимой точности превзойти человека. Одна из ключевых инноваций — её двунаправленность (“B” — Biderectional). Предыдущие модели NLP обычно использовали однонаправленное сканирование (слева направо, справа налево или оба) для распознавания слов как в контекстном, так и в контекстно-свободном представлении. Кроме того, BERT может анализировать целые предложения для более точного изучения контекста, основываясь на окружении слова в обоих направлениях. Этот подход повышает точность модели, но предъявляет очень высокие вычислительные требования.

Чтобы обучить BERT с нуля, начните с большого набора данных (например, Википедии) или комбинации нескольких датасетов. Вы можете добавить 1-2 слоя в конце, чтобы настроить сеть для конкретной задачи, такой как классификация предложений или «вопрос-ответ». Поскольку новые слои требуют дополнительных параметров, вам необходимо использовать определённый набор данных для каждой модели. Для достижения оптимальных результатов вам понадобиться не только установить параметры для этих дополнительных слоёв, но ещё и точно настроить обучение всей BERT. Можете начать с параметров предварительно обученной сети или воспользоваться теми, которые предлагает Google для своей модели.

В зависимости от задачи, по умолчанию вам доступны две конфигурации BERT:

МодельСкрытые слоиРазмер скрытой единицы (hidden unit)Слои Attention HeadsРазмер фильтра прямой связиМаксимальная длина последовательностиПараметры
BERTBASE12768124 x 768512110M
BERTLARGE141024164 x 1024512330M

Установка

Требования

Репозиторий с BERT содержит Dockerfile, который расширяет контейнер TensorFlow NGC и инкапсулирует некоторые зависимости. Помимо этого, убедитесь, что у вас присутствуют следующие компоненты:

Дополнительная информация о работе с контейнерами NGC доступна в документации по облачным GPU NVIDIA и документации Deep Learning:

Быстрый старт

Здесь описана предварительная подготовка и настройки модели для задач «вопрос-ответ» с использованием тензорных ядер и смешанной точности, или же с помощью FP32. Выполните следующие шаги с параметрами по умолчанию:

1. Клонируйте репозиторий

2. Соберите контейнер BERT TensorFlow NGC

3. Загрузите и подготовьте набор данных

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

Сценарий запускает Docker-контейнер в текущем каталоге и загружает датасеты в папку data/ .

4. Запустите интерактивную сессию в контейнере NGS для начала обучения/вывода

После загрузки контейнера и подготовки данных вы можете запустить сессию CLI (Command Line Interface):

Сценарий launch.sh предполагает, что наборы данных находятся в местах по умолчанию:

— Squad v1.1: data/squad/v1.1

— BERT: data/pretrained_models_google/uncased_L-24_H-1024_A-16

— Wikipedia: data/wikipedia_corpus/final_tfrecords_sharded

— BookCorpus: data/bookcorpus/final_tfrecords_sharded

5. Начните предварительное обучение

Следующие скрипты выполняют предварительное обучение BERT на датасете Wikipedia+Book Corpus. Вы можете использовать любой другой набор данных на ваш выбор.

Для обучения FP16 с XLA с использованием DGX-1 V100 32G выполните:

Для обучения FP32 без XLA с использованием DGX-1 V100 32G выполните:

6. Начните точную настройку

Предварительно обученные представления BERT можно точно настроить с помощью одного дополнительного выходного слоя для системы «вопрос-ответ». Вы можете использовать следующий скрипт внутри контейнера для настройки SQuaD:

Для обучения FP16 с XLA с использованием DGX-1 V100 32G:

Для обучения FP32 без XLA с использованием DGX-1 V100 32G:

7. Начните проверку/оценку

Скрипт run_squad_inference.sh запускает вывод SQuaD на контрольной точке и оценивает прогнозирование с помощью полных совпадений и F1-меры.

Для вывода FP16 с XLA с использованием DGX-1 V100 32G:

Для вывода FP32 без XLA с использованием DGX-1 V100 32G:

Подробности

В этом разделе вы можете подробнее узнать о наборах данных, обучении, выводе и результатах.

Параметры командной строки

Для просмотра полного списка доступных параметров и их описания, введите в командной строке -h или -help , например:

Помимо опций для настройки гиперпараметров скрипта run_pretraining.py также можно использовать:

Для скрипта run_squad.py :

Получение данных

Для предварительного обучения BERT используются совмещённые датасеты Википедии (2500 млн слов) и Book Corpus (800 млн слов). Из Википедии извлекаются только текстовые блоки без заголовков, списков и таблиц. Они структурированы в виде единого набора документов, а не набора предложений, поскольку важно сохранять контекст.

Следующий шаг – запуск create_pretraining_data.py , который генерирует входные данные и метки для моделирования регулярных выражений и прогнозирования следующего предложения. Предварительное обучение можно выполнить на любом другом датасете. Набор скриптов для генерирования данных должен быть модульным, чтобы можно было вносить изменения в этапы предварительной обработки или дополнять данные.

Обучение

Процесс обучения состоит из двух этапов: предварительное обучение и точная настройка.

Предварительное обучение

Предварительное обучение выполняется с помощью run_pretraining.py вместе с параметрами, определёнными в scripts/run_pretraining.sh .

run_pretraining.sh запускает процесс обучения модели BERT-Large с нуля, используя датасеты Wikipedia и Book corpus. По умолчанию он:

— работает на 8 GPU с размером обучающего пакета 14 и размером оценочного пакета 8 на каждом GPU

— использует точность FP16

— работает за 1144000 шагов с 10000 предварительных шагов

— сохраняет контрольную точку каждые 5000 итераций и в конце обучения. Все контрольные точки, результаты оценки и логи обучения сохраняются в каталоге /results (в контейнере, который можно установить в локальный каталог)

— создаёт лог-файл, содержащий все выходные данные

— оценивает модель в конце обучения. Чтобы пропустить оценку, измените --do_eval на False .

С этими параметрами можно обучить модель до приемлемой точности на DGX1 с графическими процессорами V100 32 ГБ. Если вы хотите добиться лучших результатов, продемонстрированных Google, нужно либо удвоить число шагов (до 2288000) на DGX1, либо проводить обучение с 16-ю графическими процессорами на DGX2.

— < training_batch_size >: размер пакета для каждого процессора во время обучения. Чем больше размер пакета, тем эффективнее обучение, но это требует больше памяти

— < eval_batch_size >: размер пакета для каждого GPU во время оценки

— < learning_rate >: скорость обучения, по умолчанию 1e-4 (подходит для пакета размером 256)

— < precision >: тип арифметики вашей модели (fp32, fp16, fp16_xla, fastmath, amp_fm, amp_fm_xla, amp или amp_xla):

  1. fp32 : 32-битное число IEEE с плавающей запятой одинарной точности
  2. fp16 : заданное вручную 16- и 32-битное число с плавающей запятой смешанной точности
  3. fp16_xla : заданное вручную число с плавающей запятой смешанной точности, JIT-скомпилированное с XLA
  4. fastmath : Matmuls выполняется тензорными ядрами со смешанной точностью, остальное - в FP32
  5. amp_fm : альтернативная реализация FastMath, которая работает с вычислительным графом TensorFlow
  6. amp_fm_xla : amp_fm и компиляция XLA JIT
  7. amp : автоматически переназначает вычислительному графу TensorFlow использовать 16-битную арифметику всякий раз, когда это допустимо.
  8. amp_xla : amp и компиляция XLA JIT

— < num_gpus >: количество графических процессоров для обучения. Должно быть равно или меньше количества GPU, подключенных к вашему узлу

— < warmup_steps >: количество предварительных шагов в начале обучения

— < training_steps >: общее число шагов обучения

— < save_checkpoint_steps >: управляет частотой сохранения контрольных точек (по умолчанию каждые 5000 шагов)

— < create_logfile >: должен ли вывод быть записан в лог-файл (допустимые значения — "true" или "false" )

Эта команда запускает обучение BERT-Large с нуля на одном DGX-2 с использованием арифметики FP16. Это займёт около 156 часов (6,5 дней). Контрольные точки записываются каждые 5000 шагов, и все выводы сохраняются в лог-файл.

Точная настройка

Точная настройка выполняется с помощью run_squad.py вместе с параметрами, определёнными в scripts/run_squad.sh .

Скрипт run_squad.sh обучает модель и подготавливает оценку на датасете SQuaD v1.1. По умолчанию он:

— использует 8 графических процессоров и размер пакета 10 на каждом GPU

— использует точность FP16

— работает в течение 2 эпох

— сохраняет контрольную точку каждые 1000 итераций и в конце обучения. Все контрольные точки, результаты оценки и логи обучения сохраняются в каталоге /results (в контейнере, который можно установить в локальный каталог)

— оценивает модель в конце обучения. Чтобы пропустить оценку, измените --do_predict на False .

Лог обучения содержит:

— потери на последнем шаге

— эффективность обучения и оценки

— F1-меру и оценку полного совпадения на наборе Dev.

Результат обучения выводится в следующем формате:

Мультипроцессорное обучение можно включить с помощью модуля Horovod TensorFlow. Пример обучения на 8 GPU:

Обучение со смешанной точностью

Такое обучение значительно ускоряет вычисление, поскольку операции выполняются с половинной точностью, но при этом сохраняется минимальная информация с единичной точностью для критических участков сети. Это возможно благодаря тензорным ядрам в архитектурах Volta и Turing, которые обеспечивают ускорение до трёх раз.

Для обучения со смешанной точностью нужно:

1. Портировать модель для использования типа данных FP16 там, где это необходимо.

2. Добавить масштабирование потерь для сохранения малых значений градиента. Теперь это можно сделать автоматически с помощью механизма AMP (Automatic Mixed Precision) для Tensorflow (TF-AMP).

Более подробная информация:

Вывод

Вывод выполняется скриптом run_squad.py вместе с параметрами, определёнными в scripts/run_squad_inference.sh . Вывод поддерживает только один GPU.

Скрипт run_squad_inference.sh обучает модель и выполняет оценку на датасете SQuaD v1.1. По умолчанию он:

— использует точность FP16

— оценивает последнюю контрольную точку в /results с размером пакета 8.

Скрипт создаёт файл прогнозов /results/predictions.json и вычисляет F1-меру и полные совпадения с помощью evaluate-v1.1.py .

Выходной лог содержит:

— оценку эффективности модели

— F1-меру и оценку полного совпадения на наборе Dev.

Результат вывода выглядит следующим образом:

Результаты

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

Тест эффективности обучения

Тест эффективности вывода

Результаты Google

Результаты Google для обучающего скрипта run_squad.py были получены с контейнером TensorFlow 19.03-py3 NGC на NVIDIA DGX-1 с 8 видеокартами Tesla V100 32ГБ.

Количество графических процессоровРазмер партии на один графический процессорВремя обучения с FP16 (в минутах)Время обучения с FP32 (в минутах)
843146

В следующих таблицах сравниваются F1-меры для 5 запусков обучения с различными начальными значениями для FP16 и FP32 соответственно:

Таблица с результатами производительности (в предложениях в секунду). Числа усреднены для всех эпох обучения:

Число GPUРазмер партии на один GPUFP32 предл / секFP16 предл / секУскорение со смешанной точностьюMulti-GPU слабая масштабируемость с FP32Multi-GPU слабая масштабируемость с FP16
148,5518,142,121,01,0
4432,1352,851,643,762,91
8462,8395,281,517,355,25

Максимальная точность модели составила 91.17% для F1-меры и 84.34% для оценки полного совпадения.

BERT — большой шаг вперёд для NLP, и NVIDIA продолжает ускорять современные нейросети для любых применений Deep Learning. Теперь, используя открытый исходный код, любой может обучить свою вопросно-ответную систему для разных задач. Это должно послужить толчком к созданию не только развлекательных ботов, но и полноценных голосовых помощников.

С оригинальными материалами можно ознакомиться на сайте и в репозитории NVIDIA.

BERT (Bidirectional Encoder Representations From Transformers) – новый алгоритм от Google. Проект призван упростить поиск нужных данных в сети: вне зависимости от того, как составлен запрос, будут учтены нюансы, значение предлогов, система теперь понимает целые предложения, а не только отдельные слова или короткие словосочетания.

Когда появился алгоритм BERT?

Эта идея зародилась еще в 2017 году, а к 2018 подготовлена концепция проекта. 21 октября 2019 года Google выкатил алгоритм, но пока он работает исключительно для поисковых запросов на английском языке.

Для улучшения понимания определенных фрагментов, BERT применяется в 25 странах. В дальнейшем, предстоит объемная работа, чтобы используемая модель распространилась на все используемые для поиска языки.

BERT: что собой представляет этот алгоритм?

BERT – словно переводчик, который помогает машинам и людям научиться понимать друг друга. Модель базируется на нейросетях, благодаря чему система анализирует естественный язык и может различать контекст. Улучшилось и понимание предлогов, способных в корне изменить значение фразы. Это явно видно на простом примере: «four to seven» и «a quarter to seven» – предлог одинаковый, но смысл словосочетания полностью меняется. Раньше это понимание было недоступно поисковым системам, из-за чего пользователю было сложно найти требующуюся информацию.

Это алгоритм с открытым исходным кодом, доступным для просмотра или изучения.

BERT: принцип работы

Традиционно нейросети обучаются на определенном порядке слов (слева направо). Новый алгоритм обладает принципиальным отличием – он определяет смысл слова на основании всего словосочетания, учтя все окружающие слова.

Компания Google продемонстрировала пользователям возможности BERT. Например, если ранее на запрос «книги по литературе для взрослых» поисковая система предлагала учебники для старшеклассников, то теперь результаты поиска будут соответствовать информационным нуждам пользователя.

Станет ли BERT универсальным решением?

Алгоритм не будет применен для всех поисковых запросов, так как его основная задача в том, что понять разговорные фразы или длинные предложения. Он придет на помощь и в том случае, если предлоги имеют решающее значение и способны изменить смысл словосочетания. Для коротких фраз или поиска, в котором использованы названия компаний, подобная система не актуальна. Поэтому она затрагивает около 10% англоязычных вопросов пользователей из США.

BERT или RankBrain?

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

RankBrain помогает найти результаты, даже при отсутствии ключевых слов. Поисковая система понимает, что пользователю необходимо найти одну из всемирно известных достопримечательностей, даже если в строку поиска не было введено её точное название.

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

Что изменит BERT?

BERT поможет усовершенствовать и Google Assistant. Ответы на информационные запросы станут точнее.

На текущий момент технология не используется в рекламных продуктах, но в дальнейшем возможно её применение в соответствующих сервисах, что значительно повысит актуальность демонстрируемых объявлений.

Читайте также: