Интересное что-то
546 subscribers
2.77K photos
253 videos
140 files
4.57K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.iss.one/asisakov_channel
Чат: https://t.iss.one/youknowds_chat
Download Telegram
#dl #nlp
Как сделать суммаризацию в диалогах и запихнуть в @summarization_bot
Forwarded from Kirill Gelvan
Для интересующихся: моделька на HF с инструкциями по запуску
Под капотом задача абстрактивной суммаризации, а именно модель mBart дообученная на суммаризацию диалогов в чатах (датасет SamSum который мы перевели на русский язык при помощи GoogleTranslateAPI)
Forwarded from MarksRemarks (Mark Baushenko)
Так получилось, что я занял первое место 🥇 в квалификации Vk Cup 2022 (почти ничего не делая 🤔) и пару человек попросили выложить решение. Так вот оно.

🎁🎁🎁🎁🎁
Please open Telegram to view this post
VIEW IN TELEGRAM
#qa
Кое-что из этого нужно не только тестировщикам
Дорожная карта навыков тестировщика, которая сделает из зёлёного джуна матёрого сеньора (ну или хотя бы мидла).
Forwarded from DLStories
Open-Vocabulary Semantic Segmentation with Mask-Adapted CLIP

В Meta придумали, как использовать CLIP для решения задачи open-vocabulary semantic segmentation. Если совсем честно, то у них получился не прям “open-open”-vocabulary, но идея все равно хорошая.

Вот как она работает:
Берем MaskFormer — это сеть для задачи обычной сегментации на С классов. Работает она так: для каждой входной картинки MaskFormer выдает N пар (mask, class). Mask — бинарная маска одного из объектов на входной картинке. Class — вектор длины С — распределение вероятностей по классам для объекта, для которого построена маска.

Теперь немного модифицируем выход MaskFormer и обучающий датасет. Смотрите, берем датасет для сегментации, например, COCO-Staff. В нем для каждой картинки есть набор пар (mask, class). Для каждой такой пары берем текстовое название сlass и прогоняем его через текстовый энкодер CLIP. В итоге получаем, что в нашем датасете для каждой картинки теперь есть набор пар (mask, emb). Тут emb — CLIP-эмбеддинг названия класса, которому принадлежит объект с маской mask.

Ну и будем теперь учить MaskFormer для входной картинки выдавать не пару (mask, class), а (mask, emb). Т.е. наша модель учится не классифицировать найденный объект на один из С классов, а выдавать для него CLIP-like эмбеддинг, который содержит информацию о том, что это за объект. И когда на вход модели приходит новая картинка, мы берем MaskFormer и получаем наборы (mask, emb). Потом сравниваем emb с эмбеддингами CLIP’а для разных названий классов (‘стул’, ‘человек’, …) и выдаем в качестве класса объекта тот, который ближе всего к эмбеддингу emb.

Тут становится понятно, в каком месте модель не слишком “open”-vocabulary. В датасете COCO размечены конечное количество классов (а именно, 171). Ну и не приходится ожидать, что модель, которая училась находить бинарные маски для людей-собак-кошек, вдруг начнет выдавать отдельные маски для носа-глаз-рук-ног.
Но потенциально модель может выдать эмбеддинг emb с произвольным смыслом, это да.

Ну и последнее замечание: описанной выше модели авторам показалось мало. Поэтому они предложили добавить второй способ получения классов для mask:
Как мы сказали, MaskFormer выдает пары (mask, emb). Мы можем взять mask, вырезать кусок картинки, которому соответствует эта mask и подать этот кусок картинки на вход CLIP. CLIP выдаст эмбеддинг этой картинки, который мы так же сможем сравнить с эмбеддингами для разных названий классов (‘стул’, ‘человек’, …), и таким образом получить нужный класс объекта для нашей маски. Правда, в таким виде алгоритм работает не очень хорошо: CLIP все же не был обучен под такой вид картинок. Поэтому в Meta собрали небольшой датасет “кусок картинки — класс” и дообучили на нем CLIP. Как именно собирали датасет и дообучали, читайте в оригинальной статье.

