Это введение в「BERT」, модель машинного обучения, которую можно использовать с ailia SDK. Вы можете легко использовать эту модель для создания приложений ИИ с помощью ailia SDK, а также многих других готовых к использованию AIlia MODELS.

Обзор

BERT – это модель машинного обучения, которая служит основой для повышения точности машинного обучения в обработке естественного языка (NLP). Предварительно обученные модели на основе BERT, которые были повторно обучены на больших данных для решения различных задач NLP в предметной области, общедоступны (BioBERTдля биомедицинского текста, SciBERTдля научных публикаций, ClinicalBERTдляклинических заметок).



Примеры употребления слова БЕРТ

МаскированныйLM

Это задание на предсказание замаскированных слов. Его можно использовать для проверки предложений.

NER

Модель на основе BERT для распознавания именованных объектов из текста. Он может пометить, является ли входное слово именем человека, места или организации.

Анализ настроений

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

Вопрос Ответ

Учитывая контекстное предложение и вопрос, эта задача вычисляет правдоподобный ответ на вопрос. Его можно использовать, например, для генерации автоматических ответов чат-ботов.

Классификация нулевого выстрела

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

Архитектура

BERT был обучен с использованием двух стратегий: Masked LM (MLM) и Предсказание следующего предложения (NSP).

Masked LM — это задача, в которой вы маскируете часть текста, а затем модель пытается угадать слово, которое было замаскировано, используя другие контекстные слова. Например, на предложение «Я смотрел это [MASK], и это было потрясающе», одним из возможных ответов модели может быть «Я смотрел этот фильм, и это было потрясающе».

Предсказание следующего предложения — это задача, в которой модель получает в качестве входных данных пары предложений и учится предсказывать, является ли второе предложение следующим предложением в исходном тексте. В 50% случаев предложения на самом деле являются последовательными, а в 50% случаев это случайные предложения.

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

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

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

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

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

BERTдобился значительного повышения точности в различных задачах, таких как GLUE (Общая оценка понимания языка) и SQuAD (Стэнфордский набор данных для ответов на вопросы).

Трансформеры

Transformers — это реализация BERT в Pytorch, которая позволяет выполнять точную настройку пользовательских наборов данных с помощью Pytorch.



Transformers включает предварительно обученную модель для японского языка. Кроме того, токенизатор, включенный в Transformers, можно использовать для морфологического анализа японского языка и преобразования его в токены. Внутри используется Mecab и его оболочка Python, Fugashi.

Использование трансформаторов для точной настройки BERT

Используя преобразователи, мы попытаемся решить проблему классификации текста путем тонкой настройки BERT. Цель состоит в том, чтобы предсказать, имеет ли данный текст положительное или отрицательное значение.

Код доступен в следующем репозитории.



Сначала установите Трансформеры.

$ pip3 install transformers==3.4.0

Скрипт для проведения обучения доступен по пути transformers/examples/text-classification/run_glue.py. Он содержит загрузчики наборов данных для различных задач в GLUE, ведущем тесте обработки естественного языка.

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

В сценарии run_glue.py модель обучения задается AutoModelForSequenceClassification, а набор данных GLUE создается загрузчиком набора данных. Загрузчик создал набор данных на основе заданного аргумента data_args.task_name.

Чтобы использовать наш собственный набор данных, мы перепишем run_glue.py, чтобы зарегистрировать собственный загрузчик набора данных.

Набор данных находится в формате tsv, разделенном табуляцией. Сначала идет текст, затем номер этикетки. В этом случае мы присвоили 0 «положительным» и 1 «отрицательным» предложениям.

Затем обучите модель.

Счет отображается после завершения обучения.

eval_loss = 0,6668145656585693
eval_acc = 1,0
эпоха = 3,0
total_flos = 2038927233024

Обученные модели хранятся в папке output/original. Обученная модель хранится как pytorch_model.bin, а морфологические ассоциации слов и токенов хранятся в output/original/vocab.txt.

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

Файл, используемый для кэширования, будет создан под data/original во время обучения. Учтите, что даже если вы обновите файл tsv, для обучения будут использоваться старые данные, если вы не удалите этот файл.

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

Экспорт BERT в ONNX

Чтобы преобразовать модель BERT в ONNX, используйте transformers.convert_graph_to_onnx. Просто укажите путь к обученной модели и файлу pipeline_name.

В данном случае мы используем AutoModelForSequenceClassification для обучения, поэтому указываем pipeline_name=”sentiment-analysis”. Перейдите по ссылке ниже, чтобы узнать соответствие между именами конвейеров и моделями.



transformers.pipelines — документация по трансформаторам 3.4.0
docs]def get_framework ( model ): «
» Выберите фреймворк (TensorFlow или PyTorch) для использования. Аргументы: модель (:obj:`str`…huggingface.co»



Недавно обученную модель можно использовать с ONNX Runtime, используя приведенный ниже сценарий, чтобы классифицировать text как положительный или отрицательный.

Несколько примеров программ, использующих различные экспорты ONNX, доступны по ссылке ниже.



Задание на ответ на вопрос

Transformers также поддерживает ответ на вопрос, что позволяет ввести контекст и вопрос и в результате получить позицию наиболее вероятного ответа на вопрос в контекстном предложении.

INPUT
{«вопрос»: «Что такое среда выполнения ONNX?»,
«контекст»: «Среда выполнения ONNX — это высокопроизводительный единый механизм логического вывода для нескольких платформ и оборудования»}

OUTPUT
{‘ответ’: ‘высокопроизводительный единый механизм логического вывода для нескольких платформ и оборудования’, ‘конец’: 94, ‘оценка’: 0,751201868057251, ‘начало’: 18}

Использовалась предварительно обученная модель deepset/roberta-base-squad2. RoBERTa — это улучшенная модель BERT.

Входные данные модели состоят из input_ids (последовательность пакетов x), вычисленных с помощью Tokenizer, и attension_mask (последовательность пакетов x). Результатом является output_0 (последовательность пакетов x) и output_1 (последовательность пакетов x).

Чтобы экспортировать модель ответов на вопросы в ONNX, вы можете использовать скрипт transformers.convert_graph_to_onnx, как и для GLUE.

Однако для вычисления start и end из экспортированного вывода ONNX требуется сложная постобработка, поэтому мы рекомендуем использовать onnx_transformers ниже.



Использование BERT с ailia SDK

BERT можно использовать с ailia SDK с помощью следующей команды.

$ python3 bert_maskedlm.py

Поскольку BERT использует токенизатор трансформаторов, вам необходимо заранее установить преобразователи, используя файл requirements.txt в папке ailia-models/neural_language_processing.

$ pip3 install -r requirements.txt

ailia SDK поддерживает модели для задач maskedlm, ner, question_answering, sentiment_analysis и zero_shot_classification

Вот примеры результатов.



Топор Инк. разработал ailia SDK, который обеспечивает кросс-платформенный быстрый вывод на основе графического процессора.

ax Inc. предоставляет широкий спектр услуг от консалтинга и создания моделей до разработки приложений и SDK на основе ИИ. Не стесняйтесь связаться с нами для любого запроса.