Название статьи: SSMix: Saliency-Based Span Mixup for Text Classification Ссылка на бумагу:АР Вест V.org/PDF/2106.08…Код диссертации:GitHub.com/Помимо любви к OVA/что угодно…Автор статьи: {soyoungyoon и т. д.}
Абстрактный
Аугментация данных доказала свою эффективность для различных задач компьютерного зрения. Несмотря на большой успех текста, применение гибрида к задачам НЛП столкнулось с препятствием, поскольку текст состоит из дискретных токенов переменной длины. В этой работе мы предлагаем SSMix, новый гибридный метод, в котором операции выполняются над входным текстом вместо скрытых векторов, как в предыдущих методах. С помощью смешивания на основе диапазона SSMix синтезирует предложение, сохраняя при этом положение двух исходных текстов, и опирается на информацию о значимости, чтобы сохранить больше токенов, релевантных для прогнозирования. С помощью обширных экспериментов мы эмпирически подтвердили, что наш метод превосходит гибридные методы скрытого уровня по широкому спектру критериев классификации текста, включая импликацию текста, классификацию настроений и классификацию типов вопросов.
Было показано, что эффект увеличения данных эффективен в различных задачах компьютерного зрения. Хотя увеличение данных очень эффективно, применение смешивания к задачам NLP было препятствием из-за того, что текст состоит из дискретных символов переменной длины. В этой статье авторы предлагают алгоритм SSMix, алгоритм смешивания для улучшения качества входного текста, а не предыдущий метод для скрытых векторов. SSMix синтезирует предложение при условии сохранения исходных двух текстов путем смешивания на основе диапазона, сохраняя при этом положение двух исходных текстов и полагаясь на информацию о значимости, чтобы сохранить больше токенов, релевантных для предсказания. С помощью обширных экспериментов в документе подтверждается, что алгоритм превосходит гибридные методы скрытого уровня в широком диапазоне тестов классификации текста, включая вывод текста, классификацию настроений и задачи классификации типов вопросов.
Введение в алгоритмы
Увеличение данных становится все более важным в обработке естественного языка (NLP) из-за высокой стоимости сбора и маркировки данных. Некоторые из этих предыдущих исследований включают создание аналогичного текста на основе простых правил и моделей. Например, он обучается совместно с исходными образцами стандартными методами или расширенными методами обучения, а также есть улучшения на основе перепутанного интерполированного текста и меток.
Mixup и его варианты алгоритмов обучения стали распространенными методами регуляризации в компьютерном зрении для улучшения способности нейронных сетей к обобщению. Методы микширования делятся на микширование на входном уровне и микширование на скрытом уровне (смешение на скрытом уровне), оба из которых зависят от места операции микширования. Микширование на входном уровне является более общим подходом, чем микширование на скрытом уровне, из-за его простоты и способности фиксировать локальность, что приводит к большей точности.
Из-за дискретного характера текстовых данных и переменных длин последовательностей применение смешивания в NLP является более сложным и трудным, чем в компьютерном зрении. Поэтому в большинстве предыдущих попыток микширования текста микширование применялось к векторам вложений, таким как вложения или промежуточные представления. Однако, согласно расширенной интуиции компьютерного зрения, микширование на входном уровне обычно имеет преимущества перед микшированием на скрытом уровне. Эта мотивация побуждает авторов исследовать методы запутывания текстовых данных на уровне ввода.
В этой работе авторы предлагают SSMix (рис. 1), новый алгоритм аугментации гибридных данных с комбинированным интервалом (Span) на входном уровне. Во-первых, авторы запутывают, заменяя последовательные токены интервалами в другом тексте, вдохновленном CutMixarXiv, чтобы сохранить положение обоих исходных текстов в смешанном тексте. Во-вторых, диапазон, подлежащий замене, выбирается и заменяется на основе информации о значимости, чтобы смешанный текст содержал токены, более релевантные выходному прогнозу, которые могут быть семантически важными. Методы смешивания на уровне ввода для текста отличаются от методов смешивания на неявном уровне.В то время как текущие методы смешивания на неявном уровне линейно интерполируют необработанные скрытые векторы, наш метод смешивает текстовые символы на уровне ввода, создавая нелинейные выходные данные. В то же время шаг выбирается из каждого предложения с использованием значения значимости, а длина и коэффициент микширования диапазона определяются дискретно, в чем отличие от улучшения микширования скрытого уровня.
Эффективность SSMix была доказана в ходе обширных тестовых тестов классификации текста. Особо подчеркивается, что статья доказывает, что гибридные методы входного уровня обычно превосходят гибридные методы скрытого уровня. В документе также демонстрируется важность использования информации о значимости и ограничения выбора токенов на уровне промежутка при выполнении дополнения текстового микширования.
Алгоритм SSMix
Основной принцип SSMix таков: при наличии двух текстови, преобразовав текстФрагментзаменить на из другого текстасущественные фрагменты информациисоздать новый текст. Тем временем для нового текста, на основе двух текстовых метокипереписать на новый текстустановить новый ярлык. Наконец, вы можете использовать этот сгенерированный расширенный фиктивный образец (,) для обучения модели.
Важность: важная информация
Важность измеряет влияние каждого символа текстовых данных на конечный результат предсказания. Методы на основе градиента широко использовались для расчета заметности в предыдущих исследованиях, и в тексте также вычисляются потери при классификации.Вложение относительно вводаградиент , и используйте его величину как заметность:. Мы применяем норму l2, чтобы получить величину вектора градиента, представляющего значимость каждого символа в стиле PuzzleMix.
Смешивание текста: синтез текста
Как упоминалось ранее, микширование текста в основном относится к двум текстовым последовательностям.иКак синтезировать новый текст. Общая идея состоит в том, чтобы получить оценку значимости каждого символа в двух текстах в соответствии с методом вычисления градиентной заметности, а затем вычислить оценку заметности каждого символа в тексте.выберите сегмент с наименее значимым, длина, в текстевыберите сегмент с наименее значимым, длина. длина установлена на==,в– параметр отношения смешения. Наконец сгенерировать новый текстш это,викак исходный текстзаменить фрагмент влевая и правая части.
Длина выборки: равная длина фрагмента
Эта статья будет оригинальной () и замену () интервалы устанавливаются одинаковыми, в основном потому, что использование интервалов (сегментов) разной длины приведет к избыточным и семантически неоднозначным переходам смешивания. Кроме того, расчет коэффициента смешения между пролетами разной длины слишком сложен. Эта стратегия замещения того же размера также использовалась в предыдущих исследованиях. В случае замены промежутка на ту же длину алгоритм SSMix статьи может максимизировать эффект заметности. Поскольку SSMix не ограничивает положение символов, можно одновременно выбрать наиболее заметный диапазон и наименее заметный сегмент, подлежащие замене. Как на картинке 1,in this
в текстЭто не значимо,transcedent love
в текстявляется наиболее важным, то вы можете использоватьtranscedent love
заменятьin this
.
Микширование текста: синтез этикетки
Автор устанавливает коэффициент смешивания следующим образом:Поскольку λ пересчитывается путем подсчета количества символов внутри фрагмента, оно может быть не равно λ0. потомТеги:Алгоритм 1 показывает, как вычислить потерю примеси для расширенных выборок, используя пары исходных выборок. В формуле кросс-энтропийная потеря расширенного выходного логита по отношению к исходной целевой метке каждой выборки вычисляется и объединяется взвешенной суммой, поэтому алгоритм SSMix не зависит от количества меток в наборе данных. , выходная метка Масштаб вычисляется путем линейной комбинации двух исходных меток.
Задания на парные предложения: задания на пары предложений
Для задач, требующих пары текстов в качестве входных данных, таких как неявный текстовый вывод и классификация подобия, SSMix смешивает попарно и вычисляет коэффициент смешивания путем агрегирования количества токенов в каждом результате смешивания. данный образец,, синтезированный новый образец, коэффициент смешения записывается как,виЗамените фрагменты для каждой операции смешивания.
Как показано ниже:
- за «Развлечение только для детей».
- для «Развлечений для взрослых и детей».
- за «Проблемы синтеза данных».
- за «Вопросы синтеза данных».
Экспериментальная установка
Экспериментальный набор данных
Экспериментальный набор данных статьи имеет задачи классификации текста и классификации пар предложений:
Сравнительный эксперимент
В документе сравнивается SSMix с тремя базовыми уровнями: (1) стандартное обучение без смешивания, (2) EmbedMixMix и (3) TMix.Были сопоставлены экспериментальные результаты базовых исследований и исследований абляции. Все значения точности представляют собой среднюю точность (%) 5 прогонов с использованием разных семян. MNLI представляет точность набора разработчиков, не соответствующего MNLI. В документе сообщается о точности проверки GLUE, точности теста TREC и эффективной (верхней)/тестовой (нижней) точности ANLI, Видно, что SSMix лучше, чем другие алгоритмы гибридного улучшения в большинстве наборов данных.
Резюме статьи
- По сравнению с гибридным методом скрытого слоя, SSMix полностью демонстрирует свою эффективность на наборах данных с достаточным объемом данных. Поскольку SSMix представляет собой дискретную комбинацию, а не линейную комбинацию двух выборок данных, он создает больший диапазон выборок данных в составном пространстве, чем смесь скрытых уровней. В статье выдвигается гипотеза о том, что большие объемы данных способствуют лучшему представлению в синтетическом пространстве.
- SSMix особенно эффективен для наборов данных с несколькими метками классов (TREC, ANLI, MNLI, QNLI). Таким образом, в условиях обучения без перемешивания прирост точности SSMix на TREC-fine (47 меток) намного выше, чем у TRECcrare (6 меток), +3,56 и +0,52 соответственно. Наборы данных с несколькими метками общего класса повышают вероятность выбора для перекрестных меток при случайной выборке из смешанных источников, поэтому можно предположить, что эффективность смешивания в этих наборах данных классификации с несколькими метками значительно улучшится.
- Значительные преимущества в задачах с парными предложениями, таких как текстовая импликация или классификация сходства. Существующие методы (Hidden Layer Blending) применяют смешивание к скрытым слоям без учета специальных маркеров, т.е. [SEP], [CLS]. Эти методы могут привести к потере информации о начале предложений или правильном разделении пар предложений. Напротив, SSMix может учитывать свойства отдельных символов при применении микса.
- Результаты исследований абляции на SSMix и его вариантах показывают улучшенную производительность с увеличением ограничений на сегменты и информацию о значимости. Добавление ограничений сегмента в операцию смешивания дает преимущество в виде лучшей локализуемости, а наиболее значимые сегменты имеют больше связей с соответствующими метками, при этом отбрасываются наименее значимые сегменты, которые семантически не важны по сравнению с исходными метками. Среди них вклад введения важной информации в точность относительно выше, чем вклад ограничений сегмента.
Код
import copy
import random
import torch
import torch.nn.functional as F
from .saliency import get_saliency
class SSMix:
def __init__(self, args):
self.args = args
def __call__(self, input1, input2, target1, target2, length1, length2, max_len):
batch_size = len(length1)
if self.args.ss_no_saliency:
if self.args.ss_no_span:
inputs_aug, ratio = self.ssmix_nosal_nospan(input1, input2, length1, length2, max_len)
else:
inputs_aug, ratio = self.ssmix_nosal(input1, input2, length1, length2, max_len)
else:
assert not self.args.ss_no_span
input2_saliency, input2_emb, _ = get_saliency(self.args, input2, target2)
inputs_aug, ratio = self.ssmix(batch_size, input1, input2,
length1, length2, input2_saliency, target1, max_len)
return inputs_aug, ratio
def ssmix(self, batch_size, input1, input2, length1, length2, saliency2, target1, max_len):
inputs_aug = copy.deepcopy(input1)
for i in range(batch_size): # cut off length bigger than max_len ( nli task )
if length1[i].item() > max_len:
length1[i] = max_len
for key in inputs_aug.keys():
inputs_aug[key][i][max_len:] = 0
inputs_aug['input_ids'][i][max_len - 1] = 102
saliency1, _, _ = get_saliency(self.args, inputs_aug, target1)
ratio = torch.ones((batch_size,), device=self.args.device)
for i in range(batch_size):
l1, l2 = length1[i].item(), length2[i].item()
limit_len = min(l1, max_len) - 2 # mixup except [CLS] and [SEP]
mix_size = max(int(limit_len * (self.args.ss_winsize / 100.)), 1)
if l2 < mix_size:
ratio[i] = 1
continue
saliency1_nopad = saliency1[i, :l1].unsqueeze(0).unsqueeze(0)
saliency2_nopad = saliency2[i, :l2].unsqueeze(0).unsqueeze(0)
saliency1_pool = F.avg_pool1d(saliency1_nopad, mix_size, stride=1).squeeze(0).squeeze(0)
saliency2_pool = F.avg_pool1d(saliency2_nopad, mix_size, stride=1).squeeze(0).squeeze(0)
# should not select first and last
saliency1_pool[0], saliency1_pool[-1] = 100, 100
saliency2_pool[0], saliency2_pool[-1] = -100, -100
input1_idx = torch.argmin(saliency1_pool)
input2_idx = torch.argmax(saliency2_pool)
inputs_aug['input_ids'][i, input1_idx:input1_idx + mix_size] = \
input2['input_ids'][i, input2_idx:input2_idx + mix_size]
ratio[i] = 1 - (mix_size / (l1 - 2))
return inputs_aug, ratio
def ssmix_nosal(self, input1, input2, length1, length2, max_len):
inputs_aug = copy.deepcopy(input1)
ratio = torch.ones((len(length1),), device=self.args.device)
for idx in range(len(length1)):
if length1[idx].item() > max_len:
for key in inputs_aug.keys():
inputs_aug[key][idx][max_len:] = 0
inputs_aug['input_ids'][idx][max_len - 1] = 102 # artificially add EOS token.
l1, l2 = min(length1[idx].item(), max_len), length2[idx].item()
if self.args.ss_winsize == -1:
window_size = random.randrange(0, l1) # random sampling of window_size
else:
# remove EOS & SOS when calculating ratio & window size.
window_size = int((l1 - 2) *
self.args.ss_winsize / 100.) or 1
if l2 <= window_size:
ratio[idx] = 1
continue
start_idx = random.randrange(0, l1 - window_size) # random sampling of starting point
if (l2 - window_size) < start_idx: # not enough text for reference.
ratio[idx] = 1
continue
else:
ref_start_idx = start_idx
mix_percent = float(window_size) / (l1 - 2)
for key in input1.keys():
inputs_aug[key][idx, start_idx:start_idx + window_size] = \
input2[key][idx, ref_start_idx:ref_start_idx + window_size]
ratio[idx] = 1 - mix_percent
return inputs_aug, ratio
def ssmix_nosal_nospan(self, input1, input2, length1, length2, max_len):
batch_size, n_token = input1['input_ids'].shape
inputs_aug = copy.deepcopy(input1)
len1 = length1.clone().detach()
ratio = torch.ones((batch_size,), device=self.args.device)
for i in range(batch_size): # force augmented output length to be no more than max_len
if len1[i].item() > max_len:
len1[i] = max_len
for key in inputs_aug.keys():
inputs_aug[key][i][max_len:] = 0
inputs_aug['input_ids'][i][max_len - 1] = 102
mix_len = int((len1[i] - 2) * (self.args.ss_winsize / 100.)) or 1
if (length2[i] - 2) < mix_len:
mix_len = length2[i] - 2
flip_idx = random.sample(range(1, min(len1[i] - 1, length2[i] - 1)), mix_len)
inputs_aug['input_ids'][i][flip_idx] = input2['input_ids'][i][flip_idx]
ratio[i] = 1 - (mix_len / (len1[i].item() - 2))
return inputs_aug, ratio