Градиентное погружение
4.61K subscribers
179 photos
11 videos
10 files
164 links
Обсуждаем новости, рассказываем про ML с кодом и колабом, выигрываем соревы 🏆

Контакты: @Cene655, @Cucu_LaPraline
Download Telegram
CC12M (Conceptual 12M)
Что это такое? Датасет содержащий 12 миллионов пар текст-изображение на английском языке.

Теперь на русском силами одного из админов💪
Kaggle датасет
Гугл формы
Ну а точнее формат интерактивной работы в колабе

Если вы не первый день в теме дата саенса, то скорее всего встречали его. Простой и полезный формат, помогающий улучшить восприятие кода(скрыть плохой код).

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

Помимо этого существует более расширенных вариант, представленный в виде виджета - ipywidgets.

ipywidgets - пример(нужно запустить)
Доступный пример использования в колабе
Julia
Мы хотим язык с открытым исходным кодом, с либеральной лицензией. Мы хотим скорость C с динамизмом Ruby. Нам нужен гомоиконичный язык с настоящими макросами, как Lisp, но с очевидными, знакомыми математическими обозначениями, такими как в Matlab. Мы хотим что-то такое же удобное для общего программирования, как Python, такое же простое для статистики, как R, такое же естественное для обработки строк, как Perl, такое же мощное для линейной алгебры, как Matlab, и способное склеивать программы вместе как оболочку. Нечто простое в освоении, но при этом радующее самых серьезных хакеров. Мы хотим высокой интерактивности и эффективной компиляции. Мы ведь не слишком многого просим, верно?
🔥4
В посте выше приведены слова разработчиков языка. Действительно, их продукт получился интересным, благодаря чему смог обрести популярность в очень узких кругах.

Для Julia существуют инструменты, способные заменить набор среднестатистического питониста-датасаентиста(ну или как минимум заинтересовать его).

Самая интересная фича:
Возможность запуска питоновских библиотек из под Julia.
Т.е. вы можете запускать sklearn и юзать модели в вашем коде, но при этом выполнять обработку больших данных значительнее быстрее нативного питона.

Попробовать это чудо можно без смс и регистрации в онлайне.
Ну а для самых пытливых - годная книжка
👍3
Возможно тема джулии кого-то заинтересовала, поэтому ловите подгон в виде списка полезных ресурсов(к сожалению только англ).
Ссылка на русскоязычное комьюнити. Оно почти не активничает, но что-то спросить все же можно.
Хозяйке на заметку: если вам нужно относительно качественно перефразировать предложение, можно сделать это методом back-translation: перевести его русского на английский и назад на русский.
Чтобы не получить на выходе то же самое предложение, можно запретить модели-переводчику воспроизводить n-граммы (токенные), встречавшиеся в исходном предложении.
Кажется, получается дёшево и сердито.
import torch
from transformers import FSMTModel, FSMTTokenizer, FSMTForConditionalGeneration
tokenizer = FSMTTokenizer.from_pretrained("facebook/wmt19-en-ru")
model = FSMTForConditionalGeneration.from_pretrained("facebook/wmt19-en-ru")
inverse_tokenizer = FSMTTokenizer.from_pretrained("facebook/wmt19-ru-en")
inverse_model = FSMTForConditionalGeneration.from_pretrained("facebook/wmt19-ru-en")
model.cuda();
inverse_model.cuda();

def paraphrase(text, gram=4, num_beams=5, **kwargs):
""" Generate a paraphrase using back translation.
Parameter `gram` denotes size of token n-grams of the original sentence that cannot appear in the paraphrase.
"""
input_ids = inverse_tokenizer.encode(text, return_tensors="pt")
with torch.no_grad():
outputs = inverse_model.generate(input_ids.to(inverse_model.device), num_beams=num_beams, **kwargs)
other_lang = inverse_tokenizer.decode(outputs[0], skip_special_tokens=True)
# print(other_lang)
input_ids = input_ids[0, :-1].tolist()
bad_word_ids = [input_ids[i:(i+gram)] for i in range(len(input_ids)-gram)]
input_ids = tokenizer.encode(other_lang, return_tensors="pt")
with torch.no_grad():
outputs = model.generate(input_ids.to(model.device), num_beams=num_beams, bad_words_ids=bad_word_ids, **kwargs)
decoded = tokenizer.decode(outputs[0], skip_special_tokens=True)
return decoded

