Получи случайную криптовалюту за регистрацию!

DL in NLP

Логотип телеграм канала @dlinnlp — DL in NLP D
Логотип телеграм канала @dlinnlp — DL in NLP
Адрес канала: @dlinnlp
Категории: Технологии , Образование
Язык: Русский
Страна: Россия
Количество подписчиков: 8.30K
Описание канала:

Новости и обзоры статей на тему обработки естественного языка, нейросетей и всего такого.
Связь и реклама: @dropout05

Рейтинги и Отзывы

4.33

3 отзыва

Оценить канал dlinnlp и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

1

4 звезд

2

3 звезд

0

2 звезд

0

1 звезд

0


Последние сообщения 23

2021-04-05 22:36:54
На выходных делал небольшой pet-project. Реимплементировал Learning Neural Network Subspaces. Держите поиграться, пишите про баги в комментариях.

gist.github.com/Guitaricet/cbad86efe1a919ef79cfb8814aa1f10b
1.9K viewsnlpcontroller_bot, 19:36
Открыть/Комментировать
2021-04-05 19:42:23
А для тех, кто ничего не понял из прошлого поста (не бескойтесь, вы неодиноки и вас много), я покидаю хорошие материалы по погружению в 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
1.9K viewsnlpcontroller_bot, edited  16:42
Открыть/Комментировать
2021-04-05 19:30:44 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 может быть лучше.
1.8K viewsnlpcontroller_bot, 16:30
Открыть/Комментировать
2021-04-03 17:25:59
Тут кто-то выложил веб-интерфейс чтобы мучать GPT модель от сбера, го генерировать глупые топ-10 списки: https://russiannlp.github.io/rugpt-demo/
1.4K viewsVlad Lialin, 14:25
Открыть/Комментировать
2021-04-02 18:38:35
В attention pattern DeBERTa куда меньше выражена центральная диагональ. Авторы утверждают, что это именно из-за disentangled attention.
2.0K viewsnlpcontroller_bot, 15:38
Открыть/Комментировать
2021-04-02 18:38:34
Вот так работает Disentangled Attention. H – это word embedding, P – это positional embedding.
1.8K viewsnlpcontroller_bot, 15:38
Открыть/Комментировать
2021-04-02 18:38:34 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")
1.8K viewsnlpcontroller_bot, edited  15:38
Открыть/Комментировать
2021-04-01 19:58:14
1.8K viewsVlad Lialin, 16:58
Открыть/Комментировать
2021-04-01 19:56:24
f(x, W) – нейросетка с параметрами W на вход которой пришёл x. l – лосс нейросетки (e.g., кросс-энтропия), D – датасет, U – равномерное распределение на симплексе P.
1.8K viewsnlpcontroller_bot, 16:56
Открыть/Комментировать
2021-04-01 19:56:24 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, это позволяет немножко улучшить результат.
1.9K viewsnlpcontroller_bot, edited  16:56
Открыть/Комментировать