DL in NLP
12.5K subscribers
547 photos
13 videos
27 files
1.1K links
Новости и обзоры статей на тему обработки естественного языка, нейросетей и всего такого.

Связь: @dropout05 (рекламы нет)
Download Telegram
Давно я не рекомендовал тут других каналов про ML.
Gradient Dude похож на этот канал в плане техничности. В основном там можно увидеть статьи по CV, но вот недавно был пост и про controllable text generation.

Вот как автор описывает свой канал:
TL;DR for DL/CV/ML/AI papers from an author of publications at top-tier AI conferences (CVPR, NIPS, ICCV,ECCV).
Most ML feeds go for fluff, we go for the real meat.
Update Frequently, Update Fast: Retraining Semantic Parsing Systems in a Fraction of Time
Lialin et al. [UMass Lowell, Google]
https://arxiv.org/abs/2010.07865

Основная NLU компонена Google Assistant, Alexa и других ассистентов – это модель семантического парсинга, которая переводит фразы на естественном языке в команды. В проде, датасеты для таких систем часто обновляются. Например, в редкие интенты/слоты могут докинуть примеров. Но при каждой такой итерации приходится перетренировывать модель, что может занимать недели.

В этой статье предлагается использовать continual learning для решения этой проблемы. Вместо того, чтоы каждый раз учить новую модель, старая фантюнится немного хитрым методом. Главная сложность заключается в том, чтобы модель не потеряла в качестве на старом датасете. Для этого используется комбинация двух простых методов: sampling из старых данных и специальный вид регуляризации – EWC.

Экспериенты показывают, что такой простой подход позволяет сократить время на тренировку иногда в десятки раз, при этом качество финальной модели выходит такое же, как если бы она тренировалась с нуля.
Meta Learning and Its Applications to Natural Language Processing
https://meta-nlp-2021.github.io

Начнём с того, что это воркшоп по meta-learning в NLP, что уже интересно. И одним из спикеров будет Chelsea Finn, автор MAML. Вряд ли много кто из читалетей этого канала будет что-то сабмитить на этот воршоп, но зато на сайте есть отличная подборка материалов по meta-learning и meta-NLP включая курсы, ключевые статьи (разбитые по темам) и набор статей посвежее (листать до самого низа).
Оказывается, Google не выкладывал датасет C4 на котором тренировался T5, а выложили они лишь скрипт для его сборки. Всё бы хорошо, но на предобработку нужно несколько дней и несколько сотен CPU. AllenNLP выложили запрепроцешенную версию C4, теперь, чтобы скачать все 800Gb достаточно выполнить

sudo apt install git-lfs
git clone https://huggingface.co/datasets/allenai/c4
cd c4
git lfs pull --include c4/en


также обещают скоро выложить его в формате 🤗 Datasets, чтобы можно было загрузить в одну строчку из питона
GPT Understands, Too
Liu et al.
arxiv.org/abs/2103.10385

После BERT все как-то свыклись, что двунаправленные сетки и MLM всегда работают лучше, чем однонаправленные сетки и LM. Авторы p-tuning показывают, что мы просто не умеем готовить языковые модели.

Как мы обычно файнтюним LM. Мы подаём в неё текст text, берём последний хидден с последнего слоя и запихиваем его в классификатор, файнтюним всю модель. В p-tuning авторы предлагают модифицировать вход в модель и вместо text подавать promt_start text promt_end, где promtstart и promtend могут быть, например, эмбеддингами такого текста "Этот текст text позитивный?". Эмбеддинги слов "Этот текст" будут promt_start, а "позитивный" – promt_end.

Но авторы идут дальше и предлагают вместо эмбеддинов настоящих слов, подавайть в качестве promtstart и promtend просто произвольные тензоры, которые мы и будем обучать. При этом веса сети не обучаются. Следующий шаг, который они делают – это вставляют LSTM после этих псевдоэмбеддингов (утвержают, что тогда язык будет лучше моделироваться и работать лучше, но никаких ablation studies не дают🤦‍♂️).

