Skip to content

ru Multi task classifiers

dilyararimovna edited this page May 9, 2023 · 1 revision

This page is about multitask models, which are utilized in Dream.

Англоязычная модель

[Эта модель] (https://github.com/deeppavlov/dream/tree/main/annotators/combined_classification) использует порт 8087. Имя аннотатора: Combined_classification.

Архитектура

В модели используются простые линейные слои поверх опорной сети в корпусе дистиллятора. Эта архитектура объясняется в [руководстве по DeepPavlov] (http://docs.deeppavlov.ai/en/master/features/models/multitask_bert.html). После слияния этого PR модель должна поддерживать версию 1.1 DeepPavlov. (Пока этот PR не будет объединен, он смотрит на ветку DeepPavlov, которая была объединена в эту версию)

Тренировочные данные

В DREAM новая многозадачная модель «9 в 1» обучалась на следующих наборах данных: Классификация тональности — на DynaBench (94 тыс. образцов). Примечание: в предыдущих многозадачных моделях использовалась SST (8k выборок), что приводило к переобучению. Головка однолепестковая.

Фактоидная классификация - по набору данных YAHOO (3,6 тыс. выборок), как и раньше. Головка однолепестковая.

Классификация эмоций — в наборе данных go_emotion (42 тыс. образцов). Head является однокомпонентным, так как использование многокомпонентного head давало худшие результаты. (Поэтому мы использовали только однокомпонентные образцы.) Примечание. В предыдущих многозадачных моделях использовался пользовательский набор данных, что также приводило к переобучению. Классификация Midas - по набору данных Midas (~9 тыс. выборок). Голова однозначная, только семантические классы использовались как в МЕЧТЕ сейчас. Обратите внимание - мы впервые добавляем эту головку в многозадачную модель DREAM!

Тематическая классификация - на датасете Дили (1,8 млн выборок). Head является однозначным, так как использование multilabel head оказалось несовместимым. Обратите внимание - этой модели все еще недостаточно для прохождения тестов, поэтому нам все еще нужны классификаторы замены Cobot. Кроме того, имена классов для этого классификатора и классификаторов замены Cobot различаются, поэтому для поддержки этой разницы были добавлены специальные функции для каждой такой темы.

Токсичная классификация — в наборе данных Kaggle (170 тыс. образцов). Примечание — чтобы сделать классификатор однозначным, в этот набор данных был добавлен класс non_toxic, как и в предыдущих многозадачных моделях.

Темы коботов — на приватном наборе данных DREAM-2, из которого был исключен самый частый «мусорный» класс (Phatic), а все многометочные примеры переведены в одноместный формат. Все эти меры сделали модель менее подходящей для «мусорных» классов, тем самым улучшив ее качество на реальных данных. Размер очищенного набора данных: 216 тыс. выборок

Темы диалогов коботов - на приватном наборе данных DREAM-2, из которого был исключен самый частый "мусорный" класс (other), все примеры с несколькими метками переведены в формат с одной меткой, а также удалена поддержка истории. Все эти меры сделали модель менее подходящей для «мусорных» классов, тем самым улучшив ее качество на реальных данных. Размер очищенного набора данных: 127 тыс. выборок

Диалоговые намерения кобота - на приватном наборе данных DREAM-2, из которого все примеры с несколькими метками были преобразованы в формат с одной меткой, а также удалена поддержка истории. Все эти меры сделали модель менее подходящей для «мусорных» классов, тем самым улучшив ее качество на реальных данных. Размер очищенного набора данных: 318 тыс. выборок

Также были опробованы идеи улучшения архитектуры: использование токенов task_specific в конкатенации с CLS для классификации или вместо CLS. Что не увенчалось успехом. Однако увеличение размера партии с 32 до 640 (для дистиллированной модели) или 320 (для обычной модели) привело к улучшению.

В сеттинге 25-12-2022 только классификатор Midas использовал историю. Обучение модели без истории с нуля почти не повлияло на производительность и, как это ни парадоксально, дало некоторое улучшение для Midas (настройка 3 VS настройка 2). И это позволило использовать в 2 раза меньшую максимальную длину последовательности и иметь только 1 предсказание модели для кэширования, что уменьшило время предсказания с 0,73 до 0,55 секунды.

Метрики

Setting 1 2 3 4 5
Task / model dataset modification? Train size Singletask, distilbert base uncased,batch 640 Multitask, distilbert base uncased, batch 640 Multitask, distilbert base uncased, batch 640, all tasks trained without history Singletask, bert base uncased, batch 320 Multitask, bert base uncased
batch 320
Use history in MIDAS training data yes yes no yes yes
Emotion classification (go_emotions) converted to multi-class 39.5к 70.47/70.30 68.18/67.86 67.59/67.32 71.48/71.16 67.27/67.23
Toxic classification(Kaggle #ERROR! 1.62m 94.53/93.64 93.84/93.5 93.86/93.41 94.54/93.15 93.94/93.4
Sentiment classification(DynaBench, v1+v2) no 94k 74.75/74.63 72.55/72.21 72.22/71.9 75.95/75.88 75.65/75.62
Factoid classification(Yahoo) no 3.6k 81.69/81.66 81.02/81.07 80.0/79.86 84.41/84.44 80.34/80.09
Midas classification only semantic classes 7.1k 80.53/79.81(with history) 72.73/71.56 (with history)
62.26 /60.68 (without history)
73.69/73.26(without history) 82.3/82.03(with history) 77.01/76.38(with history)
Topics classification(Dilya) no 1.8m 87.48/87.43 86.98/86.9 87.01/87.05 88.09/88.1 87.43/87.47
Cobot topics classification converted to single label no history, removed 1 widespread garbage class Phatic 216k 79.88/79.9 77.31/77.36 77.45/77.35 80.68/80.67 78.21/78.22
Cobot dialogact topics classification converted to single label no history, removed 1 widespread garbage class Other 127k 76.81/76.71 76.92/76.79 76.8/76.7 77.02/76.97 76.86/76.74
Cobot dialogact intents classification converted to single label no history 318k 77.07/77.7 76.83/76.76 76.65/76.57 77.28/77.72 76.96/76.89
Total(9in1) 4218k 80.36/80.20 78.48/78.22 78.36/78.15 81.31/81.12 79.3/79.11
GPU memory used, Mb 2418*9=21762 2420 2420 3499*9=31491 3501
Test inference time, sec ( for the tests) 0.76 0.55 ~ 1.33

Для достижения наилучшего компромисса между использованием памяти, временем вывода и тестовыми показателями использовалась модель из настройки 3 (многозадачность, база дистиллята без оболочки, партия 640). Теперь он объединен с dev как PR-213.

Новая многозадачность: экономия памяти графического процессора

Если бы мы относились абсолютно ко всем моделям как к однозадачным, то 6 моделей, заменяемых текущим комбинированным классификатором в DREAM (эмо, токсичные, сентиментальные и 3 модели коботов), заняли бы ~3500*6 ~ 21000 Мб памяти GPU. Классификатор Midas занял бы около 3500 МБ памяти графического процессора, поскольку он занимает текущий dev. Мы не учитываем модель классификатора тем, поскольку неясно, какие однозадачные классификаторы тем мы бы использовали. Если бы мы использовали тематический классификатор, подобный дистильберту, это заняло бы ~2418 МБ памяти GPU. В этом случае замена всех однозадачных моделей заняла бы ~27000 Мб памяти GPU. По сравнению с этим параметром наша многозадачность обеспечивает экономию памяти графического процессора примерно на 91%.

Эта экономия вызвана заменой многих BERT одним BERT, а также независимостью от трансформатора, которая помогла быстро добавить distilbert-base-uncased вместо BERT-base-uncased.

Использование памяти процессора для многозадачной модели: 2909 Мб. Если рассматривать абсолютно все модели как однозадачные, оценка экономии составит 25948 + 25940,6 = 22308 Мб. По сравнению с этим положением, наша многозадачность обеспечивает экономию памяти процессора примерно на 87%.

По сравнению с предыдущим разработчиком (где многозадачность 6in1 bert-base уже используется), наша многозадачность дает ~75% экономии памяти графического процессора, ~57% экономии процессора и ~80-85% экономии времени на вывод аннотаций. (Экономия времени вывода связана с тем, что текущая многозадачность намного быстрее, чем Midas, благодаря независимости от трансформатора, и нам больше не нужно использовать их оба).

Ссылки

Статья подана в печать.