Владение Visual BERT | Раскройте силу вашей первой встречи

Visual BERT | Unleash the power of your first encounter

Введение

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

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

Цели обучения

  • Узнать, что означает BERT (Bidirectional Encoder Representations from Transformers).
  • Знание того, как BERT обучается на большом объеме текстовых данных.
  • Понять концепцию предварительного обучения и то, как оно помогает BERTу развивать языковое понимание.
  • Понять, что BERT учитывает как левый, так и правый контекст слов в предложении.
  • Использовать BERT в поисковых системах для лучшего понимания запросов пользователей.
  • Исследовать модель маскированного языка и задачи предсказания следующего предложения, используемые в обучении BERT.

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

Что такое BERT?

BERT расшифровывается как Bidirectional Encoder Representations from Transformers. Это особая компьютерная модель, которая помогает компьютерам понимать и обрабатывать естественный язык. Это интеллектуальный инструмент, который может читать и понимать текст, подобный нашему.

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

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

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

Набор данных SST2

Ссылка на набор данных: https://github.com/clairett/pytorch-sentiment-classification/tree/master/data/SST2

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

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

Модели: Классификация тональности предложений

Мы стремимся создать модель анализа тональности для классификации предложений как положительных или отрицательных.

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

Генерация эмбеддингов предложений с помощью DistilBERT: Использование предварительно обученной модели DistilBERT для генерации эмбеддингов предложений для 2 000 предложений.

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

Выполните разделение выборки на обучающую и тестовую: Разделите набор данных на обучающую и тестовую выборки.

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

Обучите модель логистической регрессии: Используйте обучающую выборку для обучения модели логистической регрессии с использованием scikit-learn.

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

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

Как рассчитывается единичное предсказание?

Вот объяснение того, как обученная модель рассчитывает предсказание, используя пример предложения “визуально потрясающее размышление о любви”:

Токенизация: Каждое слово в фразе разбивается на более мелкие компоненты, известные как токены. Токенизатор дополнительно вставляет специальные токены, такие как «CLS» в начале и «SEP» в конце.

Преобразование токена в идентификатор: Затем токенизатор заменяет каждый токен соответствующим ему идентификатором из таблицы векторных представлений. Таблица векторных представлений – это компонент, поставляемый с обученной моделью, который отображает токены на их числовые представления.

Форма ввода: После токенизации и преобразования DistilBERT преобразует входное предложение в правильную форму для обработки. Оно представляет предложение в виде последовательности идентификаторов токенов с добавлением уникальных токенов.

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

После выполнения этих этапов предложение вводится в формате, который может быть подан на вход модели DistilBERT для дальнейшей обработки и предсказания.

Процесс прохождения через DistilBERT

Фактически, прохождение входного вектора через DistilBERT происходит похожим образом, как и с BERT. Выход будет состоять из вектора для каждого входного токена, где каждый вектор содержит 768 чисел (floats).

В случае классификации предложений мы сосредоточиваемся только на первом векторе, который соответствует токену [CLS]. Токен [CLS] разработан для захвата общего контекста всей последовательности, поэтому использование только первого вектора (токена [CLS]) для классификации предложений в моделях, таких как BERT, работает. Расположение этого токена, его функция в предварительном обучении и метод пулинга все способствуют его способности кодировать значимую информацию для задач классификации. Более того, использование только токена [CLS] снижает вычислительную сложность и требования к памяти, позволяя модели делать точные предсказания для широкого спектра задач классификации. Этот вектор передается в качестве входных данных модели логистической регрессии.

Роль модели логистической регрессии заключается в классификации этого вектора на основе того, что она узнала во время обучения. Можно представить рассчет предсказания следующим образом:

  • Модель логистической регрессии принимает вектор входных данных (ассоциированный с токеном [CLS]) в качестве входных данных.
  • Она применяет набор изученных весов к каждому из 768 чисел в векторе.
  • Взвешенные числа суммируются, а также добавляется дополнительный параметр смещения.

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