В общем результаты: в их кспериментах p-tuning очень хорошо улучшает и BERT и GPT. Внезапно, GPT даже вырывается вперёд на SuperGLUE.
Few-Shot Text Classification with Triplet Networks
Wei et al.
arxiv.org/abs/2103.07552

Очень простой подход к few-shot. Тренируем ранжирующую сетку с triplet loss на основе BERT. Добавляем к этому всему аугментации данных (случайные добавления/выбрасывания/... слов). Называем умным словом curriculum learning то, что мы в начале учимся на настоящих данных, а потом на аугментированных (разве не наоборот обычно делают на кагле?). Увеличиваем силу аугментаций в течение тренировки. Добавляем к этому hard negative mining.
В результате эти хаки помогают заметно улучшить бейзлайн, в особенности hard negatives и усиление аугментаций.

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

код: github.com/jasonwei20/triplet-loss
ещё один обзор: andlukyane.com/blog/paper-review-nlptriplettricks
Learning Neural Network Subspaces
Wortsman et al. [Apple]
arxiv.org/abs/2102.10472

Как мы обычно тренируем сетки – выучиваем параметры W. Но вообще говоря в пространстве параметров нейросети очень много подходящих нам W. Есть уже довольно много работ, которые показывают, что различные подходящие нам W связаны друг с другом (обычно, непрямыми) линиями, на проятжени которых наша тестовая accuracy остаётся высокой. В этой статье предлагают вместо выучивания одного W, выучивать целый симплекс. Зачем это надо? Во-первых это интересно. Но есть и практическая польза, о ней ниже.

Сам алгоритм выучивания симплекса очень простой. У нас есть параметризованая линия P(a) в пространстве наших весов нейросети. Например, в случае симплекса P(a) = sum(a_i * W_i), где sum(a_i) = 1. Мы хотим подобрать N такие сетов параметров нейросети W_i (вершин симплекса), что на всей линии P(a) у нас будет низкий лосс. Звучит сложно, а решение очень классное. Мы просто применяем chain rule и он выдаёт нам обыкновенный градиент лосса по параметром нейросети (тот же, что вам выдаёт loss.backward() в торче) взвешенный на параметры линии a. Обучаем мы N вершин нашего симплекса W_i в одном и том же тренировочном цикле просто семплируя различные a из равномерного распределения.

На выходе получается симплекс, в котором каждая точка должна давать достаточно высокий тренировочную (а на практике и тестовую) accuracy. Как это можно использовать? Взять центральную точку этого симплекса в качестве параметров нейросети. В статье эта точка зачастую обходит по тестовой accuracy и обычные методы тренировки и stochastic weight averaging. Ещё при тренировке в лосс добавляют регяляризатор, максимизирующий квадрат косинусного расстояния между различными W_i, это позволяет немножко улучшить результат.
f(x, W) – нейросетка с параметрами W на вход которой пришёл x. l – лосс нейросетки (e.g., кросс-энтропия), D – датасет, U – равномерное распределение на симплексе P.
DeBERTa: Decoding-enhanced BERT with Disentangled Attention
He et al. [Microsoft]
arxiv.org/abs/2006.03654

Уже довольно старая статья, но наконец-то дошли до неё руки. DeBERTa до сих пор в топе по SuperGLUE, так что думаю она стоит обсуждения.

Три основных идеи:
1. Disentangled Attention (DA) – вместо складывания positional embedding и word embedding и рассчёта attention score на нём, мы считаем три attention score: word2word, word2position, posiiton2word. После чего складываем их.
2. Enhanced Mask Decoder – ужасное название, тк вообще не отражает сути метода. Идея в том, что так как DA учитывает только относительные позиции слов, было бы неплохо дополнительно дать модели и знание об абсолютных позициях. Это делают тем, что positional embeddings добавляют к хидденам последнего слоя DeBERTa прямо перед softmax.
3. Scale Invariant Fine-Tuning – нормализовыывать хиддены последнего слоя и добавлять в них шум. Используется при файнтюнинге, улучшает генерализацию на SuperGLUE. Описание очень неподробное и код для SIFT так и не зарелижен, может быть есть ещё какие-то детали.

