3 min read

Двунаправленный кодировщик представлений трансформера (BERT)

Двунаправленный кодировщик представлений трансформера (BERT)
Фото: viatour cathy / Unsplash

BERT (англ. Bidirectional Encoder Representations from Transformers – двунаправленный кодировщик представлений трансформера) — это языковая модель, основанная на архитектуре Трансформер (Transformer), предназначенная для предобучения языковых Представлений (Representation) с целью их последующего применения в широком спектре задач Обработки естественного языка (NLP).

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

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

Как работает BERT

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

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

В приведенной ниже диаграмме изображен Transformer. Вход представляет собой последовательность Токенов (Token) – слов, их частей или символов, которые сначала встраиваются в векторы, а затем обрабатываются в нейронной сети. Выход представляет собой последовательность векторов, в которой каждый вектор соответствует входной лексеме с тем же индексом.

Как BERT работает с русскоязычным датасетом

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

Для начала импортируем необходимые библиотеки:

!pip install dostoevsky

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

!python -m dostoevsky download fasttext-social-network-model
from dostoevsky.tokenization import RegexTokenizer
from dostoevsky.models import FastTextSocialNetworkModel

from google.auth import default
from google.colab import auth, drive
import gspread

import pandas as pd

Подгрузим датасет:

df = pd.read_csv('https://www.dropbox.com/s/q6t11s4inn6bvxg/forum_messages.csv?dl=1')df.head()

Инициируем сущность, токенизирующую комментарии на отдельно взятые единицы речи - слова, знаки препинания. Затем создадим экземпляр модели FastTextSocialNetworkModel и выделим для нее столбец с комментариями как объект. Отдельным столбцом polarity сохраним результаты:

tokenizer = RegexTokenizer()
model = FastTextSocialNetworkModel(tokenizer=tokenizer)
messages = df['текст']
results = model.predict(messages, k=2)
df['polarity'] = results
df.head()

Для каждого комментария мы получили словарь, описывающий негативность (negative), позитивность (positive), нейтральность (neutral). В практике автора статьи комментарии с высоким (более 0,5) коэффициентом нейтральности, как те, что расположены на строках № 1-5 стоит исключить из набора при дальнейшей классификации на негатив и позитив.

Получается, из тех Наблюдений (Observation), что видны на экране, внимания достойна только вторая запись. И действительно, такие слова, как "нелепо" позволяют приписать этот комментарий к разряду негативных. Попробуйте запустить код в ноутбуке и посмотрите, какие еще комментарии dostoevsky причислил к отрицательным.

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

Автор оригинальной статьи: Rani Horev