grokaem себя

Description
A small bunch of things that I encounter during my journey as a young NLP developer: math, DL, ML, python and stories
Advertising
We recommend to visit
HAYZON
HAYZON
6,053,581 @hayzonn

لا اله الا الله محمد رسول الله

👤 𝐅𝐨𝐮𝐧𝐝𝐞𝐫: @Tg_Syprion
🗓 ᴀᴅᴠᴇʀᴛɪsɪɴɢ: @SEO_Fam
Мои каналы: @mazzafam

Last updated 3 weeks, 1 day ago

Architec.Ton is a ecosystem on the TON chain with non-custodial wallet, swap, apps catalog and launchpad.

Main app: @architec_ton_bot
Our Chat: @architec_ton
EU Channel: @architecton_eu
Twitter: x.com/architec_ton
Support: @architecton_support

Last updated 2 weeks, 2 days ago

Канал для поиска исполнителей для разных задач и организации мини конкурсов

Last updated 1 month ago

2 months, 2 weeks ago

Понедельничное нетех обсуждения. Метод, которому меня научила PHD студентка и который немного поменял мой подход к жизни в целом.

#grokaem_seby_thoughts

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

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

Поэтому новый паттерн для всех гипотез, которые у меня появляются:
🏔
Гипотеза:
Результат, который я ожидаю:
Как проверить:

🏔

И необходимо не лениться, а заполнять полностью и нормальными словами! Так я могу вернуться и понять, а что я вообще хотела проверить и почему. Это в разы ускоряет процессы

Да, это кажется очевидным, но почему-то все наставники, что у меня были, не заставляли меня это делать, а зря! Пример такой записи в комментариях.

2 months, 2 weeks ago

Я на какой-то период перестала сидеть в чатах, но вернула эту привычку. Один из любимых чатов от канала 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)

