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

Связь: @dropout05 (рекламы нет)
Download Telegram
The Lottery Ticket Hypothesis for Pre-trained BERT Networks
Chen et al.
arxiv.org/abs/2007.12223

TL;DR
BERT-инициализация упрощает нахождение билетов (вплоть до 90% sparsity), при этом билеты для одних задач обычно не работают для других. Исключение составляет MLM.

Подробнее:

Lottery ticket hypothesis - это очень интересная штука, которая заключается в том, что в инициализации большой нейросетки содержится маленькая подсеть, которая тренируема до качества всей сети. Другим языком - гипотетически, можно натренировать GPT-3 не с 160B параметров, а с, условно 16B (уменьшение параметров на 90%). Вопрос лишь в том, как инициализировать. Подсеть и инициализация, которые достигает качества полной сети называются winning ticket.

На данный момент эту гипотезу уже неплохо протестировали в задачах CV (sparsity 80%), но в NLP и конкретно в трансформерах результаты пока не такие впечатляющие (sparsity 20-40%).

В новой статье авторы исследуют эту гипотезу с BERT-инициализацией. Основные результаты такие: на каждой отдельной таске находят winning tickets с разреженностью от 40% (SQUAD) до 90% (QQP и WNLI). При этом эти билеты не трансферятся между прикладными задачами (нельзя использовать билет SQUAD для QQP и наоборот). Но winning ticket для MLM (70% sparsity) работает на многих задачах.

Статья не самая простая, но там очень много интересных вещей, которые сложно запихать в короткий обзор. Советую почитать.
В 🤗 добавили zero-shot classifier на основе обученной на MNLI модели.
Идея взята из статьи Yin et al. и заключается в том, что вы задаёте модельке вопросы вида "эта статья очень интересная", "позитивный отзыв" и она должна выдать согласуются эти два утверждения или нет. Чем мне этот подход нравится это то, что вы сами можете явно указать сет ваших ожидаемых классов, а не как в кластеризации / LDA.

Из статьи я не понял, насколько хорошо этот подход работает, но чего-то что можно запихать даже в маленький прод я бы не ожидал. Но для личных проектов или для какой-то первоначальной грязной разметки на которой вы предтренируете модель, после чего файнтюните её на своих supervised-данных почему бы и нет? Тем более это работает в 3 строчки кода:

from transformers import pipeline
clf = pipeline('zero-shot-classification')

prediction = clf(sequences="zero-shot is awesome!", candidate_labels=["positive", "negative"])


Ссылки:
1. Блог
1. Демо
1. Колаб
Andrej Karpathy опубликовал мега простую минимальную имплементацию языковой модели на трансформерах. Подобной штуки очень не хватало как для того, чтобы учить трансформер, так и для того, чтобы по быстрому поиграться с легковесной нейронной языковой моделькой (а не с 20000 строк кода в fairseq).
Очень советую посмотреть на код, может быть даже вдумчиво почитать. Хоть код и не идеален, он очень приятно читается.

И, кстати, вы тоже можете написать что-то подобное. Есть очень много областей, которые покрыты либо тяжёлыми фреймворками, либо низкокачественными случайными репозиториями с миллионом ноутбуков.

https://github.com/karpathy/minGPT
Forwarded from addmeto
Небольшой фантастический рассказ, в котором часть текста и диалог в конце написаны нейронкой GPT-3. Отдельно оцените по краям общение Автора и нейронки, по ней хорошо видно, что она неплохо поддерживает диалог на базе того что написано.

Очень, очень красивый эксперимент, показывающий как в ближайшем будущем будет работать парное написание текстов, ИИ и живой человек вместе дают результат намного лучше, чем каждый из них поотдельности https://jamesyu.org/singular/
Forwarded from Towards NLP🇺🇦
Multilingual NLP

Сейчас время начинать (или вспомнить, что забросили) новые учебные курсы. И, если честно, сейчас онлайн курсов невероятное количество и по классическому ML, и по deeplearning, и по NLP. Так, fast.ai перезапустили свой курс по глубокому обучению и, вдобавок, еще и книгу выпустили.

Но меня, если честно, из всего этого изобилия привлек новый курс под названием Multilingual Natural Language Processing. Курс начнется 1 сентября. Здесь самый разнообразный спектр тем — и переходы между простарнствами языков, перевод, разбор фонетической стороны языка. Поэтому, если вы уже устали от базы и классики, стоит обратить внимание.
Очередная новость из цикла "в 🤗 добавили"

