Создание векторных представлений BERT с помощью Hugging Face Transformers

Создание векторов BERT с помощью Transformers от Hugging Face

Введение

Трансформеры изначально были созданы для перевода текста с одного языка на другой. BERT существенно повлиял на то, как мы изучаем и работаем с человеческим языком. Он улучшил часть исходной модели трансформера, которая понимает текст. Создание вложений с помощью BERT особенно хорошо справляется с пониманием предложений с комплексным значением. Он делает это, исследуя всё предложение и понимая, как слова связаны друг с другом. Библиотека Hugging Face transformers является ключевой при создании уникальных кодов предложений и представлении BERT.

Учебные цели

  • Хорошо понять BERT и предобученные модели. Понять, насколько важны они при работе с человеческим языком.
  • Научиться эффективно использовать библиотеку Hugging Face Transformers. Использовать её для создания специальных представлений текста.
  • Выяснить различные способы корректного удаления этих представлений из предобученных моделей BERT. Это важно, поскольку различные языковые задачи требуют разных подходов.
  • Получить практический опыт, выполнив необходимые шаги для создания этих представлений. Убедитесь, что вы можете сделать это самостоятельно.
  • Узнать, как использовать созданные вами представления для улучшения других языковых задач, таких как сортировка текста или определение эмоций в тексте.
  • Исследовать возможности настройки предобученных моделей для более эффективного выполнения определенных языковых задач. Это может привести к лучшим результатам.
  • Выяснить, где используются эти представления, чтобы задачи обработки языка работали лучше. Увидеть, как они улучшают точность и производительность языковых моделей.

Эта статья была опубликована в рамках блогосферы по Data Science.

Что включает в себя конвейеры в контексте трансформеров?

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

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

Что требует использования Hugging Face Transformers?

Модели-трансформеры обычно очень большие, и работа с ними для обучения и использования в реальных приложениях может быть довольно сложной. Hugging Face transformers стремятся упростить весь этот процесс. Они предоставляют единый способ загрузки, обучения и сохранения любой модели-трансформера, независимо от её размера. Использование разных программных инструментов для разных частей жизненного цикла модели ещё более удобно. Вы можете обучить её с помощью одного набора инструментов, а затем легко использовать её в другом месте для реальных задач без лишних хлопот.

Расширенные возможности

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

Обучение с помощью Hugging Face

Этот учебник предназначен для помощи в освоении основ работы с наборами данных. Основная цель библиотеки HuggingFace transformers – упростить загрузку наборов данных, которые представлены в различных форматах или типах.

Изучение наборов данных

Обычно, большие наборы данных дают лучшие результаты. Библиотека Dataset от Hugging Face имеет функцию, которая позволяет быстро загружать и подготавливать множество общедоступных наборов данных. Вы можете получать и сохранять наборы данных напрямую, используя их названия из Dataset Hub. Результатом является словарь, содержащий все части набора данных, к которым можно обращаться по их названиям.

Великолепной особенностью библиотеки Datasets от Hugging Face является то, как она управляет хранением данных на вашем компьютере и использует такую вещь, как Apache Arrow. Это помогает обрабатывать даже большие наборы данных без излишнего использования памяти.

Вы можете узнать больше о содержимом набора данных, изучив его функции. Если есть части, которые вам не нужны, вы можете легко избавиться от них. Вы также можете изменить имена меток на “метки” (что ожидают модели Hugging Face Transformers) и установить формат вывода для различных платформ, таких как torch, TensorFlow или numpy.

Перевод языка

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

from transformers import pipeline

translator = pipeline("translation_en_to_fr")
translation = translator("What's your name?")
## [{'translation_text': "Quel est ton nom ?"}]

Классификация без обучения

Это особый способ сортировки текста с использованием модели, которая была обучена понимать естественный язык. Большинство сортировщиков текста имеют список категорий, но этот может решить, какие категории использовать в процессе чтения текста. Это делает его очень адаптивным, хотя он может работать немного медленнее. Он может угадать, о чем текст приблизительно на 15 разных языках, даже если он заранее не знает возможные категории. Вы можете легко использовать эту модель, получив ее из хаба.

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

Вы создаете конвейер, используя функцию “pipeline()” в библиотеке Hugging Face Transformers. Эта часть системы позволяет легко обучать модель для понимания настроения и затем использовать ее для анализа настроения с использованием конкретной модели, которую можно найти в хабе.

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

chosen_model = "distilbert-base-uncased-finetuned-sst-2-english"
distil_bert = pipeline(task="sentiment-analysis", model=chosen_model)

В результате модель готова выполнить намеченную задачу.

perform_sentiment_analysis(english_texts[1:])

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

Вопросно-ответная система

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

Вы можете легко использовать модели вопросно-ответной системы и библиотеку Hugging Face Transformers с помощью конвейера “question-answering pipeline”.

Если вы не указываете модель, которую использовать, конвейер начинается с модели по умолчанию, называемой “distilbert-base-cased-distilled-squad”. Этот конвейер принимает вопрос и некоторый контекст, связанный с вопросом, и затем определяет ответ на основе этого контекста.

from transformers import pipeline

qa_pipeline = pipeline("question-answering")
query = "What is my place of residence?"
qa_result = qa_pipeline(question=query, context=context_text)
## {'answer': 'India', 'end': 39, 'score': 0.953, 'start': 31}

BERT словные вложения

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

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

Почему использовать встраивания BERT?

