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

Почему анализ настроений так важен для чат-ботов?

Чат-боты стали неотъемлемой частью бизнеса для улучшения качества обслуживания клиентов. В настоящее время промышленность сосредоточена на создании лучшего чат-бота, обогащающего человеческий опыт. Таким образом, понимание реакции клиентов становится естественным ожиданием. Для этого чат-бот должен понимать язык, контекст и тон клиента.

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

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

Не так просто!

Этот анализ не так прост, поскольку мнения могут содержать сарказм, двусмысленность и неявное отрицание. Некоторые неявные отрицания, такие как «Когда я могу ожидать ответа» или такой вопрос, как «Как отменить заказ?» сверните анализ, поскольку они не являются напрямую отрицательными, но влияют на бизнес. Это приводит к необходимости иметь анализатор настроений, обученный на данных предметной области.

Сбор данных

В случае чат-ботов, обслуживающих несколько доменов, разброс данных может быть высоким.

Любой модели ML или DL требуется достаточно данных, чтобы она могла изучать закономерности и извлекать из них функции.
Оптимальное количество точек данных для обучения не является магическим числом.
Недостаточное или переобучение может привести к плохому обобщению.

Предварительная обработка

Очистите данные, чтобы удалить URL-адреса, электронные письма, цифры и специальные символы, поскольку они не влияют на определение настроения, но создают шум.
Для модели, имитирующей то, как человек понимает настроения, это не соответствует общепринятой практике удаления стоп-слов и лемматизации в НЛП.
«Как я могу тебе доверять» против «Я тебе доверяю»
«Не зли меня» против «Я не злюсь»
« Вы могли бы быть умнее »против« Вы умны »
Представьте, что эти предложения сводятся к одному и тому же, но несут в себе совершенно разные чувства.

Маркировка

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

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

Сбалансируйте набор данных

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

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

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

Моделирование

Чтобы выучить хорошее представление предложения, можно использовать обучаемые вложения Keras вместе с такими моделями, как CNN и LSTM.
Токенизаторы, такие как фраза и словарный запас, могут обрабатывать слова с ошибками.

Оптимизированные сети CNN с embedding_dimension: 300, фильтрами: [32, 64], ядрами: [2, 3, 5], kernel_initialization: 'he_uniform', стратегией объединения: (среднее и максимальное на сцепленных слоях CNN) дают точность до 92 %. Эта сеть может превзойти двунаправленные LSTM для этой задачи.

Несмотря на высокую точность, оба не могут хорошо обобщить и справиться с отрицанием.

Хорошее представление предложения

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

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

Раскройте всю мощь BERT

Представления двунаправленного кодера от трансформаторов

Берт - это контекстная модель. Вместо создания одного представления встраивания слова для каждого слова в словаре. Он генерирует представление каждого слова на основе других слов в предложении.

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

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

BERT - это предварительно обученная модель, ожидающая входных данных в определенном формате. Специальные жетоны для обозначения начала ([CLS]) и разделения / конца предложений ([SEP]).

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

У токенизатора BERT есть модель WordPiece, он жадно создает словарь фиксированного размера. Размер его словаря ограничен 30 000. Он включает слова, подслова (передние и задние) и символы.

Детальная проработка модели трансформера и Берта от Google.

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

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

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

Представление токена [CLS] становится значимым представлением предложения, если модель была точно настроена, где последний скрытый слой этого токена используется в качестве «вектора предложения» для классификации последовательности.

Предварительно обученная модель:
bert-base-uncased (12 слоев, 768 скрытых, 12 головок, параметры 110M)

Процессор:
Пользовательский или Cola Processor с Label_list: [«Нейтральный», «Отрицательный», «Положительный»]
Набор данных: разговоры с чат-ботом

Параметры точной настройки:
max_seq_length = 30
batch_size = 32
learning_rate = 2e-5
num_train_epochs = 4.0
разминка_proportion = 0.1 < br /> (Скорость обучения увеличивается линейно в течение периода разминки.
Если целевая скорость обучения равна p, а период разминки равен n, то первая итерация пакета использует 1 * p / n для своего обучения скорость; второй использует 2 * p / n, и так далее, пока мы не достигнем номинальной скорости на итерации n)

Результаты

eval_accuracy = 0,93949044
eval_loss = 0,22454698
Test_accuracy = 0,9247

Эксперименты с выводом последнего кодировщика:
Представление токена [CLS]: eval_acc 0,939
Максимальный глобальный пул: eval_acc 0,9458
Глобальный средний пул: eval_acc 0,9522

Эта модель хорошо обобщается на невидимых случаях и может фиксировать случаи отрицания или неявное отрицание даже с меньшим количеством обучающих данных.

Интерпретируемость и объяснимость

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

В Анализе настроений можно провести аналогичный анализ слоев самовнимания.

Алгоритм:

  1. Возьмите веса внимания из последнего слоя внимания с несколькими головами, назначенного токену [CLS].
  2. Среднее значение каждого токена по нескольким головам
  3. Нормализовать по токенам

Визуализация

Человеку сложно воспринимать большие n-мерные массивы.
Однако все это не так уж и страшно, когда помещается в визуализацию.
Можно сделать Синопсис с визуализацией интенсивности или внимания каждого символа в предложении.

Примеры

Ссылки

[1] Внимание - все, что вам нужно; Vaswani et al., 2017.
[2] Предварительная подготовка глубоких двунаправленных преобразователей для понимания языка; Devlin et al., 2018.
[3] XLNet: Generalized Autoregressive Pretraining for Language Understanding; Жилин Янг., 2019
[4] Робастно оптимизированный подход к предварительному обучению; Yinhan Liu., 2019
[5] ERNIE: Улучшенная языковая репрезентация с информативными объектами; Zhengyan Zhang., 2019
[6 ] Инструмент для визуализации многоголового самовнимания в модели; Джесси Виг., 2019
[7] Bert as Сервис; Hanxio

Также вы можете прочитать наш блог на React JS.

Первоначально опубликовано на https://engineering.coviam.com 6 августа 2019 г.