Size: a a a

gonzo-обзоры ML статей

2020 May 23
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
Levenshtein Transformer
Jiatao Gu, Changhan Wang, Jake Zhao
Facebook AI, 2019

Статья: https://arxiv.org/abs/1905.11006
Код: https://github.com/pytorch/fairseq/tree/master/examples/nonautoregressive_translation

#nlp #nlg #nonautoregressive #transformer

В этой работе делается следующий логичный шаг — что, если дать модели возможность не только вставлять, но и удалять токены?

Опять таки, используют подход imitation learning, причём в этом случае действительно используют roll-in policy, как стохастические смеси текущей policy и оракула. Обучаемую policy представляют как композицию трёх независимых: предсказание удаления токенов (по битовой маске), выбор плейсхолдеров среди доступных между уже имеющихся токенов (как в Insertion Transformer) и выбор токенов для заполнения плейсхолдеров (как при MLM). Эти три действия (удаление, генерация плейсхолдеров, заполнение плейсхолдеров) делаются за один шаг, тремя разными головами Transformer-сети. Награда вычисляется как расстояние Левенштейна с обратным знаком до таргета.

За счёт двойственности операций вставки и удаления предлагается использовать хитрый "dual policy learning" -- т.е. одновременно учат вставлять токены (из roll-in смеси выхода шага удаления и таргета со случайно удалёнными токенами) и удалять токены (из смеси исходной строки и результатов шага вставки). В качестве эксперта/оракула пробуют эвристики над ground truth таргетами или менее шумную авторегрессионную модель — просто LM, обученную на том же датасете, из которой с помощью beam-search сэмплят оптимальный псевдо-ground truth. Таким образом, на каждом шаге насэмпленное из экспертной policy используется, как траектория в окрестностях которой (с точностью до стохастической смеси) мы оптимизируем нашу модель. После пробных запусков обнаружили, что нужен дополнительный костыль в виде штрафа за неиспользованные плейсхолдеры.

Выяснили, что на фазе inference лучше всего работает жадное сэмплирование. Остановка сэмплирования производится по зацикливанию или по таймауту (по числу итераций). Проверяли на задачах перевода, суммаризации и "automatic post-editing for machine translation". Эксперименты показывают сильное увеличение эффективности почти без потерь в качестве, как на задачах генерации, так и на задачах редактирования текстов.

Здесь же, до кучи, упомяну свежую статью Blank Language Models (arxiv:2002.03079), она довольно похожа на Levenshtein Transformer, но почему-то мало его цитирует и совсем с ним не сравнивается. Желающие могу ознакомиться.
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
Imputer: Sequence Modelling via Imputation and Dynamic Programming
William Chan, Chitwan Saharia, Geoffrey Hinton, Mohammad Norouzi, Navdeep Jaitly
Google Research, 2020

Статья: https://arxiv.org/abs/2002.08926

#nlp #nlg #nonautoregressive #transformer #2020

Статья чуть в стороне от предыдущих, но вне всяких сомнений с ними сильно связанная. Авторы решают задачу seq2seq генерации выровненных последовательностей. Например, на входе модели запись звука, а на выходе нужно получить не просто текст, но соответствие (alignment) текстовых токенов конкретным участкам звуковой последовательности.

Формализация задачи выглядит так: пусть если входная последовательность Х. Наша задача сгенерировать выходную последовательность У такой же длины из текстовых токенов (из заданного словаря) + специального токена "_", такую, что каждый элемент выходной последовательности сопоставлен соответствующему по порядку элементу входной последовательности. Эта выходная последовательность называется alignment. Удалением токенов "_" из alignment можно получить  выходной текст. Будем в этом случае говорить что этот alignment совместим с этим текстом (с одним текстом м.б. совместимо много alignment-ов). Отметим, также, что длина текста (в токенах) должна быть меньше либо равна длине входной последовательности, это часть постановки задачи.

Кроме того, добавим в наш словарь специальный маскирующий токен [MASK].