text = 'Женщина-дайвер исчезла в Черном море во время научных работ на побережье Анапы.'
print(paraphrase(text, gram=3, do_sample=False))
# Женщина-водолаз пропала в акватории Черного моря, когда выполняла исследовательские работы у берегов Анапы.
# Wall time: 699 ms
TriviaQA: Крупномасштабный набор данных для понимания прочитанного и ответов на вопросы

Датасет содержит более 650К пар вопрос-ответ-доказательство для задачи понимания текста и около 110К пар вопрос-ответ для ODQA на английском языке. Его использовали при обучении WebGPT. Для скачивания доступно 3гб инфы.

Авторы добавили лидерборд, на котором топ держат LongT5 и Big Bird

GitHub | Site | Leaderboard
🔥2
OLive - ONNX Runtime Go Live

Либа для конвертации моделей в onnx и тюнинг их инференса. Тюнинг заключается в подборе оптимизационных параметров по типу максимальной задержки или же присетов точности. Всего 27 опций. Получается своеобразный гридсерч к которому мы привыкли.

Штука эта ощущается сыроватой, так как у меня не запустился их блокнот с последним коммитом "fix tutorial" 💁

GitHub
Примеры
Что вы знаете о задаче суммаризации?

Знали ли вы что её можно разделить на 2 категории:
- Экстрактивный подход (всякие хитрые и не очень алгоритмы)
- Абстрактивный подход (нейронки)

Если со вторым все понятно, то вот про первый стоит немного поговорить. В отличие нейронок, здесь мы не используем генерацию текста, связи с чем работаем только с предложениями и их усреднёнными векторами(GloVe, Gensim, FastText), а в некоторых случаях с мерами схожести строк.

Так например, вы можете использовать алгоритм TextRank для подбора "ключевых предложений". Помимо этого существуют и другие реализации по типу LexRank, LSA, KL Divergence. Про них можно почитать тут.

Объяснение TextRank/PageRank
👍1
CLIP получил обновление 🔥

Помните те модельки, которые можно использовать для понимания связи текста и изображения? Так вот, всего два дня назад были зарелизины RN50x64 и ViT-L/14 💪.

Админы очень рады такому обновлению, так так часто используют клиповские ViT для задач классификации/регрессии, а также верят в качество от OpenAI.

Новость
👍3
Катбуст, он такой один 💥

Пару дней назад я осознал, что давненько не читал доки скоростного котэ и решил наверстать упущенное, попутно просматривая официальный чатик.

И знаете, я нашел/вспомнил некоторые крутые фичи, которыми хочу поделиться:

1️⃣ В задаче регрессии катбуст можно претрейнить, правда не совсем. По сути мы вместе с признаками указываем отдельно результат какого-либо другого алгоритма и все, недостак какой-то получается.

2️⃣ Можно продолжать тренировку нашего дерева с разными параметрами, просто указывая модель для инициализации, что в теории может позволить сделать обучение более гибким, но муторным.

3️⃣ Можно обучать батчами. По сути тоже что и пункт 1 👀.

⚡️Ну и наверное самый полезный факт - катбуст конвертится в onnx. При этом мы получаем ускорение на CPU около 15% и около 24% на CUDA.

Примеры 1-3 пунктов
CatBoost-ONNX
Pandas медленный, верно? 🤨

И кажется не только мы так считаем, но и ребята из RAPIDS.

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