В этот раз добавили модели PEGASUS, которые до сих пор около-сота по суммаризации. По личным ощущениям, они уже близки к тому, что можно попробовать использовать в реальных задачах.
Кажется, они все для английского, что не очень классно. Но при желании можно хитрыми способами подменить эмбеддинги и пофайнтюнить так, чтобы заработало на другом языке.

твит, модельки, статья
Рекомендуемый метод файнюнинга на новые языки. В статье файнтюнили берт на другой язык за 1-2 дня. Не вижу причины, почему бы пегасус не заработал.
Forwarded from DL in NLP (nlpcontroller_bot)
From English To Foreign Languages: Transferring Pre-trained Language Models
Tran [Amazon Alexa AI]
arxiv.org/abs/2002.07306

Когда ты видишь статью с одним автором - это либо полный трэш, либо что-то действительно интересное. В случае с этой статьёй:
With a single GPU, our approach can obtain a foreign BERTbase model within a day and a foreign BERTlarge within two days

Основная идея:
1. Инициализировать эмбеддинги нового языка (L2) с помощью эмбеддингов старого языка (L1). Каждый эмбеддинг L2 - это взвешенная сумма некоторых эмбеддингов L1. Веса находят либо с помощью word transition probability (см. статистический MT) либо с помощью unsupervised embedding alignment (см. Artexe 2018)
2. Обучить эмбеддинги BERT на данных L2 (остальные веса заморожены)
3. Обучить BERT на данных L1 + L2

Результаты заметно лучше mBERT на XNLI и немножко лучше на dependency parsing. Абляционные исследования показывают, что инициализация критически важна.
PEGASUS: Pre-training with Extracted Gap-sentences for Abstractive Summarization
Zhang et al. [Google], Jul 2020
arxiv.org/abs/1912.08777

В канале, оказывается, не было обзора PEGASUS. Пришло время наверстать упущенное.

В статье предлагают новый метод предтренировки, специально заточенный под суммаризацию - Gap Sentences Generation (GSC). Идея аналогична MLM/BART и прочим, но вот ключевые отличия: один MASK токен маскирует целое предложение; генерируется только замаскированное предложение, а не весь текст; предложение для маскирования выбирается с учётом функции важности согласно ROUGE1-F1.

Результат: 12 сот

Самая лучшая из моделек в статье обучалась на два objective: MLM и GSC на корпусе из новостных текстов размером в 3.8TB 😮
Из интересных подробностей:
1. Синусоидальные позиционнные эмбеддинги, вместо обучаемых
1. Adafactor вместо ADAM
1. Unigram-токенизация вместо BPE
1. Батч 8129
1. Максимальная длина текста 512 токенов, при этом благодаря синусоидальным эмбеддингам обученная моделька вполне себе раборает с более длинными текстами
Forwarded from DeepPavlov notifications
Всем привет!
Как вы могли знать, команда лаборатории участвовала в конкурсе Amazon Alexa Prize. Сейчас мы готовим аналог SocialBot только со своими графами, классификаторами и т.д. и приглашаем вас пообщаться с нашим ботом. Мы очень хотим услышать 🙏 вашу обратную связь.
Тестировать можно через Telegram или beta website. А оставить фидбек можно в канале private discussion group. Нам важен каждый диалог 🙏

P.s пожалуйста, не делитесь ни с кем ссылкой, потому что это пока бета-релиз.
Training BatchNorm and Only BatchNorm: On the Expressivity of Random Features in CNNs
Frankle et al. [FAIR]
arxiv.org/abs/2003.00152

Не совсем про NLP, но довольно безумные результаты, что всегда интересно. Мы все знаем про BatchNorm и что он классый. Что он делает, это меняет среднее и дисперсию своего инпута. Эти два вектора - как изменится средние и дисперсия в каждом канале - тренируемые и лично меня их наличие всегда сбивало с толка.

Теперь они сбивают меня с толка ещё сильнее. В статье показвыают, что если в ResNet тренировать только параметры BatchNorm, она вполне себе неплохо работает. В смысле, конечно, плохо. Но на CIFAR и ImageNet гораздо лучше случайного классификатора. И гораздо лучше, чем если тренировать такое же число каких-то других параметров сети либо если тренировать только финальный линейный слой. Эффект заметнее на более глубоких сетках (>50 слоёв).

Что это означает: рандомные нейросети извлекают не самые плохие фичи, а так же что управлять распределением этих фичей очень важно.
BatchNorm - тренируем только gamma и beta, 2 Random Params Per Channel - тренируем по два параметра в каждом слое (и канале), Output - тренируем только последний линейный слой
Ещё одна классная картинка. На ней видно, что BatchNorm выступает в роли селектора фичей. Много какие просто зануляются.
Знаете ли вы как генерируются такие анимации? Допустим у вас есть GAN, она генерит что-то из распределения вашего датасета. Но как это анимировать?