Фаза обучения модели логистической регрессии и полный код всего процесса будут рассмотрены в следующем разделе.

Реализация с нуля

В этом разделе будет представлен код для обучения модели классификации предложений.

Загрузка библиотеки

Давайте начнем с импорта необходимых инструментов. Мы можем использовать df.head(), чтобы посмотреть на первые пять строк в таблице данных и оценить ее состояние.

Импорт предварительно обученной модели DistilBERT и токенизатора

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

model_class, tokenizer_class, pretrained_weights = (ppb.DistilBertModel, ppb.DistilBertTokenizer,
                                                     'distilbert-base-uncased')
                                                     
                                                     

## Хотите использовать BERT вместо DistilBERT? 
## Раскомментируйте следующую строку:
#model_class, tokenizer_class, pretrained_weights = (ppb.BertModel, ppb.BertTokenizer, 
                                                            'bert-base-uncased')
                                                            
                                                            
                                                            
                                                            
# Загрузка предварительно обученной модели/токенизатора
tokenizer = tokenizer_class.from_pretrained(pretrained_weights)
model = model_class.from_pretrained(pretrained_weights)

Допустим, у нас есть набор данных с обзорами фильмов, и мы хотим токенизировать и обработать 2000 обзоров одновременно. Мы будем использовать токенизатор DistilBertTokenizer, инструмент, специально разработанный для токенизации текста с использованием модели DistilBERT.

Токенизатор принимает весь пакет предложений и выполняет токенизацию, что включает разбиение предложений на более мелкие единицы, называемые токенами. Он также добавляет специальные токены, такие как [CLS] в начале и [SEP] в конце каждого предложения.

Токенизация

В результате каждое предложение становится списком идентификаторов. Набор данных представляет собой список списков (или объект pandas Series/DataFrame). Более короткие фразы должны быть дополнены идентификатором токена 0, чтобы все векторы имели одинаковую длину. Теперь у нас есть матрица/тензор, который можно передать в BERT после добавления дополнения:

tokenized = df[0].apply((lambda x: tokenizer.
            encode(x, add_special_tokens=True)))

Обработка с помощью DistilBERT

Дополненная матрица токенов теперь преобразуется во входной тензор, который мы передаем в DistilBERT.

input_ids = torch.tensor(np.array(padded))

with torch.no_grad():
    last_hidden_states = model(input_ids)

Результаты работы DistilBERT сохраняются в переменной last_hidden_states после завершения этого шага. В нашем сценарии это будет матрица размером 2000 (количество токенов в самой длинной последовательности из 2000 примеров) на 768 (количество скрытых единиц в модели DistilBERT).

Распаковка выходного тензора BERT

Давайте рассмотрим размеры выходного тензора 3D и извлечем его. Предположим, у вас есть переменная last_hidden_states, которая содержит выходной тензор DistilBERT.

Краткий обзор пути предложения

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

Выделение важной части

Мы выбираем только этот срез куба для категоризации предложения, поскольку нас интересует только результат BERT для маркера [CLS].

Чтобы получить 2D тензор, который нас интересует из этого 3D тензора, мы делаем следующий срез:

 # Срезаем выход для первой позиции всех последовательностей, берем все скрытые выходы
features = last_hidden_states[0][:,0,:].numpy()

Наконец, признак – это 2D массив numpy, который включает все вложения предложений из нашего набора данных.

Применение логистической регрессии

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

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

labels = df[1]
train_features, test_features, train_labels, test_labels = train_test_split(features, labels)

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

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

lr_clf = LogisticRegression()
lr_clf.fit(train_features, train_labels)

После обучения модели мы можем сравнить ее результаты с тестовым набором:

lr_clf.score(test_features, test_labels)

Что дает модели точность около 81%.

Вывод

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

Основные выводы

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

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

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

Медиа, показанное в этой статье, не принадлежит Analytics Vidhya и используется на усмотрение автора.