A bunch of things that I encounter during my journey as NLP/Audio developer
про alignment в tts
Если в текстах мы работаем всегда в одной модальности, то с речью у нас две последовательности (аудио aka спектрограмма и текст). Прямого соотношения между которыми - нет. Попробуйте взять любую спектрограмму и сказать, где какая фонема звучит. Именно на задаче alignment и сделаем фокус.
И тут мне нравится мысль из небезызвестного ТРИЗ о стадиях идеального объекта:
🧩
«Система сама выполняет эту функцию»
«Системы нет, а ее функции выполняются»
«Функция вообще не нужна»
🧩
Эта же концепция перекликается с мыслью о постоянной накопленной ошибке мультиступенчатых систем. Если мы посмотрим на развитие TTS систем не с самых раних времен, то как раз и будем следовать стадиям развития системы.
Важная заметка на полях, здесь я не разделяю NAR и AR системы, however мы можем сказать, что в AR alignment проблема может решаться относительно легче.
Система: модель или алгоритм.
Задача системы: сделать идеальное соответствие между спетрограммой и текстом.
1️⃣Стадия 1: система существует.
Glow-TTS (11.2020), модель на основе flow-matching. В ней предложили monotonic alignment (система) - алгоритм на основе концепции динамического программирования со сложностью O(T_text * T_mel). Сильно, да? В общем и целом он должен занимать примерно 2% времени обучения. Нехило. Важно, что кроме самой системы при тренировки, нам нужен еще и duration predictor на инференсе. В том же VITS, MatchaTTS также используется monotonic alignment.
Совсем недавно его улучшили с super monotonic alignment search, но не поздняк ли уже метаться?
Сюда же я осмелюсь отнести FastSpeech 2 с duration predictor в сравнении с golden MFA (Montreal Forced Alignment).
2️⃣Стадия 2: системы нет.
Позволю себе упрощение: критерием, что системы нет можно считать, что отсутствует отдельная функция потерь. Если в том же FastSpeech 2 мы добавляли отдельный блок для duration, то в более старом Tacotron 2 у нас был location sensitive attention, никаких таргетов. Для TTS систем это удобно, так как мы априорно знаем, что зависимости монотонны (мы не можем сказать фонему n, ссылаясь на фонему n + k). Тот же nvidia в этом году стрехнули пыль с FastSpeech 2 в статье T5TTS , ссылаясь на advantages in seq-seq transformer based models и добавили prior "regularization" на cross-attention, чтобы сделать его монотонным. Однако у них мы можем сказать, что система все таки существует, так как поверх они добавляют CTCLoss, чтобы поддерживать мотонность alignment'а.
И в этом моменте вспоминаем, что все это время мы надеялись на какой-то external алгоритм, который скажет как правильно. Но доподлинно правильно мы не знаем как. Может ну его тогда?
3️⃣Стадия 3: функция вообще не нужна.
А что если вообще не думать о проблеме? Именно это и сделали в Embarassingly Easy TTS. Мы не затроним сегодня flow matching часть, это объемная тема. Что они сделали с alignment? Особо не парились: берем c - characters transcription размерности M. Берем наш mel-filter bank features размерности T. И просто добавляем к (T-M) filler tokens до полной T длины. А что так можно было? Похоже да. Мы оставили текст таким какой он есть, не растягивали, не дублировали, не делали буквально ничего. Наверное можно ждать много статей по ablation studies такого подхода и анализ attention у трансформера, как это было с подходами у T5TTS. По этому же подходу пошли F5TTS, которые только тренируют на diffusion.
Как и всегда, жду ваши поправки и комментарии❤️
#grokaem_audio
Я на какой-то период перестала сидеть в чатах, но вернула эту привычку. Один из любимых чатов от канала Speech Recognition. Длинные ответы нужно бы постить и тут.
🦘Я все еще в поиске хорошего денойзера для спецэффектов, плача, смеха и аплодисментов. Если вам такой известен, поделитесь, пожалуйста.
#grokaem_audio
Про предобработку:
Обычно для очистики я использую два этапа, однако можно всегда один из них выкинуть.
1. Denoise - использую почти всегда старый добрый demucs.api. Он удобен, если у вас например, есть задача сначала отделить музыку, а потом вернуть ее обратно. Вместо demucs можете попробовать MVSEP. Не могу сказать, что я увидела много разницы с demucs, но это типо их расширение.
2. Дальше я всегда делаю enhance перед любой TTS, так как пару раз уже проверяла, что качество всегда будет лучше (как mos, так и objective metrics). Однако, если вы будет потом просто сравнивать мелспеки, помните, что вы сделали enhance.
Для быстрых кейсов я юзаю resemble-enhance, у него я ставлю их denoise, а потом enhance только на vocals от demucs. Качество мне нравится. Плюс они делают поддержку подсчета на gpu.
Однако если вы прям запарились и нужно качество лучше по enhance, то советую ребят MP-SENet, у них хорошая модель с двумя енкодерами и для phase и для магнитуды. Также можно натренировать (я проверяла), все збс воспроизводится и тренеруется недолго.
Минусы двухэтапной обработки - вам нужно сохранять файл от demucs, я не долго и не сильно копала, может можно как-то его перекинуть сразу в enhance.
код от resemble-enhance, он у них в app.py
def enhance_audio(audio_path, save_path, solver="midpoint",Читать полностью…
nfe=64, tau=0.5, device="cuda", target_sr=16000):
solver = solver.lower()
nfe = int(nfe)
lambd = 0.9
dwav, sr = torchaudio.load(audio_path)
dwav = dwav.mean(dim=0)
wav1, new_sr = denoise(dwav, sr, device)
wav2, new_sr = enhance(dwav, sr, device, nfe=nfe, solver=solver, lambd=lambd, tau=tau)
wav2 = wav2.cpu().unsqueeze(0)
if new_sr != target_sr:
resampler = torchaudio.transforms.Resample(new_sr, target_sr)
wav2 = resampler(wav2)
torchaudio.save(save_path, wav2, target_sr)
СЕНТЯБРЬ 2024 🍁
Как-то у меня получилось негусто собрать, месяц был странный
NLP:
1. Вышла LLAMA 3.2, on device, multimodal (image, text)
2. Вышла OpenAI O1 с позиции а порассуждай, пост В эту же песню вот этот пост о подходах к рассуждениям (DaG, IoT...)
3. Интересный пост о MoNE - мультиэксперте с нарезкой по глубине и по размерности эмбеддинга.
4. Есть теория, что pixtral (мультимодал text, image) основана на технологии с MoNE
5. Apple выложила insights по sigmoid self-attention.
AUDIO:
1. Вышла Moshi - multimodal conversational (text, audio)
2. IPA фономенизатор для русского
3. Был interspeech
4. Вышла FishSpeech, многим она не понравилась, но мне семплы были по душе
5. Вышла статья от авторов StyleTTS, будет небольшой обзор
🥸 - взрослый дядя собеседующий
👩🏻💻 - я и вы
🥸 32. Как считаете attention? (доп. для какой задачи его предложили? и почему?)
👩🏻💻Attention intro
You compare the query with the keys to get scores/weights for the values (Сравниваем query с keys, чтобы получить веса для обновления values)
- key - относительно кого считаем, исходный текст на языке оригинала
- query - для кого считаем, переведенный текст на таргет языке
- value - на чем мы считаем, снова исходный текст
Вернулись к фразе. Понимаем суть - мы должны сделать такие вектора слов в этом заданном контексте, чтобы каждое слово брало информацию только от важного для себя.
Внутри функция для attention может быть разной. Главное - нам нужны скоры, чтобы обновить наши эмбеддинги.
1. dot product - базовая и самая используемая функция: просто перемножаем)
допом можно делатьhttps://proceedings.neurips.cc/paper_files/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf"> 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 (они все разные)
Немного про различия
🥸 33. Сложность attention? Сравните с сложностью в RNN?
👩🏻💻Computation:
Attention: вычислительная сложность O(n² * d), где n — длина последовательности, d — размерность эмбеддингов.
RNN: O(n * d²), где n — длина последовательности, d — размерность hidden state.
Attention сложнее при больших последовательностях, но имеет преимущество за счет параллелизации вычислений. RNN, напротив, обрабатывает последовательность шаг за шагом, что может быть выгоднее для длинных последовательностей, но из-за проблемы исчезающего градиента теряет в эффективности.
В дополнение, self-attention работает быстрее, когда длина последовательности меньше размерности эмбеддингов. Источник для глубокого погружения — Transformer arXiv.
С 1 сентября! Лишь недавно осознала, что в детстве родители пытались выстроить связь: 1 сентября - начало учебного года - праздник. Это вам пицца в Сеньоре Помидоре, тортик и банты.
Давайте и мы проведем ассоциативную связь между началом месяца и радостью, что а) начинается новый, б) было много хорошего в старом
АВГУСТ 2024
🎒NLP🎒
0. Вышел REFT - PEFT для representation fine-tuning, узнала тут, а код тут
1. Интересная статья MobileLLM, paper c подходами к уменьшению моделей без квантизации, но поддержки и бусту качества с помощью: embeddings sharing, immediate block-wise layer sharing, deeper networks over wider networks
3. Вышла ColPali, sota для поиска документов, анализирует также визуальные фрагменты, узнала тут
4. Новая мультимодальная модель от meta с diffusion, которая предиктит сразу discreate text tokens и картинки paper
🎒AUDIO🎒
0. Вышла WavTokenizer, codec модель по качеству в опережающая Encoder, DAC, SpeechTokenizer и при этом квантующая в 75 токенов. paper
1. Люди начали тюнить LLAMA 3.1 с audio input
2. Вышла Language Model Can Listen While Speaking, пайплайн с LLM для двухканального слушания, перебивки и tts.
3. В эту же песню вышел Qwen2-Audio code, для хорошего понимания советую прочитать обзор codec моделей
4. SimpleSpeech, paper, non-autoregressive TTS на диффузии и без alignment
5. Желтый AI провел конфу Turbo ML conf, выступления уже на youtube
6. Новая модель для utterance speaker recognition от русскоговорящих ребят paper
Большинство статей с канала Speech Technology
🎒RANDOM🎒
0. Открыла для себя канал SpeechAI Pro, иногда там про бизнесовые штуки, которые я скипаю, а иногда короткие ревью докладов
1. Интересный подход для knowledge distillation.
2. Также статьи, которые я планирую прочитать или читаю можно наблюдать тут в notion page
Преамбула:
Как-то раз мы обсуждали, что по сути когда мы генерим что-то с TTS системой, мы не должны ожидать, что речь будет похожа на исходную. Например, если у вас речь в большой комнате, то сгенерированная скорее всего не будет звучать с эхо эффектом. Это ведет наше повествование в две ветви:
- audio language models - про них еще поговорим и говорили тут и тут и почти тут
- а как мы мерить будем качество?
- а что мы вообще хотим?
Если с тем, что хотим, мы разобрались - губу закатали и просто хотим приятную речь, то вот с сравнением нужно быть осторожнее. Например, если вы не берете MOS (для экспериментов это), то вы можете сравнить спектрограммы. Но тут способов облажаться дохрена: alignment, speaker conditions, length, audio power, но допустим вы удовлетворили все условия, какой-нибудь максимально наивный MSE будет очень высоким, как раз из-за "спецэффектов".
Так сижу я и атакую одну FAD систему, получается хреново. В рамках FAD это значит, что система работает и распознает мои записи как сгенерированные. Чтобы ее обмануть я могу:
- улучшить TTS
- улучшить voice conversion
- понять, а в чем еще сорс и мои записи различаются (?)
И тут нам везет, ведь работать мы можем в две стороны:
(грязный - с спецэффектам, чистый - без спецэффектов только речь)
Изначально у меня: грязный source VS чистый generated
И я могу:
- почистить source и будет: чистый source VS чистый generated
- загрязнить generated и будет: грязный source VS грязный generated
Почистить можно с demucs, speech enhancement, speech restoration. А вот загрязнить можно с аугментациями, про них я писала в этом посте.
Но грязнить мы должны ВСЕГДА по умному, тупые аугментации для умных сеток - время обучения на ветер. Поэтому буду пытаться воссоздать setting исходных записей. Для этого я буду использовать библиотеку от spotify pedalboard.
Спасибо, что лайкаете узконаправленные посты ❤️ А не только всякие ссылки
Читать полностью…Преамбула:
По сути дела self-supervised mode помогает нам в том, чтобы выучить природу предмета. Как для текста это семантика, синтаксис и что-то еще (я плохо слушала на парах). Почему бы не делать это для речи? Да, все логично - маскируй и предсказывай, не rocket science, you know. Но! Когда ты учишь gpt генерить текст, исходная задача SST - сгенерить текст никак не мешает в downstream задачке его классифицировать. А что с речью? Ну тоже проблем не должно быть, мы же говорим и все тут.
Downstream задача - automatic speech recognition. Просто предсказывай слово. Неважно где, шепотом или ором, медленно или быстро, зло или добро, та и я вообще его говорю или нет - просто предскажи. И вот лежит у меня на письменном столе wav2vec на SST, по вкусу вкусный, а на вкус? А на вкус могу ли я заиспользовать его для классификации спикера? А акцента? А ASR?
Безусловно, могу. Я вообще все могу, вопрос на сколько хорошо ;) И на что училась? А учу я просто self-supervised learning модель, где на первом этапе меня не так уж сильно интересует asr, меня интересует mutual info с "квантованой" репрезентацией от zi. При этом я за скобки выношу тот факт, что речь continuous, а мне нужны дискретные юниты, которые я учу. Но что они в себе несут?
Пусть даже если большинство downstream задач ортогональны upstream задаче, мы все еще используем эти модели, но знают ли они слова или нет?
я вам вопрос, а вы мне ответ
В чем различие между learning to initialize (meta-learning) и self-supervised learning, если в обоих случаях мы пытаемся выучить классные initial parameters?
Галопом по европам: Pre-train, prompt and predict. да 2021 год и что?
- что такое промтинг? какие виды answer бывают?
- какие претрейны у лм и под какие answer паттерны и задачи лучше подходят?
- методы prompt engineering и дискретный и continuous
- training strategies для prompts
- multi-prompts
Подойдет для освежить память, структурировать или подготовиться к экзамену)
link
github с тем же самым
#grokaem_nlp #grokaem_books
pdf - один из самых "приятных" форматов данных. На одном хакатоне мы потратили кучу времени, чтобы отпарсить таблички... А сейчас я хотела отпарсить книги, но не сплашником, а учитывая heading и потом форматировать текст, добавлять абзацы и тд.
Пара библиотечек на эти случаи:
🐡PyPDF - merge, crop, базовый retrieval текста. Сначала стоит проверить его и потом пробовать другие
link
🐡PDFPlumber - удобен если нужно взять текст только из какой-то части страницы, которую можно отдельно выделить как тут. Это возможно так как есть информация о каждой буковке.
link
🐡PyMuDF - может в чтение определенных страниц, выдает чистые fonts, можно отфильтровать footprints собственно по font.
Для табличек camelot, pdftables, unstructured -> там уже только сидеть и тыкать, что распарсит вашу табличку
Минутка личной инфы: автор канала, Милана, я)) В эти выходные будет в Мюнхене и рада познакомиться со всеми, с кем можно познакомиться 💫
Пишите /channel/milana_shhanukova
Instant Voice Cloning
#grokaem_audio
В топе у арены стоит OpenVoice от компании MyShell. Большой их плюс - можем делать voice conversion от языка, которого не было в претрейне.
main idea есть слона по частям или decouple the IVC task into separate subtasks where every subtask is much easier
Июнь был сложным и сильным месяцем для меня, но и насыщенным на новости почти во всех сферах.
🪸АУДИО🪸
1. Вышла E2 TTS пост, статья. Это не авторегрессионная TTS модель, модель flow-matching-based как self-supervised без добавок и гмо duration model, alignment и тд.
2. Вышла новая silero пост, гитхаб.
3. Вышла MARS5 TTS - text to speech, voice clone на основе 5 секунд пост, web, hugging face
4. DubWise - статья о том, как делать делать перевод под аля lipsink
5. mHubert на 147 языков веса, папир
6. У nvidia вышла новая asr canary c переводом. hugging face веса, папир
7. Вышла AudioSeal watermarking модель, paper
8. Вышла VALLE-2 tts.
9. Вышла Stable Audio Open - для генерации аудио.
🪸NLP🪸
1. Андрей Карпатый выложил reproduce GPT-2, а в репозитории столько интересного на будущее
2. Илья Гусев выложил отличный обзор о RoPE.
3. Вышел numpy 2.0
4. Маша написала обзор про спекулятивный декодинг
5. Вышла character.ai, про нее в ai ньюз
6. Вышла gemma 2
7. Вышла claude 3.5 sonnet и скажу я вам, что юзала ее я очень активно и по многих задач она помогала лучше gpt-4.
Я забыла 100% много всякого, пишите в комменты.
Также интересно узнать ваше мнение о FOMO (Fear of Missing Out (страх пропустить что-то интересное) ) в сфере новостей. Не чувствуете, что если вы не следили за новостями неделю, вы выпали из игры?
🦾Meta выложила кучу всякого для мультимодальности🦾
линк на новость
1. Генерация музыки по тексту: Meta Joint Audio and Symbolic Conditioning for Temporally Controlled Text-to-Music Generation
Код в ближ время + семплы
2. Watermarking для сгенерированной речи: AudioSeal
Код + Модель
3. Meta Chameleon - text to image, одна архитектура
Модель по запросу
4. LLM - Multi-token prediction, про которую писала в этом посте
Модель
Понедельничное нетех обсуждения. Метод, которому меня научила PHD студентка и который немного поменял мой подход к жизни в целом.
#grokaem_seby_thoughts
За день у меня может быть масса теорий и гипотез, которые я хотела бы проверить. Вот только в день у меня как минимум два проекта. Я очень не люблю держать все в голове. Стараюсь уходить домой без раздумий о задачах. Да, какой-то баг или мысль может как дементор меня преследовать и испариться с быстрым решением где-то в душе, но вот помнить все - нет, спасибо, у меня есть жизнь вне этого всего.
И вот проблема с которой я столкнулась: появляется идея - я ее записываю и забываю, а что хотел сказать автор? Ну проверишь ты это и что?
Поэтому новый паттерн для всех гипотез, которые у меня появляются:
🏔
Гипотеза:
Результат, который я ожидаю:
Как проверить:
🏔
И необходимо не лениться, а заполнять полностью и нормальными словами! Так я могу вернуться и понять, а что я вообще хотела проверить и почему. Это в разы ускоряет процессы
Да, это кажется очевидным, но почему-то все наставники, что у меня были, не заставляли меня это делать, а зря! Пример такой записи в комментариях.
XCodec: Codec Does Matter: Exploring the semantic shortcoming of codec for ALM
paper
code - у них нет нормального примера на HF, но все легко запускается через inference.py
Тренд - подружить между собой модальности не нов. Одна из дорожек - надеяться и верить, что LLM поймет другую модальность как-то так сама. Для этого все, что от нас требуется - это превратить нашу исходную модальность - в токены.
Если мы будем погружаться, то этим мы занимались всегда - те самый скрытые представления чем вам не токены? Просто теперь нам нужно число, а не вектор. Для этого существуют codecs - про encodec вот тут.
Мы можем смотреть на них как на квантизаторы. Перешли из m аудио семлов в n точек. По сути это схоже и с любым другим преобразованием. Изначально, как я понимаю, использовали их больше для музыки и звуков. И как следствие - мы выучивали low-level acoustic fluctuations. Однако для end-to-end систем нам нужно понимать, о чем идет речь.
🤓
Поэтому добавляют так называемые semantic tokens - токены, которые несут семантический смысл, спасибо кэп. А где мы учим семантику? В SST, который собираемся потом переносить на asr - это всякие hubert, wav2vec.
🤓
Поход 1. Делаем дистилляцию на первые, вторые, n-ные слои. В SpeechTokenizer - это cosine loss между первым RVQ слоем и HuBERT фичами. Это будет работать из-за каскадности RVQ. Такой же подход предложен у Moshi.
🤓
Подход 2. Добавлять семантические фичи explicitly - а именно перед RVQ. Можно, конечно просто взять HuBERT и фичи аудио энкодера, но как-то это не fancy🎩. Поэтому сделаем отдельный Encoder - Decoder, который будет брать на вход фичи HuBERT, потом они идут в semantic encoder (convs). И тут мы ловим фичи с audio encoder, конкатим от линейной проекции и вот теперь подаем в RVQ. Что также интересно: мы же не зря сделали encoder-decoder для semantic features? Будем подавать выход от RVQ в semantic decoder, чтобы как раз восстановить наши исходные фичи от HuBERT c MSE loss. И тут как раз моя ирония в начале падает, так как этот encoder-decoder и нужен нам, чтобы найти "правильные" semantic features, которые помогут и акустику восстановить, и семантику как у HuBERT оставить. А правильные они, потому что они идут в RVQ, над которым мы и пыжимся.
В комментариях пример восстановления записи.
#grokaem_audio #grokaem_papers
🥸 36. Объясните маскирование в attention.
👩🏻💻 Если говорить кратко, то в encoder transformer части мы используем только self-attention, в decoder части в первом transformer блоке мы используем также self-attention с маскированием, а вот во втором cross attention.
Мы можем разделить два понимания маскирования. Если например у нас есть паддинги, мы все равно будем их маскировать в attention и encoder. Почему? Если у нас последовательности разной длины и вы используете padding, то в attention части нам не нужно брать 'влияние' padding токенов.
masked softmax implementation
В causal attention мы используем другой вид маскирования, мы маскируем только будущие токены. Почему? Потому что в causal language modelling мы делаем предсказания только на основе предыдущих примеров.
интерактивная визуализация для bert и gpt эмбеддингов
статья про интерпретацию
🥸37. Какая размерность у матриц self-attention?
👩🏻💻Размерность матрицы self-attention зависит от числа входных элементов и параметров модели. Обычно она имеет форму (seq_length, seq_length), где seq_length - это длина последовательности, для которой применяется механизм self-attention. Таким образом, если у нас есть seq_length элементов во входной последовательности, мы имеем квадратную матрицу размером seq_length x seq_length.
Внутри файла и в notion ответы на следующие вопросы:
🥸 34. Сравните RNN и attention. Когда лучше использовать каждый из них?
🥸35. Напишите attention с нуля.
🥸38. В чем разница между BERT и GPT в рамках подсчета attention?
🥸39. Какая размерность у эмбединового слоя в трансформере?
🥸40. Почему эмбеддинги называются контекстуальными? Как это работает?
🥸41. Что используется в трансформере layer norm или batch norm и почему?
🥸42. Зачем в трансформерах PreNorm и PostNorm?
🥸43. Объясните разницу между soft и hard (local/global) attention?
🥸44. Объясните multihead attention.
🥸45. Какие другие виды механизмов внимания вы знаете? На что направлены эти модификации?
🥸46. На сколько усложнится self-attention при увеличении числа голов?
notion
файл в комментариях
Когда я долго не пишу, это значит что-то из трех: я забила хер, мне херово, я занимаюсь чем-то охереть важным
В этом месяце третье и выливается оно во второе, но где-то между я дописала ответы на вопросы для части с attention. И вот я уже где-то на экваторе всех ответов и вопросов. Многое я хочу переписать, написать лучше, удалить. Но перфекционизма не занимать и доработки будут идти постепенно.
Быть честной, я не знаю где это опубликовать для моих читатей в рф (ни notion, ни medium уже не работает) - наверное соберусь с силами и перенесу на гитхаб.
PEDALBOARD
Какие эффекты? Их много, но мне важно было сделать а-ля эффект большого зала и микрофона. Для второго я поиграю с chorus effect и reverb, а для первого будут добавлять equalizers и distortion.
Подробнее (удивительно) написано в документации. Но конечно, я не аудио инженер, я просто натюнила с claude примеры.
И вот какой мне +- подошел:
board = Pedalboard([
Compressor(threshold_db=-15, ratio=2, attack_ms=5, release_ms=50),
HighpassFilter(cutoff_frequency_hz=85),
LowShelfFilter(cutoff_frequency_hz=200, gain_db=-2),
HighShelfFilter(cutoff_frequency_hz=4000, gain_db=1.5),
Distortion(drive_db=0.7),
Reverb(room_size=0.6, damping=0.4, wet_level=0.2, dry_level=0.8),
Gain(gain_db=-1)
])
Визуализация initialization methods
Почти всегда в самом начале изучают initialization methods для сеток. Наткнулась на классную визуализацию методов, чтобы понять, что начнет обучаться, что нет и тд. На примере простой классификации на два класса и mnist. Тыкаете методы инициализации и то, как будет меняться лосс и распределения весов.
Почему это важно?
Как мы видели в буквально последнем посте иногда инициализация с предобученной модели не так уж и хороша. Ну и не только предобученные сетки вы юзаете же))
Принято считать:
1. A too-large initialization leads to exploding gradients
2. A too-small initialization leads to vanishing gradients
Популярные методы основываются на разделении с uniform и normal distribution.
- Xavier/Glorot initialization
- Kaiming He
- LeCun
- Orthogonal Initialization
Как обычно, нет идеального метода, хоть и считается, что Xavier например лучше для tanh & sigmoid activations, а Kaiming He для ReLU.
Небольшая статья с плюсами и минусами для remote sensing.
Похожая визуализация для regularization.
#grokaem_ml
LAYER-WISE ANALYSIS OF A SELF-SUPERVISED SPEECH REPRESENTATION MODEL
статья
Задача: понять, учит ли Wav2Vec слова в SST.
Метод:
Подход похож на Zero Resource Speech Benchmark, только считать его будем по слоям. Такое мы видели у Voita например, в MI для NLP.
Считают:
- CCA (canonical correlation analysis)
- MI (mutual information) - определяем лейбл через подготовленные кластеры
- Word discrimination
- Word Similarity - достаем эмбеддинги слов - считаем cosine similarity с скрытым состоянием
Сразу к результатам:
- Is Wav2Vec an autoencoder? Доказали, что SST training следует autoencoder style, где сначала до +- середины мы получаем скрытое состояние, которые отличаются от input features, а потом начинаем их восстанавливать в исходные и CCA растет.
- Согласно MI и word discrimination, средние (6-7) показывают наилучшую инфу о фонемах.
- Тот же тренд для средних слоев для word similarity как для малых, так и для больших моделей.
Question 1. Но мы же будет обучать модельку для ASR. Оказывается, что fine-tuning для ASR поможет нам уйти от autoencoder стиля и стабильно улучшать MI. Что по сути абсолютно логично, так как лосс меняется.
Question 2. Но если подготовленные веса для этих последних слоев такие плохие, мб и не будем их использовать? Оказалось, что если не инициализировать последние слои с SSF модели - результаты для WER буду лучше.
- Также показали, что для почти всех слоев растет высокая корреляция к Filter banks, предлагая подавать именно их.
Вопрос "а спикеры на каком слое тогда?" остается открытым или нет?
#grokaem_audio
FLEURS - (R)
paper
🐕🐕🐕
подводка:
В борьбе за натуральность есть два пути: много данных, но с шумом VS меньше данных, но чистые и звук также будет в конце чистый. Если вы пробовали использовать какие-то шумные данные, как condition для генерации, то вы часто получали кучу артифактов. Почему так? Потому что в большинстве случаев мы тренируемся с идеально чистыми студийными данными. Что грустно? Часто эти данные есть только на одном языке. Есть LibriTTS, из него сделали LibriTTS-R - датасет, который прошел speech restoration. Он на английском, то же самое можно сделать и мультилингвально.
🐕🐕🐕
FLEURS-R - датасет c 102 параллельными языками.
Что сделали? Используют speech restoration алгоритм Mipher поверх записей.
0. Подробнее про Mipher:
Mipher берет w2v-BERT, тащим их в Conformer-DF (extended Conformer with linear complexity attention). Но поверх этого мы несем также text и speaker фичи, потом генерим с WaveFit.
1. Для мультилингвальности меняем пару частей, просто кидаемся крутыми словами:
w2vBert -> USM (Universal Speech Model)
А вот text и speaker фичи убрали, потому что USM с обоими справлялась
🐕🐕🐕
Что мне было интересно, так это проверка:
В теории, когда мы генерим что либо с любой нейронкой - мы получаем "сгенерированные данные". То есть мы может увидить артифакты тут и там.
Поэтому делаем фильтрацию поверх:
- asr - тут мы следим за двумя вещами: не упал WER, а лучше, чтобы WER или/и CER подрос, как это случилось для 32%
- поверх мы считаем squid MOS, тут авторы говорят, что так и так squid не sensitive к linguistics -> юзаем его, людей спрашивать не будет. И действительно MOS на 0.2 лучше для чистых новых записей.
- Но как мы знаем - любой ASR датасет можно использовать как TTS, но для TTS нам всегда нужно качество лучше. Тогда получается: если сделали speech restoration, то и результаты будут лучше? Будут, да? Ну 3.89 VS 3.79 для MOS, и почти идентичные, а иногда и хуже результаты для CER.
Пример записей в комментариях.
CLASSIC NLP RNN & CNN
#grokaem_nlp #grokaem_собес
Напоминаю ссылку на 100 вопросов и уже +- половину ответов
На 100 вопросов я время от времени отвечаю, порой сильно заставляя себя повторить какую-то базу. Да, многие аспекты старые как мир, но я же обещала(((
*исправляйте, если что не так*
🥸 - взрослый дядя собеседующий
👩🏻💻 - я и вы
🥸 28. Какие виды RNN сетей вы знаете? Объясните разницу между GRU и LSTM?
👩🏻💻Главное отличие - это то, как LSTM и GRU понимают memory cell. Для LSTM memory cell и hidden state это две разных компоненты. In GRU, the memory cell это candidate activation vector, который мы апдейтим.
- vanilla RNN - update without any gates
code, math example
- LSTM
Имеет три главных gates: forget, input and output gate.
- input gate - updates the cell state given the previous hidden state and current input.
- forget gate - decides what information should be thrown away or kept also given hidden state and current input. Information from the previous hidden state and information from the current input is passed through the sigmoid function. Values come out between 0 and 1. The closer to 0 means to forget, and the closer to 1 means to keep.
- output gate - The output gate decides what the next hidden state should be based on the previous hidden state, current input and modified cell state.
Remember that the hidden state contains information on previous inputs. The hidden state is also used for predictions.
- GRU
reset and update gates only
At each time step, the GRU computes a “candidate activation vector” that combines information from the input and the previous hidden state. This candidate vector is then used to update the hidden state for the next time step.
- update gate - forget + input gate → what info to throw away from the current info and what info to add
- reset gate - how much of the previous hidden state to forget according to the current input - how much the previous hidden state is reset.
В GRU мы объединили единое скрытое состояние для передачи информации, в то время как у LSTM было два состояния: отдельное ячейки и общее скрытое состояние. Таким образом, GRU имеет меньше параметров и часто обучается быстрее.
🥸 29. Какие параметры мы можем тюнить в такого вида сетях?
👩🏻💻Кол-о слоев, number of units, bidirectional and not bidirectional.
🥸30. Что такое затухающие градиенты для RNN? И как вы решаете эту проблему?
👩🏻💻Vanishing gradient проблема обозначает, что градиент становится очень маленьким, и мы не можем обновить параметры значительно, чтобы что-то выучить. В то время как взрыв градиента обозначает обратную ситуацию, когда градиент становится очень большой и мы “перепрыгнем” минимум функции.
Для решения проблемы мы можем использовать как и более сложные сети: LSTM, GRU, так и методы, которые применимы к другим видам сетей:
- gradient clipping
- batch norm
- activation function - поменять ReLU на LeakyReLU и альтернативы:
It suffers from a problem known as *dying* ReLus wherein some neurons just die out, meaning they keep on throwing 0 as outputs with the advancement in training.
Я не знаю, кому это нужно, но я про это не знала.
audio-preview - классный extension у VS Code, который позволяет:
а) сразу посмотреть мета параметры типо sr, длины
б) прослушать запись
в) посмотреть спектрограму
Это очень удобно, когда вы постоянно что-то генерите и это нужно быстро слушать.
В дополнение я и claude еще сделали vs code task, чтобы открывать сразу n кол-о файлов, который я хочу из разных папок. Это удобно, когда у вас пару систем и вам нужно "ручками послушать" что да как. А спектрограмки только помогают!
Код таски в комментариях. Пример на картинке)
👩🏻💻ИЮЛЬ👩🏻💻
Месяц безвылазный, месяц тютелька в тютельку. Ну и будем честны, новости я вообще не читала))
NLP
1. Prompt engineering книжка
2. Хороший инструмент для json
3. Вышла Mistral Nemo на 12B, лучшая маленькая мультиязычная модель
4. Вышел ruMTEB для оценки русскоязычных эмбеддеров
5. Продолжается сбор для параллельного корпуса у Давида, можете тут поучаствовать
6. Вышла жирная LLAMA 3.1
7. Вышел FlashAttention 3
SPEECH
1. MLAAD dataset, куча синтезированных данных
2. Выше новый BigVGAN
3. Вышла Melle TTS (cross entropy VS regression?)
4. Новый objective metrics benchmark
5. Reading list Eren Gölge
Как обычно пишите в комменты, что я не сохранила 👌🏻
если у вас имеются хорошие учебные материалы по диффузиям/flow based models, поделитесь, пожалуйста 💔
Читать полностью…какое-то чудо-чудное ОТ А до 1.58 bit по квантизации
Вайб диаграмм, как у illustrated transformers, а объяснения, как у A. Karpathy.
Покрываются быстро, четко и последовательно:
изначальные подходы:
- into от fp32 до int8 через bf16
- symmetric + asymmetric quantization
- калибрация
post-quantization:
- dynamic vs static
- GPTQ
- GGUF
Ну и на сладкое: quantization-aware training, к которому я вернусь отдельно.
На обзоре сегодня статья для continual training.
0. Что такое continual training?
Это набор подходов, чтобы решить проблему catastrophic forgetting.
1. Что такое catastrophic forgetting? Это когда модель "забывает" - aka получает качество хуже на старых задачах/доменах после того, как затюнилась на новых.
Примеры: Например, у вас в компании бот, его обучили под все виды акций, наступила черная пятница, вы обучили его на новых сообщениях о черной пятнице, а он забыл об акциях для постоянных клиентов. Это horizontal continuity. Также можно горизонтально забывать информацию, когда вы обучились на general knowledge, перешли в юридический домен и все забыли, чему вас учили в школе.
Подходов для решения forgetting много, но сгрупировать можем как Replay, Regularize, Architecture.
0. Replay - храни какой-то буффер пред. задач и на них тоже делай update при обучении на новых.
1. Regularization - когда у вас есть proxy значение весов и вы используете его как reguralisation term.
2. Architecture aware - LoRA, PEFT, PNN.
Для полного погружения рекомендую вот этот большой обзор.
🦕🐢🦕🐢🦕🐢
А теперь статья:
Parameterizing Context: Unleashing the Power of Paramter-Efficient Fine-Tuning and In-context tuning for continual table semantic parsing. NeurIPS 2023.
статья
Задача: решать sql запросы.
Подход: teacher-student pipeline.
Teacher:
Использует ICT - in context training, это когда вы взяли новую задачу, затюнились под нее на паре примеров, сохранили веса, для следующей задачи будете использовать именно их (где тут continual? нет тут его). Примеры выбираете с context mining strategy - когда смотрите на все примеры и находили самые близкие между собой или к запросу (4.1.1).
Но если мы просто подгружаем предыдущие веса, почему это называет continual, ведь мы все забудем нахер...
Student:
Так и есть, поэтому возьмем student, этот студент будет инициализирован с теми же весами, что и изначально teacher. Но на каждую задачу мы возьмем M токенов и будем тюнить их. На каждую задачу мы инициализируем веса с изначальных, а не с предыдущих. По сути это тоже не continual. А на инференсе мы сначала определим задачу (паттерн запроса), достанем нужные веса для M первых prompt эмбеддингов и все.
По сути вкусно, но на вкус не вкусно. Ведь мы и для учителя, и для ученика не использовали continual approach. Для учителя мы просто сделали почти curriculum training, а для ученика вообще просто под каждую задачу веса сохраняем. Но это неважно. Работает ведь.
Мерить будем на 4 метрики: task accuracy, example accuracy, initial accuracy и memory decay. Где initial accuracy - это качество когда мы не затюнились, а memory decay - как мы теряем последовательно качество при появлении новых задач. Важно не терять memory decay.
Наблюдения:
0. Студент помогает и в domain, и в stucture shift.
1. Continual initialization - когда эмбеддинги студента инициализируем последовательно не помогают.
2. Эмбеддинги студента архи важны.
3. Context mixing тоже архи важен.
4. davinci как teacher без тюнинга на задачу с таблица дает качество близкое к затюненному T5.
Итог - важен именно student с его эмбеддингами на каждую задачу.
#grokaem_nlp
PINOKIO
Бесплатное 1Click big picture приложение, чтобы проверять работу разных новых приложух.
Причины юзать для меня:
- Когда выкатывается что-то новое, не всегда есть space на hf и поиграться с примерами хочется.
- Когда выкатывается новая моделька, я хочу быстро проверить есть ли буст, но я не хочу тратить кучу времени на установку и тд.
- Иногда код всего проекта слишком старый/запутанный/разбросанный/все вместе.
Эти три причины решает PINOKIO - быстрая установка, быстрый запуск, много моделей прочекать, space в дискорде с поддержкой.
Я проверила с ним:
- Face ID generation
- Stable Audio - генерация музыки
- RVC - retrieval based voice conversion