Источник статьи | Облачное сообщество Hengyuan (Hengyuan Cloud, платформа общей вычислительной мощности, ориентированная на индустрию искусственного интеллекта.)
Исходный адрес |Dropout
Оригинальный автор | Матор
Говорить о том, что самые популярные статьи по НЛП в первой половине 2021 года не должны быть «SimCSE: Simple Contrastive Learning of Sentence Embeddings"Это не что иное, как. Полное название SimCSE — простое встраивание контрастных предложений.
Sentence Embedding
Встраивание предложений всегда было острой проблемой в области NLP, в основном из-за его широкого спектра приложений и краеугольного камня многих задач. Существует множество способов получения векторов предложений.Обычные из них включают прямое использование выходных данных позиции [CLS] в качестве вектора предложений или суммирование или усреднение выходных данных всех слов. Однако было доказано, что вышеупомянутые методы имеют проблему анизотропии. Вообще говоря, проблема непоследовательного представления Word Embedding в различных измерениях будет возникать в процессе обучения модели, поэтому полученные векторы предложений нельзя сравнивать напрямую.
Наиболее популярными способами решения этой проблемы являются:
- Линейные преобразования: BERT-поток, BERT-отбеливание. Эти два больше похожи на постобработку, которая облегчает проблему анизотропии, выполняя определенные преобразования векторов предложений, извлеченных BERT.
- Контрастное обучение: SimCSE. Идея контрастного обучения состоит в том, чтобы закрыть похожие образцы и оттолкнуть разнородные образцы, тем самым улучшив способность модели к представлению предложений.
Unsupervised SimCSE
SimCSE использует самоконтролируемое обучение для улучшения представления предложений. Поскольку SimCSE не имеет размеченных данных (неконтролируемых), каждое предложение рассматривается как похожее предложение. Грубо говоря, по существуВ качестве положительного примера,в качестве негативных примеров для обучения модели контрастивного обучения. Конечно, это далеко не просто: если в качестве положительных примеров использовать только два одинаковых образца, то способность к обобщению будет сильно снижена. Вообще говоря, мы будем использовать некоторые методы увеличения данных, чтобы сделать два образца положительного примера разными, но как сделать усиление данных в самом НЛП, также является проблемой.SimCSE предлагает очень простое и элегантное решение: прямое удаление в качестве увеличения данных!
Конкретно,Предложения получают вектор через Encoder с Dropout, а затем снова пропустите пакет предложений через Encoder (на этот раз еще один случайный Dropout), чтобы получить вектор, мы можемрассматривается как пара (немного отличающихся) положительных примеров, то цель обучения
в,. В самом деле, если формула (1) не виднаичасть, остальное очень нравится. установить в диссертации, что касается этогоЧто он делает, я видел некоторые объяснения в Интернете:
- Если вы используете косинусное сходство непосредственно в качестве входных логитов для, поскольку диапазон сходства косинусов равен, диапазон слишком малДать достаточно большой разрыв между положительными и отрицательными образцами невозможно, и в итоге получается, что модель недостаточно обучена, поэтому ее нужно корректировать, делить на достаточно малый параметрУвеличьте значение
- ГиперпараметрыОсновное внимание в обновлении модели будет сосредоточено на сложных отрицательных примерах, и они будут соответственно наказаны.Чем больше сложность, тем сложнее.Чем ближе расстояние, тем больше назначается пенальти. На самом деле, это тоже легче понять, мы будемразделить наЭто эквивалентно увеличению логит-значения отрицательной выборки из года в год, еслидостаточно малы, то теОтрицательные образцы ближе к 1, послебудет доминировать при увеличении
Лично я думаю, что недостаточно думать о значении формулы или символа с точки зрения восприятия без строгого математического доказательства, поэтому, ознакомившись с некоторыми материалами, яРоль этого гиперпараметра описана в другой статье:Параметры контрастной потериПонимание
Подводя итог методу SimCSE, я лично считаю его слишком изобретательным, потому что для людей очень субъективно судить о том, похожи ли два предложения, например: «Мне нравится Пекин» и «Мне не нравится Пекин». Я спрашиваю эти два предложения. Похожи ли слова? Модель подобна новорожденному ребенку: вы учите его тому, что эти два предложения похожи, затем он думает, что они похожи, вы учите его быть непохожим, так что позже он видит похожие предложения и думает, что они не похожи. В настоящее время производительность или точность модели мало связаны с процессом обучения, структурой модели и т. д. Именно люди или данные, отмеченные людьми, действительно влияют на результаты прогнозирования модели.
Но если вы спросите кого-нибудь, похожи ли два предложения «Мне нравится Пекин» и «Мне нравится Пекин», я не думаю, что нормальные люди скажут, что они различны. Метод SimCSE создания положительных выборок через Dropout можно рассматривать как наименьшую форму увеличения данных, потому что семантика исходного предложения и сгенерированного предложения полностью совпадают, но сгенерированное встраивание отличается. Это позволяет избежать ручной маркировки данных, или выборки в настоящее время очень объективны.
Alignment and Uniformity
Цель контрастивного обучения состоит в том, чтобы изучить высококачественное семантическое пространство представления из данных, так как же оценить качество этого пространства представления? Ван и Изола (2020) предложили две метрики для измерения качества сопоставительного обучения: согласованность и единообразие, где выравнивание вычисляетиСреднее расстояние:
И Uniformity вычисляет однородность общего распределения вектора:
Мы надеемся, что эти два показателя будут как можно ниже, то есть, с одной стороны, мы надеемся, что положительные образцы должны быть достаточно близки, а с другой стороны, семантические векторы должны быть максимально равномерно распределены по гиперсфере. , потому что равномерное распределение имеет самую высокую информационную энтропию, и чем больше распределение, тем более равномерно сохраняется информация. Автор случайным образом выбрал 100 000 предложений из Википедии для точной настройки BERT и протестировал его на устройстве STS-B. Результаты эксперимента представлены в следующей таблице:
Среди них None — это предложенный автором метод random Dropout, а остальные методы основаны на None.Внесите изменения, вы можете видеть, что добавление явных методов увеличения данных снизит производительность модели в разной степени. Эффект, наиболее близкий к Dropout, заключается в удалении слова, но удаление слова не приносит большого улучшения единообразия. Автор также специально Чтобы доказать это, был проведен эксперимент, как показано на следующем рисунке:
Connection to Anisotropy
В последние годы во многих исследованиях упоминалась проблема анизотропии в распределении семантических векторов, генерируемых языковыми моделями.Прежде чем обсуждать, почему контрастное обучение может решить проблему анизотропии векторов слов, давайте сначала разберемся, что такое анизотропия. В частности, если предположить, что наш вектор слова установлен в 2 измерения, если единичная длина базового вектора в каждом измерении различна, это анизотропия (Анизотропия)
Например, на рисунке ниже базисные векторы неортогональны и анизотропны (единичные длины не равны), вычислитеиПодобие cos равно 0,иКосинусное сходство также равно 0. Но с геометрической точки зренияиПо факту больше похоже, но по результатам расчета,ииСходство такое же, причина этой аномалии вызвана анизотропией
Авторы SimCSE показывают, что когда количество отрицательных выборок стремится к бесконечности, цель обучения контрастивному обучению может быть асимптотически выражена как:
Чтобы немного объяснить эту формулу, для удобства мы будем далееназывается первым членом,называется второй элемент.
Наша конечная цель состоит в том, чтобы надеяться, что уравнение (4) будет как можно меньше, В частности, если первый член больше, а второй член меньше, то общий результат будет очень мал. Первый элемент большой, что указывает на большое сходство между положительными парами выборок; второй элемент мал, что указывает на то, что сходство между отрицательными парами выборок невелико, что также является итоговой производительностью модели, которую мы надеемся увидеть.
Затем попробуем перейти от уравнения (1) к уравнению (4), заметив, что на самом деле
Отсюда следует не строгое равенство, а некоторая эквивалентность или пропорциональное отношение. Например, оригинал, здесь мы опускаем знаменатель, меняем его на математическое ожидание, а суммирование меняем на математическое ожидание, тогда
Далее мы можем получить нижнюю границу второго члена с помощью неравенства Дженсена:
Во-первых, часть знака равенства легко понять, т. е. математическое ожидание преобразуется в форму суммирования вероятностей, аиизменился обратноформа. Возможно, некоторые студенты не очень хорошо знают неравенство Дженсена, и здесь я кратко объясню его. для выпуклой функции,каки, то есть
Возвращаясь к доказательству уравнения (5), посколькуявляется выпуклой функцией, и мы будемрассматривается как,рассматривается как, используя неравенство Дженсена, чтобы получить
Спустя долгое время вспомним, что наша конечная цель — оптимизировать уравнение (4), или минимизировать второй член уравнения (4). ПредполагатьзаСоответствующая матрица встраивания предложений, а именноПервыйлиния. Тогда оптимизация второго члена эквивалентна минимизацииверхняя граница. Зачем? так какПредположим, мы нормализовали,В настоящее времяВсе диагональные элементы равны 1,представляет собой сумму собственных значений и является константой. Согласно Merikoski (1984), еслиВсе элементы положительны, тогдадаверхняя граница наибольшего собственного значения, поэтому, когда мы минимизируем второй член, мы на самом деле минимизируем косвенноНаибольшее собственное значение , т. е. неявно сглаживающее сингулярный спектр пространства вложения или делающее распределение пространства вложения более однородным
До сих пор я лично думаю, что основное содержание SimCSE было объяснено достаточно ясно.Что касается части обучения с учителем в исходной статье, я не буду здесь вдаваться в подробности, потому что по существу она заключается в изменении определений положительных пар выборок и пары отрицательных проб.
Results
Эксперименты оригинальной статьи очень богаты, читатели могут внимательно прочитать исходный текст, вот простая экспериментальная сравнительная таблица.
Общий результат анализировать нечего.Из приведенного выше рисунка мы можем узнать, что SimCSE достигла SOTA на нескольких наборах данных, и автор обнаружил, что цель предварительного обучения MLM была добавлена на основе исходной цели обучения, а потери двух целей были добавлены пропорциональноСовместное обучение может помешать SimCSE забыть знание уровня токена, тем самым улучшив эффект модели. Это меня немного удивляет. После стольких операций я, наконец, заставил модель лучше извлекать функции на уровне предложений. В результате я забыл знания на уровне токенов.
Code
Хотя в теории мы говорим, что SimCSE отправляет предложения в одном пакете на два кодировщика (эти два кодировщика отличаются только в Dropout), но на практике мы фактически копируем все образцы в пакете, и тогда вы можете передать кодировщик один раз . Предположим, что начальный вводДва предложения, скопируйте их первыми, то вектор предложения, полученный кодировщиком, равен, вопрос теперь в том, какой у нас лейбл?
Очевидно, мы знаем, что если задано, их метка равна 1; если задано, их метка равна 1, а другие случаи равны 0, поэтому мы можем дать нам следующую таблицу (где метка 1 — это позиция одного и того же предложения с другим встраиванием)
Приведенную выше таблицу можно преобразовать в метки:. Предполагая, что в исходном пакете 4 предложения, всего после копирования остается 8. В соответствии с расположением приведенной выше таблицы мы можем получить метку:. Достаточно сгенерировать метки по этому правилу, и это правило на самом деле достаточно очевидно, поэтому я не буду его объяснять.
import torch
import torch.nn.functional as F
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
def SimCSE_loss(pred, tau=0.05):
ids = torch.arange(0, pred.shape[0], device=device)
y_true = ids + 1 - ids % 2 * 2
similarities = F.cosine_similarity(pred.unsqueeze(1), pred.unsqueeze(0), dim=2)
# 屏蔽对角矩阵,即自身相等的loss
similarities = similarities - torch.eye(pred.shape[0], device=device) * 1e12
similarities = similarities / tau
return torch.mean(F.cross_entropy(similarities, y_true))
pred = torch.tensor([[0.3, 0.2, 2.1, 3.1],
[0.3, 0.2, 2.1, 3.1],
[-1.79, -3, 2.11, 0.89],
[-1.79, -3, 2.11, 0.89]])
SimCSE_loss(pred)
References
-
Китайские миссии все еще SOTA? Дополняем SimCSE некоторыми экспериментами
-
Сравнительное исследование SimCSE: что такое увеличение текста, мне просто нужно дважды отсеять
-
Чжан Цзюньлинь: Основы прогресса исследований в области сравнительного обучения
-
Сверхдетальное сравнительное исследование и очки знаний SimCSE