```

2 months, 2 weeks ago

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

5 months, 2 weeks ago

Июнь был сложным и сильным месяцем для меня, но и насыщенным на новости почти во всех сферах.

?АУДИО?

  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 (страх пропустить что-то интересное) ) в сфере новостей. Не чувствуете, что если вы не следили за новостями неделю, вы выпали из игры?

5 months, 4 weeks ago

На обзоре сегодня статья для continual training.

  1. Что такое continual training?
    Это набор подходов, чтобы решить проблему catastrophic forgetting.
  2. Что такое 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

6 months, 1 week ago

*?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, про которую писала в этом постеМодель

6 months, 1 week ago

PINOKIO

Бесплатное 1Click big picture приложение, чтобы проверять работу разных новых приложух.

Причины юзать для меня:
- Когда выкатывается что-то новое, не всегда есть space на hf и поиграться с примерами хочется.
- Когда выкатывается новая моделька, я хочу быстро проверить есть ли буст, но я не хочу тратить кучу времени на установку и тд.
- Иногда код всего проекта слишком старый/запутанный/разбросанный/все вместе.

Эти три причины решает PINOKIO - быстрая установка, быстрый запуск, много моделей прочекать, space в дискорде с поддержкой.

Я проверила с ним:
- Face ID generation
- Stable Audio - генерация музыки
- RVC - retrieval based voice conversion

6 months, 2 weeks ago

EINOPS
Когда-то давно я писала и тут писала, и тут писала про всякие stack, repeat, cat и тд в pytorch. Единственное, что меня смущало, это что эти моменты всегда прописываются в forward и при обычном обращении к модели я их не увижу. einops предлагает решение с обертками над всеми функциями и при этом явным указанием, что будет меняться.

Например, Rearrange("b c n w -> b n c w") - обычный reshape. И что еще прикольнее, что это не обязательно должны осмысленные слова (пример на фото) и таким образом эти модули reshape, стаков и тд можно запихивать в torch.Sequential.

В поддержке: reshape, reduce, repeat, pack, unpack и тд

Пример:

class MelSpectrogramEncoder(nn.Module): def \_\_init\_\_(self, cfg): super(MelSpectrogramEncoder, self).\_\_init\_\_() self.feature\_extractor = nn.Sequential( nn.Conv2d(cfg["input\_dim"], 32, kernel\_size=(128, 1), stride=1), nn.BatchNorm2d(32), Rearrange("banana car nonsense water \-> banana nonsense car water"), )

MelSpectrogramEncoder(
(feature_extractor): Sequential(
(0): Conv2d(1, 32, kernel_size=(128, 1), stride=(1, 1))
(1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Rearrange('banana car nonsense water -> banana nonsense car water')
)

link

6 months, 2 weeks ago
6 months, 2 weeks ago

Сегодня на обзоре статья, которая возможно вам не особо и нужна. Но давайте сделаем вид будто другие статьи, которые я обозреваю прям сильно вам сдались. Поехали.

MULTILINGUAL TTS: Saeki, T., (2024). Extending Multilingual Speech Synthesis to 100+ Languages without Transcribed Data.
*?Проблема*: на много языков у нас нет текстов. Почему нет текстов? Потому что полевые лингвисты не боги и не могут сделать транскрибацию всех аудио. На много языков у нас нет аудио. Почему? Потому что люди умирают. Вместе с ними умирают и языки линк.

*?Зачем это надо?* Чтобы сохранять культуру и воспитывать клевое поколение, которое умеет говорить на родном языке (не такие как я да)

*?Метод:*По сути мы почти всегда крутимся вокруг одной модальности - это какое-то скрытое представление. Будто то asr или tts, у нас всегда есть encoder и decoder. По сути мы можем сделать так, чтобы это скрытое состояние было похожим и для asr, и для tts. Тогда мы возьмем две модальности: utf-8 tokens + speech. Сделаем 4 блока (картинка внизу):

Speech2Feature
Feature2Text
Text2Feature
Feature2Speech

Главные вопрос, как это тренировать?
*?Стадия 1. Pretrain.*Помните, что мы должны как-то получить классные энкодеры для речи и для текста. Для этого мы обычно тренируемся в self-supervised mode. Для текста возьмем MLM, тут берем unpaired texts из писем бабушки. А для speech encoder возьмем аудио записи от полевых лингвистов и будем обучать с BEST-RQ. Эта метрика то же самое, что и с MLM, но на спектрограмме. Проджектим слайс спектрограммы с random initilized matrix, берем random initialized codebook, прогоняем максированную спетрограмму, считаем лосс как MLM.

*?Стадия 2. Supervised.*И тут мы заинициализируем text encoder, а speech encoder заморозим. Лингвисты херней не страдали, так что у нас есть все таки paired data: speech -> text. Ее и возьмем. Тут мы будем обучать компоненты T2F: text encoder, duration upsampler, feature decoder, vae. Как? Пропускаем аудио через S2F, получаем скрытое клевое z, пропускаем текст через T2F, тоже получаем z. Но стоп! С L1 лосс приближаем их. Но погодите ка, у нас вообще разные модальности. Для стабилити и правильного feature space, мы вставим тут VAE и посчитаем KL divergence, топчик! Прогоняем к F2T, получаем текст. Считаем RNN-T loss.

*?Стадия 3. Но как добавить инфу для unpaired data?*К этому моменту мы только обновились при pretrain на наших unpaired samples. Но таких языков у нас дофига и если мы уже нормально обучили блоки с speech encoder и text encoder, то почему бы их не заюзать? Для unspoken text (то есть просто речь) прогоним через T2F и F2T, посчитаем RNN-T, не сильно заумно. А untranscribed text сделаем transcribed, у нас уже есть S2F блок. По сути можем и whisper взять, но что мы зря учили? А потом прогоним через T2F, сравним скрытые и обновимся.

*?language id:* К этому моменту мы не добавили только language ID and speaker ID. Для них мы возьмем просто их embedding, а также добавим OOV ID для незнакомых языков и спикеров, также будем иногда добавлять их в тренировку, чтобы уменьшить bias комбинаций языков и спикеров.

Таким образом мы получаем систему, которая на инференсе берет текст, семплит с VAE, получает классное скрытое z представление похожее на скрытое для речи. И потом прогоняет через WaveFit, его мы кстати просто на american speech натренировали.

Статья мб и не такая важная, если вы не занимаетесь multilingual tts, но клевая, чтобы подчерпнуть идей для работы с разными модальностями данных.

Моя презентация и заметки в комментариях.

статья
семплы

#grokaem_audio

We recommend to visit
HAYZON
HAYZON
6,053,581 @hayzonn

لا اله الا الله محمد رسول الله

👤 𝐅𝐨𝐮𝐧𝐝𝐞𝐫: @Tg_Syprion
🗓 ᴀᴅᴠᴇʀᴛɪsɪɴɢ: @SEO_Fam
Мои каналы: @mazzafam

Last updated 3 weeks, 1 day ago

Architec.Ton is a ecosystem on the TON chain with non-custodial wallet, swap, apps catalog and launchpad.

Main app: @architec_ton_bot
Our Chat: @architec_ton
EU Channel: @architecton_eu
Twitter: x.com/architec_ton
Support: @architecton_support

Last updated 2 weeks, 2 days ago

Канал для поиска исполнителей для разных задач и организации мини конкурсов

Last updated 1 month ago