У GAN есть свое латентное пространство, смещение в котором ведет к плавным изменениям картинки. Каким? Зависит от направления в котором сместились. Если знать в какую сторону двигаться, можно менять отдельные свойства (например небо) и достигать желаемых результатов. Все как в жизни 🙃

NLP это здорово, но если вы хотите быть ценным специалистом в ИИ и нейросетях, вам желательно также понимать что происходит и в других областях. Так например Трансформеры были успешно использованы для object detection, просто потому что автор был всесторонне развит. Есть такой канал — эйай ньюз — его ведет Леша из Facebook AI Research, который комментирует главные события в мире ML/AI со своей профессиональной точки зрения. Это как раз тот канал который можно смело советовать всем, кто хочет следить за новыми алгоритмами, и начать понимать чуть-лучше как они работают.
Иннополис зовёт на свой виртуальный семинар. Будут говорить про NLPшечку и не только.

Вот что они говорят про себя:

В этот раз будем общаться про технологии обработки естественного языка (NLP), оптимальные ML-решения, узнаем для чего нужна еще одна библиотека машинного обучения NeoML, а также рассмотрим архитектуру бота от DeepPavlov.ai

Наши спикеры:
- Станислав Ангелюк, Team Lead Common Libraries в ABBYY
- Константин Фролов, Machine Learning Engineer в Контур
- Федор Игнатов, Senior Software Engineer в Deeppavlov.ai

Комментарии от экспертов:
- Михаил Бурцев, руководитель проекта в Deeppavlov.ai
- Александр Мазалов, основатель MutuAlies и mITy.law.
- Влад Виноградов, со-основатель и руководитель направления CV в EORA Data Lab

Когда: 3 сентября в 18:00
Регистрация и подробности докладов
Начался сентябрь а с ним и семинары 🎉
Forwarded from Katya Artemova
Всем привет!

Новый сезон семинаров об NLP в Вышке откроет рассказ о RussianSuperGlue.

Аннотация: In this talk, we introduce an advanced Russian general language understanding evaluation benchmark -- RussianGLUE.
Recent advances in the field of universal language models and transformers require the development of a methodology for their broad diagnostics and testing for general intellectual skills - detection of natural language inference, commonsense reasoning, ability to perform simple logical operations regardless of text subject or lexicon. For the first time, a benchmark of nine tasks, collected and organized analogically to the SuperGLUE methodology, was developed from scratch for the Russian language. We provide baselines, human level evaluation, an open-source framework for evaluating models.
Докладчик: Alena Fenogenova
Chief specialist NLP R&D, CDS office, Sberbank

О докладчике:
Alena Fenogenova has a Master degree in Computational linguistics at the Higher School of Economics, Moscow.
She has a number of publications in NLP field. Now Alena works in Sberbank in NLP research team. Her research interests are language understanding, question answering, etc.

Форма регистрации: https://cs.hse.ru/ai/computational-pragmatics/announcements/394600693.html

Алгоритм регистрации: надо заполнить форму, ближе к семинару вам придет письмо с ссылкой на zoom и паролем.
PyTorch Performance Tuning Guide - Szymon Migacz, NVIDIA
youtube

TL;DR от Andrey Karpaty:

1. Ставьте num_workers > 0 и pin_memory=True в даталоадерах
1. torch.backends.cudnn.benchmark = True
1. Используйте максимально возможный batch size, который помещается в память
1. Не забудьте ставить bias=False в слоях перед BatchNorm
1. Используйте for p in model.parameters(): p.grad = None вместо model.zero_grad(). Если я правильно понял, то таким образом градиенты зануляются не на уровне кода pytorch, а на уровне кода GPU.
1. Выключайте debug API в проде
1. Всегда используйте DistributedDataParallel вместо DataParallel, даже если вы не destributed
1. Если работаете с последовательностями, балансируйте ваши батчи так, чтобы длина последовательности на разных GPU была примерно одинакова. От себя добавлю, что самый простой способ сделать это - использовать gradient accumulation
1. Используйте fused optimizer из apex, вместо дефолтных pytorch оптимизаторов
1. Используйте чекпоинтинг для memory-intensive операций бэкварда (звучит сомнительно)
1. Используйте @torch.jit.script чтобы фьюзить ваши самописные pointwise функции (e.g. GELU)