BERT, сокращение от “Bidirectional Encoder Representations from Transformers”, является умной системой для обучения пониманию языка. Он создает прочную основу, которую могут использовать люди, работающие над задачами, связанными с языком, без каких-либо затрат. У этих моделей есть два основных применения: вы можете использовать их, чтобы получить более полезную информацию из ваших текстовых данных, или вы можете настроить их на своих данных, чтобы выполнять конкретные задачи, такие как сортировка, поиск и ответы на вопросы.

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

Загрузка предварительно обученного BERT

Hugging Face Transformers позволяет использовать BERT в PyTorch, который можно легко установить. Эта библиотека также содержит инструменты для работы с другими продвинутыми языковыми моделями, такими как GPT и GPT-2 от OpenAI.

!pip install transformers

Вы должны включить PyTorch, предварительно обученную модель BERT и токенизатор BERT, чтобы начать.

import torch
from transformers import BertTokenizer, BertModel

Transformers предоставляет разные классы для использования BERT во многих задачах, таких как определение типа токенов и сортировка текста. Но если вы хотите получить представления слов, лучший выбор – это класс BertModel.

# OPTIONAL: Enable the logger for tracking information
import logging

import matplotlib.pyplot as plt
%matplotlib inline

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
# Загрузка токенизатора для предварительно обученной модели

Форматирование входных данных

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

  1. Специальные токены для границ предложений: BERT требует, чтобы ваш ввод был как серия слов или подслов, как разделение предложения на более мелкие части. Вы должны добавить специальные токены в начало и конец каждого предложения.
  2. Сохранение одинаковой длины предложений: Чтобы эффективно работать с группой входных данных, вы должны убедиться, что все ваши предложения имеют одинаковую длину. Вы можете сделать это, добавляя дополнительные “заполнительные” токены к более коротким предложениям или сокращая более длинные.
  3. Использование маски внимания: Когда вы добавляете заполнительные токены, чтобы сделать предложения одинаковой длины, вы также используете “маску внимания”. Это похоже на карту, которая помогает BERT определить, какие части являются фактическими словами (отмечены как 1), а какие являются заполнителями (отмечены как 0). Эта маска включается в ваши входные данные, когда вы передаете их модели BERT.

Специальные токены

Вот что означают эти токены в более простых терминах:

  1. [SEP] Разделяет предложения: Добавление [SEP] в конце предложения крайне важно. Когда BERT видит два предложения и должен понять их связь, [SEP] помогает ему определить, где заканчивается одно предложение и начинается следующее.
  2. [CLS] Показывает главную идею: Для задач, где необходимо классифицировать или сортировать текст, обычно используется начало с [CLS]. Это сигнализирует BERT, что это место, где находится главная точка или категория текста.

У BERT есть 12 слоев, каждый из которых создает сводку текста, который вы ему даете, с тем же количеством частей, что и слова, которые вы вводите. Но эти сводки немного отличаются, когда они появляются.

Токенизация

Функция ‘encode’ в библиотеке Hugging Face Transformers подготавливает и организует ваши данные. Перед использованием этой функции на вашем тексте вы должны определить максимальную длину предложения, которую вы хотите использовать, чтобы добавить дополнительные слова или сократить более длинные.

Как токенизировать текст?

Функция tokenizer.encode_plus упрощает несколько процессов:

  1. Сегментация предложения на токены
  2. Введение специальных токенов [SEP] и [CLS]
  3. Сопоставление токенов с их соответствующими идентификаторами
  4. Обеспечение одинаковой длины предложения путем заполнения или усечения
  5. Создание масок внимания, отличающих действительные токены от [PAD] токенов.
input_ids = []
attention_masks = []

# Для каждого предложения...
for sentence in sentences:
    encoded_dict = tokenizer.encode_plus(
                        sentence,                  
                        add_special_tokens=True,   # Добавление '[CLS]' и '[SEP]'
                        max_length=64,             # Настройка длины предложения
                        pad_to_max_length=True,    # Заполнение/усечение предложений
                        return_attention_mask=True,# Генерация масок внимания
                        return_tensors='pt',       # Возвращение тензоров PyTorch
                   )
    
   
    input_ids.append(encoded_dict['input_ids'])
    
    # Создание маски внимания (идентификация заполнения/незаполнения).
    attention_masks.append(encoded_dict['attention_mask'])

Идентификатор сегмента

В BERT мы рассматриваем пары предложений. Для каждого слова в токенизированном тексте мы определяем, принадлежит ли оно первому предложению (обозначено 0) или второму предложению (обозначено 1).

При работе с предложениями в этом контексте вы присваиваете значение 0 каждому слову в первом предложении вместе с токеном ‘[SEP]’, и вы присваиваете значение 1 всем словам во втором предложении.

Теперь расскажем о том, как вы можете использовать BERT с вашим текстом:

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

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

Чтобы получить характеристики определенного текста с использованием этой модели в TensorFlow:

from transformers import BertTokenizer, TFBertModel

tokenizer = BertTokenizer.from_pretrained('bert-base-cased')
model = TFBertModel.from_pretrained("bert-base-cased")

custom_text = "
Вы можете использовать любой текст по своему выбору."
encoded_input = tokenizer(custom_text, return_tensors='tf')
output_embeddings = model(encoded_input)

Вывод

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

Основные положения

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

Часто задаваемые вопросы

Показанные в статье медиафайлы не принадлежат Analytics Vidhya и используются по усмотрению автора.