A bunch of things that I encounter during my journey as NLP/Audio developer
Мне нужно было две поездки на ласточке в мск туда и обратно, одна поездка на поезде в ульяновск в 14 часов, n доп часов и вот я в отпуске - пост все таки тут!
Читать полностью…POSITIONAL ENCODING
#grokaem_nlp #grokaem_собес
*исправляйте, если что не так*
🥸 - взрослый дядя собеседующий
👩🏻💻 - я и вы
🥸 Почему нам необходима информация о позициональных эмбеддингах?
👩🏻💻 В классическом transformer мы обрабатываем каждый токен (его эмбеддинг) относительно других токенов. Без позициональной информации (которая нам была доступна с rnn) возможна ситуация, где два одинаковых токена на разных позициях получат одинаковые репрезентации.
🥸 Почему нельзя просто добавить эмбеддинг с индексом токена?
👩🏻💻 Если мы будем как-то добавлять новый эмбеддинг, для нас важно, чтобы позициональная информация не была "сильнее" чем семантическая. То есть чтобы в пространстве наши эмбеддинги не сильно смещались из-за позициональных эмбеддингов. А так будет происходить если мы на 100 индекс добавим позиционный эмбеддинг с сотнями. Это хорошо показано в этом видео.
🥸 Назовите два правила, которые должны удовлетворяться для позициональных эмбеддингов?
👩🏻💻 1. У каждой позиции должен быть не меняющийся позициональный эмбеддинг (absolute) вне зависимости от длины последовательности. Это значит, что на 3 индексе должен быть такой же поз. эмб для предложения длинной 10 и для предложения длинной 100.
2. Мы уже называли выше: позициональные эмбеддинги не должны сильно менять исходные эмбеддинги.
🥸 Объясните кратко технологию positional embeddings в attention is all you need.
👩🏻💻 Positional embedding - это дополнительный эмбеддинг, который складывается с основным перед проходом в encoder или decoder блок. Он состоит из чисел, которые строятся по формуле пары sin и cos в range от 0 до половины dim эмбеддинга. Тем самым на 0 индексе у нас эмбеддинг выглядит так sin(pos=0, 2 * i=0), cos(pos=0, 2 * i=0 + 1), sin(pos=0, 2*i=1), cos(pos=0, 2 * i=1+1), sin(pos=0, 2*i=2), cos(pos=0, 2 * i=2+ 1)
пример вычисления
🥸 Почему используются еще i позиции внутри эмбеддинга?
👩🏻💻 i - или позиция внутри эмбеддинга помогает нам frequency внутри подсчета и как следствие близость и различие эмбеддингов на разных позициях. Это классно показано на видео. и также удобно посмотреть на графике в комментариях.
🥸 Зачем использовать и косинус, и синус?
👩🏻💻 Авторы говорят "We chose this function because we hypothesized it would allow the model to easily learn to attend by relative positions, since for any fixed offset k, PE(pos+k) can be represented as a linear function of P(pos)" Они хотят доказать, что так мы сможем выучивать relative positions, так как любой offset (или шаг на k) может линейно быть выражен через P(pos). Это действительно доказывается через матричное умножение, что у нас есть матрица преобразований (M), которая не зависит от шага k. Вот тут подсчет, тряхните стариной, вспомните тригонометрию))
🥸 Почему мы не учим positional embeddings?
👩🏻💻 Почему не учим? Учим. Таким образом мы лишь добавляем новый слой обычного эмбеддинга в модель.
paper, который объясняет разницу и эффекты от learned and predefined.
🥸 Что такое relative positional encoding ?
👩🏻💻 В обычных эмбеддингах мы добавляли absolute positional embedding к текущему, то есть не учитывали позиции других эмбеддингов при создании текущего напрямую в positional embedding. Способов имплементации relative encoding довольно много. Интуиция за этой технологией в этом видео и объясняется обучением новых эмбеддингов отношений между позициями. То есть у каждой позиции есть дополнительные n позициональных эмбеддингов (для values и для keys), которые указывают на соотношение с остальными эмбеддингами (n=длина последовательности). В дополнение у нас есть clip на макс длину.
paper
🥸 Что такое rotary positional embedding?
👩🏻💻 Rotary positional embeddings - это техника, где мы не создаем новые эмбеддинги, чтобы заметчить позиции, а делаем трансформацию, которая помогает добавить relative отношения между эмбеддингами на разных позициях. Трансформация схожа с тем, что мы видели для sin-cosine, однако теперь у нас происходит этот rotation эмбеддингов внутри attention. Это клево можно посмотреть в коде тут.
видео раз
видео два
классный папир
Prompt based ASR (Где-то мы это уже видели? Whisper это ты?)
Добавили text encoder на промты, его энкодированный результат дальше в cross attention с фичами.
о модели узнала тут
paper
code
model
🦤🦤🦤
Content promt: contextual info: о чем топик или то, что говорилось ранее
Style promt: casing, punctuation and etc (на самом деле использовали всего два промта: WITHOUT CASING OR PUNCTUATION и Mixed-cased English with punctuation
🦤🦤🦤
Состоит моделька как принято из text encoder'a (он freezed BERT), speech encoder, speech decoder. Выход text encoder'a это текстовые эмдеддинги промта. Style prompt и content prompt конткатятся, при этом к style prompt добавляем также доп. вектор. Интересно, что текстовые эмбеддинги идут в каждый блок speech encoder'a, а не в только первый. Это все работает как старый добрый cross attention. text embeddings = query, acoustic embeddings = key, value. Сам audio encoder - это nadirapovey/zipformer-paraformer-609ccc9cdd03">Zipformer, а decoder это типо RNN-transducer, но у ребят он выглядит вот так без rnn все это соединяется в RNN Transducer (aka) Ух, какая мутная штука, самой архитектуре авторы посвятили буквально пару строк, а жаль((
🦤🦤🦤
Сравним с whisper base:
Первую запись ребята представили сами, там кажется говорится про коня, поэтому в промт это и добавим.
prompt-asr: One day an old gentleman was writing with him, and a large piece of white paper or rag blew across just on one side of me.
whisper-base: One day an old gentleman was riding with him, and a large piece of white paper rag blew across just on one side of me.
Так все таки writing тут или riding?
Дальше возьмем stuttering речь одной блогерши, вот какие результаты получаем с промтом о том, что это приветствие.
prompt-asr: He guyed at the uses thing that has ever.
whisper-base: Hey guys, so the of of your this thing um that has however happened
🦤🦤🦤
Идея классная, но кажется нужно больше данных и лично мне больше инфы про архитектуру, которую я мб не поняла.... Учили всего 50 эпох, та и модельку малюсенькая. На самом деле уже под конец и не хотелось выкладывать про нее, но мб кому-то будет интересно запустить и потыкать))
#grokaem_audio
🥸 То есть маскирование у нас только в Decoder?
👩🏻💻 Мы можем разделить два понимания маскирования. Если например у нас есть паддинги, мы все равно будем их маскировать в attention и encoder. Почему? Если у нас последовательности разной длины и вы используете padding, то в attention части нам не нужно брать 'влияние' padding токенов.
masked softmax implementation
В causal attention мы используем другой вид маскирования, мы маскируем только будущие токены. Почему? Потому что в causal language modelling мы делаем предсказания только на основе предыдущих примеров.
🥸 Не будут ли эмбеддинги в GPT модели хуже из-за того, что мы смотрим только назад?
👩🏻💻 Это сложный вопрос. В общем случае нет, потому что все таки контекст у нас меняется и слова, что в одним примерах маскировались, не будут маскироваться в других. Но это дискуссионный вопрос))
интерактивная визуализация для bert и gpt эмбеддингов
статья про интерпретацию
🥸 Если какое-то слово всегда используется в начале предложения, не будет ли у него эмбеддинг плохим в GPT модели?
👩🏻💻 Это довольно сложный вопрос, потому что все таки данное слово всегда будет находиться без контекста и смотреть только на себя. Но в обычных языках это почти невозможно. Велком обсуждать))
milestones
Одна из лучших лекций от Тани
Обзор seq2seq от Елена Voita
лекция автора силошной
Один из лучших обзоров
еще разные эттеншены в cv
- Я тебе говорю, еще полгода и бум будет в аудио.
- И что и у меня работу отнимут?
Это недавний диалог с моим другом-диджеем. Я работу у него забирать не собираюсь, а вот Meta похоже - да. Как это начали делать писала тут.
🙈AUDIO CRAFT или генери музыку с настройками🙈
3 модели внутри:
MusicGen - генери музыки
AudioGen - генери звуки
EnCodec - кодируй аудио в что-то другое, пожалуйста
Про MusicGen мы уже болтали, хочется понять, что за EnCodec у них. Именно на кодах из него учится MusicGen.
🙈ENCODEC🙈
В чем проблема?
Кодирование аудиозаписи с помощью MIDI ссылка на вики (do u use wikipidea as your source of information? yes.) - дает мало инфы про аудио. Поэтому все изощрялись, как бы придумать что-то впихуемое в LM как MIDI, но чтобы лучше, Но в сыром аудио конечно больше 'признаков', поэтому хотелось бы юзать его. Пытаясь усидеть на двух стульях, EnCodec предложили это и делать с 'квантизацией'.
папир
видео-разбор
0️⃣ Что внутри?
Внутри encoder - decoder модель из conv блоков и лстмки, между ними quantizer. Именно с него мы будем брать коды записи. Всего K codebooks, к каждой codebook мы итеративно ищем ближайшее представление. На выходе у нас получается вектор с индексами от каждой codebook. То есть если было 32 codebook, то мы перешли из 1024 в 32! 🤯 Вернемся к векторному представлению, просто просуммировав все представления из codebook.
1️⃣ При чем тут трансформер?
Чтобы ускорить процесс на инференсе и распараллелить квантизацию по таймстепам, будем учить трансформер выдавать вероятности на индексы в каждой codebook. Тогда на инференсе мы не будем закидывать каждый таймстем в каждый блок квантизации, сразу будем получать вероятность наилучшего индекса в каждой codebook.
2️⃣ Что еще мы выучили на курсе по DL и не добавили?
Чтобы точно ничего не потерять, ребята добавили multi-scale disriminator на STFT (Short-Time Fourier Transform) реальной записи и восстановленной. Это тот же discriminator, но несколько с разными window size на STFT и разными размерами dialated filters.
Лоссов много (аж 6), а результат классный! Статья очень подробная и клево написанная 💔
🙈🙈🙈
Сам audio craft - это по сути объединение генерации музыки, но с разными настройками. Можно крутить кол-о промтов, overlap их записей, длину, лад, key, оверлап промтов. Нормально, к сожалению, они все не оформили, но хорошие разработчики сделали ноутбук, нужно запустить и нажать на ссылочки на gradio и поиграться. Также не очень (мне) понятно поменяли ли они EnCodec на диффузию, но точно работают над этим.
Революция? Вроде нет. Шаг к ней? Да.
пс тут был лол-кек с тем, что никто с выхода audiocraft особо ничего не понял, как бы просто это все дело заинферить? Ну и не дураки сразу сделали тутор на ютубчике, но не бесплатно конечно. Интересно, предъявит ли ему что-то Meta за коммерческое распространение прям в issues их репозитория.
В следующих сериях:
- В чем ключевое отличие между работой encoder и decoder архитектурами?
- Что обработает быстрее lstm или encoder архитектура?
- Что можно распараллелить LSTm или attention и как?
- Куда ставить CLS вектор?
- Positional embeddings размерность должна быть равна?
Какие tricky questions задавали вам или задавали вы про transformer like архитектуры?
Про трансформеры можно говорить много и долго, вот и будем это делать. Будем в такого рода постах брать по 1 вопросу, которые вам могут задать на собесе.
🥸 - собеседующий
👩🏻💻 - я и вы
До этого у нас были посты про:
- виды токенайзеров
- книжка по трансформерам
- как тюнить большие модели
- xlnet
- туториалы
🙉 теперь про AUDIO 🙉
Генерация таких звуков не похожа на генерацию музыки, нет шанса на ошибку. Вдруг какая-то частота резко появится, и вы проснетесь как от рыка льва.
Но все таки пройдемся, что из генерации музыки там мб. Вообще все решения можно разделить условно на midi, сырое аудио и модификации midi, архитектурно на старые recurrent модели (у нас все таки последовательность) и transformer модели (потому что модно и молодежно), также diffusion тренды))
пара статеек, которые мне понравились
1️⃣ MuseFormer - Transformer with Fine- and Coarse-Grained Attention for Music Generation
генерим не на основе всех предыдущих токенов, а их summarisation.
демки
пепер
2️⃣ MusGET - аля берт для музыки, маскируем только один из треков, предсказываем на основе source трека замаскированный target трек
демки
пепер
3️⃣ MusicGen июнь 2023 - пожалуй, один из самых популярных сейчас... авторегрессионный трансформер со своим EnCodec на сырое аудио, главное отличие от других как раз в EnCodec
демки
пепер
4️⃣ Music Transformer 2018, old but nice
классик трансформер, но со своим быстрым relative attention
демки (мне особенно понравилось, как играет создатель в конце сгенерированный трек на пианино)
пепер
5️⃣ JukeBox от OpenAI, old и не работающий)))
работает на сыром аудио с VAE на quantized вектора, по сути идея похожа на MusicGen....
демки
пепер
6️⃣ Mousai - те же авторы, что и в Music Gen, январь 2023
две диффузии: энкодер только на аудио, потом text-to-audio diffusion
демки могут в классику, почти получилось в дапстеп (привет, 2013), остальное как будто на 2х
пепер
🙉—это-типо-переход—-🙉
Вообще подходов уйма на papers with code и некоторые очень интересные
По сути те, что работают на midi пытаются сымитировать поведение языковых моделей, но суть в том, что midi сами по себе можно по-разному декодировать и соответственно улучшать качество. Вот тут можно найти разные имплементации, а вот тут видео от 2020 года про один из видов такой декодирования
доп:
интересный обзор с RNN, CNN и VAE
решение только в продукт, мне house понравился грустный))
🙉—это-еще-переход—-🙉
Как думаете, что у endel внутри? Ифками все покрыто или мюзик женерейшн какой-то? И вообще используете или нет сами? Мой опыт расскажу в комментах))
в этот субботний вечер позволю себе не тех обсуждение. Как вы боритесь с чувством, что вы ничего не достойны, вы глупы и у вас ничего не получится? (если у вас такое чувство есть)
Читать полностью…PITCH
Такие посты мало кто читает, а я их пишу слишком долго. На медиуме (запрещенная в РФ соц. сеть) выложила milana.shxanukova15/how-pitch-shows-youre-old-427cceca5b5">статейку про PITCH. Его используют где только можно, а что это вообще непонятно. В статье:
- немного биологии и строения всего vocal track + очень крутой ресурс с красивыми картинками и понятными описаниями
- как меняется питч и есть ли точная настройка между мозгом и типом pitch? согласно статье
- чуть-чуть про питон и pitch detection
- чуть-чуть про старость и pitch
Мало, но это честная работа))) pitch это вообще интересная штука, ее используют и в TTS, и в preprocessing, и просто по фану, я вот в дипломе ее как фичу юзала))
#grokaem_audio
Я вам описание баги, вы думаете пару часов, я скидываю решение баги. Погнали 🚀.
Против вас играет Милана из Нижнего Новгорода. Вопрос: прошло несколько экспериментов на multiclass классификацию. На 3 эксперименте вы делаете classification report из sklearn. Круто, 3 эксперимент побеждает по взвешенным метрикам. Вы делаете глоток кофе и замечаете, что support класса номер 30 в 1 эксперименте 139, во втором 4, в третьем 35. И так support значения не совпадают для всех классов во всех экспериментах. Данные вы не мешали, использовали тот же тестовый датасет и один и тот же скрипт.
⌛️Внимание, знатоки, что могло пойти не так?
ЛЕТНЯЯ ШКОЛА AIRI В СИРИУСЕ
В вк выложили все лекции, что были в прошлом году в летней школе. Очень крутые эксперты и детальные лекции. Единственное: грустно, что выложили в вк, а не на ютуб....
upd спасибо читательнице:
youtube версия всех лекций
Лекции про все, от рекомендательных систем до графов и нефти.
#grokaem_dl #grokaem_nlp
WORK ON MISTAKES
I don't fully trust metrics.
- sometimes people just say: our accuracy is 89%. But it means we fail 11%. That's maybe a depression-leading way in life, but certainly helpful in production.
0️⃣ WHY?
- mistakes are sometimes unique and we can determine outliers.
- some mistakes may reveal certain patterns or even mislabeling.
What do I with these 11%?
1️⃣ Test data and get logits of each class.
WHY? See not only label, but also confidence of the model. It can help further to determine the threshold.
Usually you get logits from the last year and can apply softmax on each logits to get probabilities.
2️⃣ Save the results in a csv or whatever and color wrong labels. (convenient when the test data is relatively small)
WHY? We usually have something like a content team, who determine which class is what. This table might be a useful guide for them to relabel some of the samples. I experience it many times when the model classified one sample with a different label and content team agreed that it's better.
function to apply color to the table:
def highlight_rows(row):3️⃣ If you're using attention mechanism in your model, get the confidence of each word for your output.
color = 'name of color' if row['pred_label'] != row['true_label'] else 'white'
return ['background-color: {}'.format(color) for r in row]
dataframe.style.apply(highlight_rows, axis=1)
#датасайнс_книги #датасайнс_курсы #asr
A list of courses and books about audio analysis. I will add more to this post in future.
🌚Video🌚
1. Valerio Velardo. I think I rewatched it three times, I even have it downloaded on my computer to watch during long train trips. This theory course is the best. Topics: specs, mel-spectrogram, mfcc, Fourier Transformation in detail, time and frequency domain features.
2. Курс от вышки большой (TTS, Voice conversion и тд). Есть код, есть видео, есть слайды, есть доп. ссылки (rus)
3. Часть курса Deep Learning School: введение в распознавание речи от Нади , TTS от Андрея.
🌒FFT🌒
1. мой недоконспект про все подряд
2. FFT interpretation
3. Простыми словами
🌓Code 🌓
1. Audio features with librosa
2. More about audio representations
3. Audio manipulations with pytorch audio
🌔Blogs and chats🌔
1. Распознавание речи: чат. Можно задавать вопросы профессионалам
2. Надя пробует. Надя иногда рассказывает про papers и новые технологии
3. Voice stuff. Различные посты про обработку аудио
🌝Книжки, они все на русском и советские, но у них какой-то свой клевый вайб))🌝
1. Маленький конспект про речевой тракт и форманты.
2. Фант, акустическая теория речеобразования
3. Динамические спектры сигналов Деркач
4. Обработка сигналов Юкио Сато
Share your resources about audio processing
Скоро будет пост про книги, курсы по rl и аудио, а пока раз уж тут я все публиковала, то вот:
#non_tech_milana
Наверное выскажу одну из самых непопулярных идеи со стороны девушки. Но разве это не унизительно, когда прямым текстом пишут, что на scholarship берут только девушек, что компания отдает приоритет девушкам, что учится или работает 30% девушек в компании и это вау как круто. Это равенство? Это не должно быть акцентом. Это унизительно, если кто-то берет тебя не потому что ты крутая и у тебя есть уникальные скилы, а потому что ты можешь рожать детей. Это не решение проблемы. Это ее усугубление. Я не хотела бы быть на месте парня, который не может получить стипендию, потому что он парень. Если он знает больше меня, может больше меня, давайте приоритет ему. Это очень грустно и унизительно осознавать, что ты можешь получить какую-то роль, какую-то стипендию только потому что ты родилась не парнем, а не долго трудилась над своими знаниями. И я серьезно. Это похоже на эти сексистские шутки и ухмылки. В голове в такие моменты звучит противная слизкая фраза одного моего знакомого "womeeeeen", господи как от нее воротит. Судить нужно на равных.
Я рада, что в детстве меня никто не считал хуже или лучше, потому что я девочка. И никто не говорил мне, что мне нужно родить или выйти замуж, спасибо маме. Сейчас я вижу все меньше таких загонов. Но не нужно считать, что девушки лучше потому что они девушки. Гендерное равенство в том, что все равны и уникальны, в этом и крутость. А так получается, что через лет так 10-20 будет течение, чтобы вернуть права мужскому полу. Так может перестать акцентировать на этом внимание? И выключить уже наконец фильтр по гендеру в профессиональной деятельности.
Всех девушек с праздником, а всех парней с прошедшим и всем равных возможностей
Пс. Ещё всем безопасности везде и отсутствия объективизации.
Сказать честно, я больше люблю читать не топ-популярные каналы как свой. Я еще тот подвид интроверта-экстраверта, который освоил технологии, поэтому постоянно все комментирую, где надо и не надо. А в маленьких каналах мне не страшно комментить ахах.
Вот насобирала вам 10 приятных каналов моих знакомых и еще незнакомых:
1) алиса олеговна - Олег из ML вкатывается в NLP на самообучении и пишем об этом
2) КПД - Спиридон пишет о квантовании, прунинге и других сложных вещах
3) что-то на длском - Карина про все в DL, NLP (очень мотивирует)
4) girl in ds - Маша тоже про DL и там крутые мемы (и сама Маша крутая и в жизни даже)
5) приближаем сингулярность - Леша больше про генеративные и llm (с Лешей мы не знакомы)
6) voice stuff - Илья про audio, у него я частенько ворую ссылки на статьи, он крутой
7) speech technology - блог (как я понимаю) от создателей vosk, там всегда самые первые статейки по аудио
8) llm under the hood - Ринат про то, как они делают продукты с LLM (с Ринатом мы тоже не знакомы, но стиль письма и подача - огонь)
9) from life import happiness - Рома работает в Яндексе и много учится, за ним я слежу, чтобы понижать свою самооценку
10) Pavel Zloi - классный Паша, на него я подписалась недавно, он писал о том, как он обучал ruGPT3.5 с сайгой
Чтобы было честно, и большие каналы, за которыми я прям слежу, а не просто подписана))
1) Надя пробует - Надя пробует, за визу Наде я молюсь как за свою ахаха
2) DL in NLP - Влад больше про NLP и статьи, Влад умный писец
Зачем вообще spelling correction? У вас мб любая моделька и чтобы ее перформанс на проде и реальных данных был ок, при обучении вы можете использовать два подхода:
- замусорить данные
- отчистить данные
Ну или делать и то, и то))
🥟🥟🥟
Чтобы мусорить, нужно делать это осознанно, потому что мы пытаемся имитировать мусор человека:
- опечатки
- перестановки
- пропуски
- вставки
Это своего рода аугментации, про которые я говорила вот тут. Их можно использовать с библиотекой nlpaug (для keyboard нужно создать свой словарик) или Augmentex. А также сейчас corruption появился в SAGE. Не забывайте, что при тренировке эти corrupted samples не должны быть в тесте (just a reminder).
🥟🥟🥟
Но также часто бывают обычные - непредсказуемые ошибки, тогда мы можем чистить их с какой-то spelling correction моделью, если наша исходная обучалась не на овердохера данных (если так, то скорее всего она и сама видела эти ошибки). Обычно такие модели основаны на seq2seq, где входная seq это неверная последовательность, выходная верная. Конечно-же, использовались они все разные. И тут при выборе нужно обращать внимание на подходы, какие-то модельки обучались на isolated correction, какие-то с контекстом. Понятное дело, что isolated во многих случаях будет проигрывать.
0. PySpellChecker - работает для русского, английского и тд. Мне нравится, что можно получить кандидаты-вариантов исправлений.
1. Neuspell - тут много разного от LSTM до Берта. Правда ребята как-то накосячили с новыми путями, поэтому теперь нужно скачивать модельки со старой версии драйва.
2. Всякие трансформермы - их как обычно мы ищем на hf, вот например (барт), (т5)
3. SAGE - новая библиотека с моделями t5, m2m
#grokaem_nlp
Нашла интересный обзор подходов по использованию выхода любой языковой модельки аля BERT для классификации. Например, такие методы как:
эмбеддинги на последнем слое:
- cls
- mean/max/mean + max
- conv1d
эмбеддинги со всех слоев:
- mean cls
- pooling: mean/concatenate/lstm/attention
Использую как источник идей, когда выдыхаюсь))
#grokaem_nlp
Продолжаем нашу рубрику.
#grokaem_nlp #grokaem_собес
🥸 - взрослый дядя собеседующий
👩🏻💻 - я и вы
🥸 Базовый вопрос: где какая архитектура используется?
👩🏻💻 (*улыбается) Вообще изначально Encoder-Decoder модель была предложена в задаче перевода. Как в переводе мы сначала пытаемся понять полностью предложение на одном языке и потом на его основе сделать перевод, так мы и делаем в encoder-decoder архитектуре. Как раз в encoder части мы стараемся выучить представление (например, context вектор на одном языке) и потом использовать это для декодирования в decoder части. Encoder используется в BERT like моделях, Decoder в GPT-like архитектурах.
🥸 Какой attention где используется?
👩🏻💻 Если говорить кратко, то в encoder части мы используем только self-attention, в decoder части в первом transformer блоке мы используем также self-attention с маскированием, а вот во втором cross attention.
* self-attention - смотрим на всех соседей и на себя: quеries, keys and values одни и те же
* cross-attention - то же самое, только queries - это decoder states, keys and values - это encoder state. Это как раз тот момент, когда мы пытается сделать генерацию на основе того, что мы уже видели.
Внутри функция для attention может быть разной. Главное - нам нужны скоры, чтобы обновить наши эмбеддинги.
1) dot product - базовая и самая используемая функция: просто перемножаем))
допом можно делать scaled dot product - это когда вы перед тем, как добавлять softmax, нормализуете на квадратный корень от dimension эмбеддингов. Это нужно для стабилите, когда dimension большой))
2) additive attention он же concat, soft and global (Bahdanau attention) - родоначальник attention, скор считается с помощью дополнительной фидфорвад сети
одна из имплементаций
история от Андрея Карпатова, как ему Bahdanau рассказал, как он придумал attention
3) Luong-Attention он же general, location based и любимый dot product (они все разные)
Немного про различия
🥸 А если последовательности длинные?
👩🏻💻Все эти примеры мы смотрели, подразумевая главную пользу attention - смотреть на всех, но в условиях длинных последовательностей это может быть не выгодно, потому что сложность подсчета attention зависит от длины последовательности квадратично, так что есть:
soft VS hard - предложен в image captioning таске, нам нужно в hard attention выбирать один патч, а оптимизация через variance reduction or reinforcement learning
global VS local - в глобал мы берем все стейты от encoder, в local предсказываем позициии токенов, на которые будем смотреть.
В NLP мы используем именно global VS local
Многие из оптимизаций строятся по принципу - не нужно считать внимание на все токены, их нужно выбирать (local attention). Примеров много: sparse attention, dialated, sparse attention и тд. Есть и другие подходы: факторизация матриц, locality-sensitive hashing, kernel attention. Подробнее тут.
Далее мы уже изощряемся по-разному и можем добавлять: Multi-head, Multi-Query Attention, coarse to fined attention и так далее
#grokaem_random
1. fn_kwargs - супер классно для маппинга в hugging face
2. disable caching() - необходимость, если вы не хотите хранить кучу логов от wandb
3. в коллабе теперь по пандас можно красиво смотреть фреймы и сразу видеть графики
4. тупой if else при записи счета в словаре можно поменять на:
if v not in your_dict:5. accelerate в hugging face - быстрая бомба пушка
your_dict[v] = 0
your_dict[v] += 1
ЧЕМ ОТЛИЧАЕТСЯ RoBERT'a ОТ BERT'а?
Ключевые отличия, которые внесла RoBERTa, это:
- убирать next sentence prediction задачу из претрейна (binary-classification задача предсказания является ли предложения парой из одного текста)
- делать динамическое маскирование, а не статическое
🥸 Чем отличается динамическое маскирование от статического?
👩🏻💻 В BERT'e мы брали один sequence, брали 10 разных маск, дублировали данные 10 раз, чтобы одна sequence получала 10 разных маск за эпоху. Тем самым при обучении модель видела одну и ту же маску n-epochs times.
Это не оптимально в ситуации, когда у нас гигабайты памяти и длинные предложения. Маскировать нужно по-разному. Поэтому на каждый train step генерится своя рандомная маска.
🥸 В маскинге вот прям все токены маскируются?
👩🏻💻 Нет, обычная настройка стоит на 15% из последовательности. Из этих 15% мы 80% меняем на [MASK], 10% не меняем и 10% меняем на рандомный токен из vocab.
🥸 Почему нельзя всегда менять?
👩🏻💻 Не то чтобы нельзя. Как пишут авторы BERT, a mismatch between pre-training and fine-tuning, since the [MASK] token does not appear during fine-tuning. The purpose of this is to bias the representation towards the actual observed word. Что означает:
а) в тюнинге у нас не будет токена [MASK]
б) если всегда то слово, которое мы будем предсказывать будет одним и тем же токеном, то его эмбеддинг модель выучится не считать для финального представления
пример подсчета self-attention для одного context вектора
ответ на форуме
🥸 Только 15% можно ставить?
👩🏻💻 Нет, есть исследования, что например 40% маскирования даже улучшает общий перформанс. Однако чем больше процент маскирования, тем больше corruption, тем сложнее модели предсказывать токены.
🥸 Какие виды маскинга еще знаете?
👩🏻💻 PMI маскинг - маскировать не рандомно, а на основе PMI значения, таким образом будут маскироваться близкие collocations
Span masking - маскировать не один токен, а последовательность токенов
видео про разницу от стэнфорда
материал про masked lm также от стэнфорда
🥸 Что бы вы выбрали для тюнинга?
На самом деле если брать готовые решения, то динамическое маскирование сейчас используется и для берта. Так что вопрос остается лишь к остальным параметрам - токенизации, количества параметров и данных для предобучения.
автор канала теперь официально бакалавр по компьютерной лингвистике 🪄
тут был длинный пост о том, что мне понравилось и не понравилось в вышке, и как вообще если честно я задолбалась))) но на выходе это неважно, 4 года были интересными и продуктивными вне универа
рассказывайте, кто что закончил и что там делать та дальше надо?
ГЕНЕРАЦИЯ ЗВУКОВ И МУЗЫКИ
Endel
Я случайно наткнулась на их приложение около года назад, когда искала решение для проблем со сном. Приложение предлагает ставить на ночь звуковую дорожку, которая разбудит вас в нужное время. Делают его ребята из России, а сейчас носят стилево черный в молодежном Берлине.
Включаем критическое мышление и скептику. Это точно работает со стороны биологии? Что у них за сетка такая там?
🙉 Сначала про БИОЛОГИЮ 🙉
Есть circadian cycle - внутренние часы, их изучали еще в 18 веке на растениях. Листья обычно раскрываются на солнце, закрываются в ночь. Что если всегда будет ночь? Ничего не изменилось, внутренние часы подсказывали тот же ритм. За обнаружение гена period - ответственного за внутренние часы даже дали Нобелевскую. Endel основываются на том же ритме. А также на цикле сна. Они собирают данные о текущем времени и пытаются подстроиться под общий цикл. И под твой персонализированный, если ты собираешь такие данные. Heart rate, activity (steps), weather, natural light. Первые два можно собирать с эпл вотчей и просто приложения health. А вот к light у меня есть вопросы. Свет монитора сильно влияет на состояние, было бы клево, если бы это как-то тоже мониторилось.
EXPONENTIAL MOVING AVERAGE
Weight EMA - smoothing техника, которая призвана улучшить generalisation performance модели. Эта техника пришла к нам из times series.
Основная схема: держим копию весов модели, при апдейте делаем апдейт как weighted average между текущими весами и весами до этого степа (post-optimization step).
Что за проблема есть: при каждом training step мы делаем апдейт весов относительно одного батча, но даже при хорошей подготовке данных и хорошем BatchSampler, один батч может быть шумовым и lead to getting stuck in poor local minima or oscillating between different parameter values
Как эта проблема решается?
Формула: decay_factor * new_weights + (1-decay_factor) * old_weights
decay_factor следит за тем, чтобы апдейт был как раз с небольшим влиянием прошлых весов. Из формулы следует:
decay close to 0 - больше влияния на старые веса
decay close to 1 - больше влияния на новые веса
реализация в tensorflow
Реализация Pytorch:
реализация объяснение для лайтнинг подхода через callback:
(там необходимо только поменять функцию on_save_checkpoint и сохранять ema чекпоинты как дикт, как вот тут)
У нас есть веса модели, которые мы изначально инициализируем любым образом, это мб рандом, а может быть распределение. парочка видов инициализации весов модели. Далее в колбэке мы храним веса ema, и апдейтим на каждом степе, в конце сохраняем как чекпойнт key. Заметьте, что когда происходит степ, веса изначальной модели также должны меняться. Подгрузить можно сначала сделав torch.load(checkpoint_path), а потом проиндексировавшись по ema весам. При обучении сильно не расстраивайтесь, вначале метрики будут ниже чем при обычном обучении и обучение при этом будет медленнее, но это плата за stability.
Если вы делаете на чистом pytorch, то можете создать такой же класс и просто делать step и сохранить эти веса в конце тренировки.
первое видео про ema
обзорно про time series, reinforcement
объяснение от умного Lei Mao с матешей
#grokaem_dl
#grokaem_random #nlp #deep_learning
Я скоро отдохну и будут более сложные посты, а пока вот пара рандомных штук:
1. Если что-то не дает установить питон, делайте через конду и перепроверяйте названия библиотек и их установочные названия. Была загазлайчина wheel для dvc, который через pip не шел, а через conda как родной встал.
2. WandbLogger в Pytorch Lightning - лучшее, что придумало человечество. А dvc нужно подумать над тем, как они не логируют hyperpyyaml и как они меня из-за этого потеряли.
3. Если pickle в колабе не читает файл, то проверьте свою версию питона и версию протокола, колаб и каггл читают все ниже пятой, так что указывайте protocol=4.
4. Чтобы взять только определенные индексы в пайторчовском тензоре нужен arange.
import torch5. Если больно и тяжело считать cosine similarity на больших тензорах, попробуйте любую contrastive loss с кастомным cosine similarity внутри.
tensor = torch.tensor([[0.5, 1], [0.8, 0], [1, 0.3], [0.2, 0.7], [0.6, 0.4], [0.1, 0.9], [0.3, 0.2], [0.7, 0.5]])
indices = torch.tensor([1, 0, 0, 0, 1, 0, 1, 1])
selected_elements = tensor[torch.arange(tensor.shape[0]), indices]
mask = lambda frame: np.isin(frame['my_column'], my_values)Читать полностью…
random_frame[mask(random_frame)]
#grokaem_courses #mlops
Вкуснятина, когда дело доходит не просто модельки погонять у себя в ноутбуках, а оформить, чтобы это было осязаемо и можно было использовать на проде ✨. Кроме того, нужно проследить за версиями и экспериментами. Два курса, которые этому учат:
1. MlOps и продакш подход на ODS - поток закончен, так что можно посмотреть видео и сделать тесты. Мне понравилась лекция про организацию репозитория, с тех пор стараюсь использовать CookieCutter.
upd спасибо комментарию: новый поток MlOps
2. ML ZoomCamp - начнется 15 мая, собираются покрыть много тем. Я постараюсь присоединиться, хочется послушать про Flask и все темы из 4, 5, 6 модуля. Есть возможность сделать финальный проект + домашки. Все на английском.
ML ZoomCamp - starts on 15th May. A lot of topics in MlOps will be covered. I will try to join too as I'm very interested in the 4, 5, 6 modules. The course offers the final project and homeworks.
К организации экспериментов относятся конфиги, про yaml конфиги писала тут.
Я наконец-то почистила навигацию по каналу, много я всякого написала за эти несколько лет 🥵
Теперь в закрепленном сообщении все хештеги. Когда нажимаете на хештег - будут видны слева все посты с названием заглавными буквами. Так легче найти, что вам нужно)
Переживать - это мое всё. Я уже почти научилась не краснеть на собесах и нормально кушать перед экзаменами. Но. Сегодня вот пошла на блиц по нейронкам и хоть 90% вопросов я знала сама, я все равно подготовила небольшой notion по всем вопросам, потому что 'а мало ли' (+ синдром самозванца)
блиц по нейронкам (можно копировать и менять)
Может быть, кому-то будет полезно. Тут не расписаны transformers, но когда-то я запилю что-то большое по ним, а так интересные вопросы по transformers в моих постах:
книжка по трансформерам
пост небольшой по ним
xlnet
attention
#датасайнс_книги
NLP with Transformers. Эдакая поваренная книжка с рецептами по шагам для задач классификации, NER, text generation, summarisation, question answering.
Из особенностей или собственно суть книги:
- блок про anatomy of transformers, разбирается каждый блок вместе с кодом, приводится дерево transformer based моделей
- make transformers efficient in production - отдельный блок про клевые штуки, которые делают умные ребята: knowledge distillation, quantization, pruning, graph optimization
- есть еще блок про тренировку from scratch, там понравились метрики для оценки tokenizers (p.436)
🤗pros
+ актуальные темы и на них всех есть примеры
+ легкое повествование вместе с табличками и схемами
+ в меру матеши и объяснений
+ есть советы по ошибкам, ограничениям памяти и тд
🤗cons
- кратко и сжато, но это и не учебник
- версии у hugging face меняются, так что что-то может не работать с ростом обновлений, но у книги куча future directions, так что обновления кода должны быть
Я не читала сама всё, но многие моменты показались интересными. Особенно советую, когда либо не знаете с чего начать, либо вдруг почему-то решили transformers разобрать.
#nlp #deep_learning #embeddings #эмбеддинги
- Okay, Milana, there is a mistake: cosine similarity cannot be negative.
- Oh, it can be.
0️⃣ What is it?
Cosine similarity is a metric that determines how two vectors (words, sentences, features) are similar to each other. Basically, it is an angle between two vectors.
1️⃣ Range
Similarity range is between -1 to 1, where -1 absolutely opposite vectors (python - security of code), 0 no correlation (university knowledge - work), 1 absolutely similar (chatgpt - hype). It can be explained again by the angles, remember the cosine of two vectors that point to different directions. The angle between them is 180, they are opposite, cosine is equal to -1.
some explanation
2️⃣ Cosine distance
cosine distance = 1 - cosine similarity
Range 0 to 2, 0 - identical vectors, 1 - no correlation, 2 - absolutely different.
2️⃣.1️⃣ Why use cosine distance?
While cosine similarity measures how similar two vectors are, cosine distance measures how different they are.
In real applications it depends on the task what function to choose. You can use cosine similarity as a loss function or as a measure for clustering.
You can check nn.CosineSimilarity and nn.CosineEmbeddingLoss, I personally use the second one as a loss function to learn embeddings of pairs.
3️⃣ Normalisation, how does it affect cosine similarity?
Well, it depends....on the type of normalisation you use. If you use the normalisation technique we have discussed previously, you will see no difference. However, when you normalise your embeddings with Z-score normalisation (v - mean)/ std, you will get different results as both your mean and std change. Just keep it in mind.
4️⃣ Soft cosine measure
One of the common changes suggested in 2014 the basic idea is that we use additional similarity matrix for all features of vectors. I consider it as an efficient method for TF-IDF case. For instance, when we need to show that such words as play and game are close to each other in semantic sense, but it cannot be captured with cos similarity of just sentences "a player will play a game they like to play", "they play the game they like". Similarity matrix can be constructed by word-embeddings similarity, Levenshtein or whatever you want.