Imputer использует архитектуру трансформера, где звуковой вход подаётся через CNN, в результате получаются последовательность звуковых фичей, и они добавляются к эмбеддингам токенов текстового входа в соответствующих позициях, а дальше сеть устроена как обычный BERT. Текстовый вход изначально состоит только из символов [MASK]. Выходом сети также является последовательность из текстовых токенов (в т.ч. из специальных токенов [MASK] и "_").

Зачем такой модели вообще текстовый вход? Дело в том, что авторы предлагают делать несколько итераций — на первой итерации модель видит, по сути, только звуковой вход (на текстовый подаются только [MASK]) и формулирует некоторую гипотезу относительно alignment. На последующих итерациях она получает на вход свою же предыдущую гипотезу и пытается с учётом звукового входа её улучшить. Число таких шагов фиксировано и не зависит от входных данных (в экспериментах делали 8 итераций). Этот процесс можно рассматривать, как некоторый компромисс между генерацией всего alignment за один проход (тут минус в том, что токены на выходе получаются независимыми) и генерацией по одному шагу слева направо (это дорого и долго).

Основной вопрос опять в том, как такую штуку учить.

В качестве первого варианта предлагается опять-таки воспользоваться imitation learning, для этого надо определить экспертную policy и roll-in policy. Авторы берут в качестве эксперта лучший эмпирический alignment, найденный с помощью динамического программирования, и немного его зашумляют. Затем, полученные alignment частично закрывают масками, для чего рассматривается несколько вариантов masking policy: uniform, Bernoulli, блочный (на тестах немного лучше оказался вариант с Bernoulli).

Но в первом варианте мы используем эксперта и как target на этом шагу (для расчёта loss) и как roll-in policy, что не очень надёжно, поэтому в качестве второго варианта предлагается использовать эксперта как roll-in policy, но при расчёте loss честно маргинализовать по всем возможным alignment, совместимым с текущим входным текстом. У такого усложнённого варианта есть эффективное решение с помощью динамического программирования.

Отдельно авторам удалось показать, что первый вариант (imitation learning) является нижней оценкой для второго варианта (dynamic programming), а второй вариант в свою очередь является нижней оценкой для честного log-likelihood.
источник
gonzo-обзоры ML статей
Эксперименты проводили на датасетах WSJ и LibriSpeech, в качестве метрик использовали CER и WER. На WSJ обогнали по качеству другие неавторегрессионные модели, но чуть не дотянули до лучшей авторегрессионной. На LibriSpeech обогнали всех. Вариант dynamic programming везде оказался лучше, чем просто imitation learning.
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
На этом я заканчиваю серию постов о современных неавторегрессионных генеративных моделях, я наверняка пропустил какие-то релевантные статьи, но, кажется, самые важные я перечислил. В любом случае, тема эта популярная, так что думаю, моделей будет ещё много. Написать о замеченных ошибках или просто обсудить эти и другие статьи можно, как обычно, в официальном чатике нашего канала: https://t.me/joinchat/BVpazxaJ5vHOsrnZ2xRlaQ
источник
2020 May 25
gonzo-обзоры ML статей
Longformer: The Long-Document Transformer
Iz Beltagy, Matthew E. Peters, Arman Cohan
Статья: https://arxiv.org/abs/2004.05150
Код: https://github.com/allenai/longformer
Longformer также на подходе (Work in Progress) в общеизвестной библиотечке от Huggingface: https://huggingface.co/transformers/model_doc/longformer.html

Свежие трансформеры. На этот раз от Allen Institute for AI.

Общеизвестная проблема трансформера — квадратичная относительно размера входа сложность механизма внимания. Из-за этого, в частности, нет нормальной возможности работать с длинными документами, которые не влезают целиком в attention span трансформера (обычно не более 512 токенов). Приходится исхитряться, и наиболее частый подход -- резать на окна фиксированного размера (обычно с перекрытием) и бежать по всей последовательности, как-то потом агрегируя активации каждого из окон. Хочется уметь делать это естественнее.

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