Первым на ум приходит удаление ненужных колонок из памяти и конвертация колонок в более "легкие" типы, такие как: float16/32, int8/32. Но вот незадача, этого всё равно недостаточно, а значит пришло время серьезной артиллерии - юзаем GPU.

Как именно? С помощью библиотеки cuDF. Она имеет практически такой же интерфейс, что и pandas и позволяет без лишней боли пользоваться прекрасным инструментом.

Но тут есть ограничения, а именно - поддерживаются только P4, P100, T4, V100. Админ около часа пытался запустить в колабе на K80, но безуспешно. Благо есть Kaggle с P100 на которой все работает как часы и даже conda инсталить не нужно.

Ну так, админ, что там по скоростям? Бывает по разному, но вы однозначно получите ускорение в 30-100 раз 🔥

Kaggle notebook
Статья с более подробным описанием
👍8
Великие и могучие tiny модели пополнили свои ряды 🙌

Я думаю, что каждый датасаентист рано или поздно задавал себе вопрос - почему моя модель так долго инференсит/обучется? Ну так, вот помимо всяких оптимизационных решений есть вариант попроще - взять маленькую модель, но со схожим качеством. Таким образом вы значительно ускоряете ваш процесс почти не меняя код, круто ведь?

Примерно такими же мыслями(наверное) руководствовались ребята из deeppavlov, когда выпускали новую русскую distilrubert-tiny модель примерно неделю назад 🔥.

По параметрам и весу она незначительно, но меньше ранее известной rubert-tiny. По скорости также есть улучшения, как и по кол-ву токенов в словаре. Кст, на батче 16 на CPU моделька в 3 раза быстрее ⚡️.
🔥3
Временные ряды

Сталкивались ли вы с задачей предсказания каких-то значений на основе временных меток? Если да, то скорее всего вы знаете, что значения каждого ряда специфичны и зависят от множества факторов. Давайте разберем их на примере нефти.

1️⃣ Нефть - сезонный продукт, особенно в России, так как из неё делают мазут, который часто используется в зимнее время. Её основными ценообразующими факторами являются решения ОПЕК/ОПЕК+ (регулируют добычу нефти в каждой участвующей стране) и уровень запасов в коммерческих хранилищах.

2️⃣ Но это ещё не все, также существенное влияние оказывают внешние факторы по типу сильных климатических изменений(ураганы) и следовательно, изменения в цепочках поставок.

3️⃣ Исходя из фактов выше, уже можно понять, что собирать подобные данные в автоматическом режиме крайне сложно, а учитывать их степень влияния ещё сложнее.

Именно поэтому, когда админ делал предсказание на год вперед, он осознавал, что его результат будет очень плачевен. Так и вышло, я ошибся примерно на 10 баксов вниз за одну единицу 😁.
😁1
Ну а вообще зачем был пост выше?

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

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

Как такое исправлять? Стакать модели и простые подходы, например - взять средневзвешенное значений:
1) бустинг
2) среднее за прошлый месяц/прошлого года
3) значение прошлого года
4) линейная модель

Таким образом ваши предсказания станут устойчивее к выкрутасам моделей, но менее устойчивы к краткосрочным изменениям, хотя на то они и краткосрочны.

Видео про факторы нефти
Junior Data Scientist в ВТБ
Хотите пройти интервью? 🤷‍♀️

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

[1] В первой части затрагивают такие вопросы как:
— Что вы знаете о фича инжиниринге?
— Что такое NLP?
— Что такое рекомендательные системы?
[2] Во второй части стало чуть ближе к практике и появились вопросы про:
— Градиентный спуск
— Преобразование Бокса-Кокса(для временных рядов бывает полезно)
— Variance inflation factors(честно хз что это)
[3] В последней части вопросы начали затрагивать тему классификации и такие штуки как:
— AdaBoost/XGBoost/Random Forest
— Метрики/Ошибки первого и второго рода
— Переобучение

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