Ну и итоговое предсказание модели сегментации авторы получают, усредняя emb из MaskFormer и эмбеддинг из CLIP, полученный на основе mask. Работает это все хорошо, бьет предыдущие open-vocabulary нейронки по метрике mIoU.

Ссылки:
Страница проекта
Статья
Код на GitHub
Изначально инфу про статью нашла в канале эйай ньюз
Forwarded from DLStories
This media is not supported in your browser
VIEW IN TELEGRAM
На сайте работы, ктстаи, обнаружена отличная гифка с иллюстраницей устройства модели. Тут верхний flow — первый способ получения эмбеддингов классов (emb из MaskFormer), нижний flow — второй способ получения эмбеддингов классов (вырезаем куски картинки, соотв. mask, подаем в CLIP)
Forwarded from partially unsupervised
Досталась мне на работе система, за которую до недавних пор отвечал умный, но неопытный PhD. Задача по сути сводится к text classification, внутри некий трансформер и все по классике: много кастомного, вычурный оптимайзер, дубликаты в данных и так далее. И, конечно, все надо улучшать - от точности до скорости.

В комплекте с системой полагался въедливый коллега, который с радостью согласился пойти разгребать авгиевы конюшни датасетов. А я взялся за инженерную часть. Кое-какая инфраструктура уже была: тесты, CI, обучение в докере - до этого мы с другим коллегой занимались переносом этого хозяйства из jupyter ноутбуков во что-то воспроизводимое. Так что надо можно было более или менее смело лезть в сам training pipeline.

Обучение занимало ~10-11 часов на одной A100, что в целом приемлемо, но, судя по низкой нагрузке и CPU, и GPU, можно было сделать лучше. Перенес часть препроцессинга из __getitem__ в __init__, избавился от pandas, выкинул лишние данные из памяти, что-то закэшировал, увеличил количество воркеров для датасетов, увеличил батчи - и GPU стала загружаться на ~95-98%, а обучение стало втрое быстрее. С такими скоростями уже можно быстро итерироваться.

Основная модель весила больше гигабайта. Я посмотрел на граф и обнаружил, что больше половины весов - это жирная мультиязычная embedding матрица инпута. Пошел в Athena и добыл неразмеченный датасет вида SELECT * FROM DATA WHERE THINGS ARE NOT LIKE FULL GARBAGE LIMIT OVERDOHOOYA, прогнал его через токенайзер, подтвердил гипотезу, что реально используется <50% токенов. Значит, можно переучить токенайзер и заменить эмбеддинг слой на значительно меньший, предварительно скопировав предобученные веса полезных токенов. Это уменьшает размер модели примерно до 60% от оригинального (правда, без заметного эффекта на скорости инференса). Потребление памяти важно для рантайма, ведь можно держать в памяти одного инстанса больше моделей, там как раз был боттлнек.

Кстати, раз у нас есть большой неразмеченный датасет, это звучит как повод устроить pretraining. Адаптировал masked language pretraining пайплайн с huggingface 🤗, и оставил новую, уже уменьшенную модель учиться на недельку. И, наконец, заменил дефолтные веса в основном пайплайне на результат претрейна на этом неразмеченном датасете. Это не только улучшило точность (на разных тестовых датасетах от 10% до 20%) и вторичные метрики вроде калибровки, но и ускорило сходимость, т.е. можно безболезненно уменьшить количество эпох еще на треть.

Итого: за пару недель работы обучение ускорено, потребление памяти упало, точность выросла. Важно подчеркнуть, что ничего из перечисленного не содержало никаких сложных алгоритмов. Если ты не OpenAI, то просто нормально делай - нормально будет.
Forwarded from MarksRemarks (Mark Baushenko)
Recommender_System_(Movie).pdf
4 MB
#ml_system_design
Одним из важных этапов при отборе кандидатов в Big Tech является ML System Design интервью. По своей структуре оно очень похоже на обычное System Design интервью, но с уклоном в сторону ML. Вас попросят спроектировать AI продукт начиная с определения источника данных и заканчивая проведением A/B тестирования.

Сегодня разберем Recommender System (Movie) 🎥🎬

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

Продожение в файле 📁

🎁🎁🎁🎁🎁
Please open Telegram to view this post
VIEW IN TELEGRAM