Из подходов первого типа, которые наиболее на слуху, можно вспомнить, пожалуй, Sparse Transformer от OpenAI (https://arxiv.org/abs/1904.10509, https://t.me/gonzo_ML/65) или Reformer от Гугла (https://arxiv.org/abs/2001.04451, https://t.me/gonzo_ML/176). В первом были кастомные разреженные ядра, во втором приближённое вычисление внимания через locality-sensitive hashing. Из интересных был ещё также Adaptive attention span (https://arxiv.org/abs/1905.07799, https://t.me/gonzo_ML/99).

Из второго типа можно вспомнить Transformer-XL (https://arxiv.org/abs/1901.02860, https://t.me/gonzo_ML/62), а также недавний Compressive Transformer от DeepMind (https://arxiv.org/abs/1911.05507, https://t.me/gonzo_ML/165).

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

Предлагается следующее: вместо полного n^2 внимания делаем более гибкие варианты, акцентирующиеся на локальном контексте (который в разных попытках изучения Берта показал свою важность), а также добавляем когда надо элементы глобального контекста.

Локальный контекст добавляется через внимание скользящим окном (разрешаем self-attention только внутри окна фиксированного размера), возможно также делая это окно разреженным (dilated). Это всё уже совсем похоже на свёртки, только не с фиксированным ядром, а с вычисляемым по данным. Такая работа в природе была, и хоть её представляли на ICLR 2019, всё равно она, кажется, несколько недооценена (https://arxiv.org/abs/1901.10430, Pay Less Attention with Lightweight and Dynamic Convolutions).

К локальному контексту добавляется глобальный для предопределённых входных позиций. В случае аналогичных берту задач классификации это позиция [CLS], или, например, позиции токенов вопроса для QA задач.

Соответственно в модель вводятся отдельные Q, K, V (если эти термины непонятны, то рекомендую лучшую статью по трансформеру, что я видел http://jalammar.github.io/illustrated-transformer/) для скользящего окна и для глобального внимания.

Полученные механизмы внимания скейлятся линейно относительно входа. Профит!

В этом месте есть инженерная проблема. Наивная реализация таких вариантов внимания слишком медленная, требуются кастомные ядра для CUDA. Это сделано с помощью Tensor Virtual Machine (TVM, https://tvm.apache.org/, https://arxiv.org/abs/1802.04799) с помощью которой можно описать функцию на сравнительно высокоуровневом питоноподобном языке (https://github.com/allenai/longformer/blob/master/longformer/diagonaled_mm_tvm.py#L52), а затем скомпилировать в целевую архитектуру, например, CUDA. Таким образом написали ядро, которое вполне сносно работает (но потенциал ускорения ещё есть).
источник
gonzo-обзоры ML статей
Проверяют лонгформер на задаче посимвольного авторегрессионного языкового моделирования, результат -- новый SoTA на text8 и enwiki8. При этом обучают на последовательностях длины до 23040 с помощью многоэтапной процедуры (сразу на больших обучаться сложно, поэтому начинают с маленьких размеров). При оценке проверяют на длинах до 32256. Всё это делают на карточках Quadro RTX8000 с 48 гигов памяти, и обучение с mixed-precision (fp16+fp32). Интересно, что внимание не смогли перевести на fp16, получили переполнение, оставили на fp32. Наверное, на TPU или свежих чипах NVIDIA помог бы bfloat16 (https://medium.com/@moocaholic/fp64-fp32-fp16-bfloat16-tf32-and-other-members-of-the-zoo-a1ca7897d407). В любом случае, длины до 30К это круто. Правда, кажется, что один из ключевых моментов здесь это таки гигантская доступная память (особенно с учётом fp16). Не пытайтесь повторить это на вашей 1080Ti…

Также проверяют на более сложных языковых задачах с файнтюнингом. Для файнтюнинга берут обученную RoBERTa (требуются лишь небольшие доработки, чтобы вставить в неё новый предложенный механизм внимания), дообучают на Masked Language Modeling на нескольких датасетах с большими текстами, и файнтюнят на задачи Question Answering, Coreference Resolution и Document Classification. Работает хорошо, есть прирост относительно RoBERTa. И получают SoTA на WikiHop и TriviaQA.

Короче, интересная движуха. Она не единственная, дальше расскажу про ещё несколько. На подходе трансформеры для работы с большими текстами!
источник