Кстати DeBERTa доступна в 🤗 по AutoModel.from_pretrained("microsoft/deberta-base")
Вот так работает Disentangled Attention. H – это word embedding, P – это positional embedding.
В attention pattern DeBERTa куда меньше выражена центральная диагональ. Авторы утверждают, что это именно из-за disentangled attention.
Forwarded from Denis Sexy IT 🤖
Тут кто-то выложил веб-интерфейс чтобы мучать GPT модель от сбера, го генерировать глупые топ-10 списки: https://russiannlp.github.io/rugpt-demo/
Do sequence-to-sequence VAEs learn global features of sentences?
Bosc and Vincent, [MILA]
arxiv.org/abs/2004.07683

Короткий ответ на вопрос из заголовка: нет.
А теперь подбробнее. В NLP принятно считать, что если вы делаете автокодировщик, сжимающий ваше предложение в один вектор, а потом разжимающий его обратно, но лучше использовать VAE. Интуитивно это выходит из того, что дополнительная регуляризация в ELBo и семплирование из пространства латентных переменных позволят сделать вектора, лучше описывающие глобальные фичи предложения.

Авторы этой статьи показывают противоречащие этой интуиции результаты. Они показывают, что VAE склонны запоминать только первые несколько слов, а дальше пологаться на то, что декодер сможет правильно угадать остальные. Возможно, это в том числе следует из хака под названием free bits, который борется с локальным минимумом VAE, когда KL-tem равен нулю и модель просто производит шум и ничего не учит.

В конце статьи они предлагают исспользовать альтернативные энкодеры (Bag of Words (BoW) или предобученную LM с фиксированными весами) и альтарнативный декодер, который довольно хитрый и если я правильно понял, предсказывает BoW-вероятности слов предложения. На некоторых датасетах по классификации эти варианты улучшают F меру вплоть до 5 пунктов по сравнению с обычным VAE, это намекает на то, что BoW заметно улучшает представления VAE, а ещё точнее показывает, что VAE настолько плохо учит фичи, что даже BoW может быть лучше.
А для тех, кто ничего не понял из прошлого поста (не бескойтесь, вы неодиноки и вас много), я покидаю хорошие материалы по погружению в VAE для NLP.

1. Must read: VI туториал от Wilker Aziz и Phil Schulz: github.com/vitutorial/VITutorial
1. Оригинальная статья по VAE для NLP: Generating Sentences from a Continuous Space
1. Не самый ужасный код: github.com/rohithreddy024/VAE-Text-Generation
1. Berkeley, Unsupervised DL, Latent Variable Models
На выходных делал небольшой pet-project. Реимплементировал Learning Neural Network Subspaces. Держите поиграться, пишите про баги в комментариях.

gist.github.com/Guitaricet/cbad86efe1a919ef79cfb8814aa1f10b
Давно у нас не было постов вида "держите кучу ссылок"

1. Applied PyTorch 101 от Abhishek Thakur — самые основы пайторча начиная с тензоров и заканчивая даталоадерами (будут ещё видео). Выглядит неплохо, буду советовать студентам.
1. Language Interpretability Tool — тулза для визуализации и интерпретации трансформеров, кроме этого позволяет анализировать ошибки модели и прочие вещи. Выглядит куда более проработанной чем всё, что я видел раньше (демо, гитхаб)
1. NLP In Video Games — мне очень нравится эта идея в принципе, тк она может позволить упростить какие-то моменты геймдева, но NLP всё-таки ещё сыроват. Несмотря на это можно уже посмотреть на первые попытки что-то такое сделать.
1. What Will it Take to Fix Benchmarking in Natural Language Understanding? — рассуждения на тему того, почему текущие бенчмарки плохи и как делать более хорошие.
1. torchtyping — попытка решить проблему документации шейпов тензоров, а заодно и проверять это всё на лету. Надо будет попробовать.
1. MLOps: жизненный цикл ML-моделей — как известно, обучение моделек это 5% работы, в этом выступлении обсуждают остальные 95%.
1. Why Do Local Methods Solve Nonconvex Problems — современный обзор текущей теории обучения в диплёрнинге или попытки ответить на вопрос почему в нейросетках почти все локальные минимумы близки к глобальному.