grokaem_seby | Unsorted

Telegram-канал grokaem_seby - grokaem себя

2301

A bunch of things that I encounter during my journey as NLP/Audio developer

Subscribe to a channel

grokaem себя

Преамбула:

Как-то раз мы обсуждали, что по сути когда мы генерим что-то с 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.

Читать полностью…

grokaem себя

Спасибо, что лайкаете узконаправленные посты ❤️ А не только всякие ссылки

Читать полностью…

grokaem себя

Преамбула:
По сути дела 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 задаче, мы все еще используем эти модели, но знают ли они слова или нет?

Читать полностью…

grokaem себя

я вам вопрос, а вы мне ответ

В чем различие между learning to initialize (meta-learning) и self-supervised learning, если в обоих случаях мы пытаемся выучить классные initial parameters?

Читать полностью…

grokaem себя

Галопом по европам: Pre-train, prompt and predict. да 2021 год и что?

- что такое промтинг? какие виды answer бывают?
- какие претрейны у лм и под какие answer паттерны и задачи лучше подходят?
- методы prompt engineering и дискретный и continuous
- training strategies для prompts
- multi-prompts

Подойдет для освежить память, структурировать или подготовиться к экзамену)

link
github с тем же самым

#grokaem_nlp #grokaem_books

Читать полностью…

grokaem себя

pdf - один из самых "приятных" форматов данных. На одном хакатоне мы потратили кучу времени, чтобы отпарсить таблички... А сейчас я хотела отпарсить книги, но не сплашником, а учитывая heading и потом форматировать текст, добавлять абзацы и тд.

Пара библиотечек на эти случаи:

🐡PyPDF - merge, crop, базовый retrieval текста. Сначала стоит проверить его и потом пробовать другие
link

🐡PDFPlumber - удобен если нужно взять текст только из какой-то части страницы, которую можно отдельно выделить как тут. Это возможно так как есть информация о каждой буковке.
link

🐡PyMuDF - может в чтение определенных страниц, выдает чистые fonts, можно отфильтровать footprints собственно по font.

Для табличек camelot, pdftables, unstructured -> там уже только сидеть и тыкать, что распарсит вашу табличку

Читать полностью…

grokaem себя

Минутка личной инфы: автор канала, Милана, я)) В эти выходные будет в Мюнхене и рада познакомиться со всеми, с кем можно познакомиться 💫

Пишите /channel/milana_shhanukova

Читать полностью…

grokaem себя

Instant Voice Cloning

#grokaem_audio

В топе у арены стоит OpenVoice от компании MyShell. Большой их плюс - можем делать voice conversion от языка, которого не было в претрейне.

main idea есть слона по частям или decouple the IVC task into separate subtasks where every subtask is much easier


Какие у нас есть subtasks вообще?


- сказать речь на правильном языке
- перенести интонацию
- перенести спикера

Задачу 1 поставим на tts или запишем сами голосовое. Output TTS тогда будет X(Li, Si, Ci) L - language, S - style, C - tone color, где i - это source speaker (наше голосовое или TTS), а o - таргет спикер. X(Li, Si, Ci) мы прокидываем через SFT и потом просто энкодер. На выходе мы получили Y(Li, Si, Ci).

Задача 3. Начало. Берем tone color - 2d CNN, он вернет нам просто feature vector c информацией спикера.

🤹🏾‍♂️А теперь начинается самое важное, следите за руками, никакого мошенничества 🤹🏾‍♂️
X(Li, Si, Ci) -> tone converter -> v(Ci) - вектор тона сорсового спикера
X(Lo, So, Co) -> tone converter -> v(Co) - вектор тона таргет спикера

Берем normalizing flows (это снова cnn'ки), на выходе Z(Li, Si). Помогите Даше найти, что она потеряла. А потеряла она как раз Ci - контур тона базового спикера.

Берем inverse normalizing flows и говорим: вместо Ci перенеси Co, то есть вместо тона исходного спикера перенеси тон таргет спикера, пожалуйста.

Ну а дальше все проще, на выходе у нас Y(Li, Si, Co) и мы несем его в HifiGan и готово.

— отступление —
Но как мы обучили flow слои убирать именно тон? Для source audio у нас есть текст, его мы кодируем через IPA токены, потом трансформер слои. Берем аудио его через flow слои. Делаем alignment along time dimension. И получаем L'. Учить будем через KL divergence для L' и выхода аудио у flow layers. Тем самым мы пытаемся заставить flow слои оставить только то, что важно в семантике, а значит удалить speaker info. Тут безусловно вопрос почему остается emotion, accent и тд, но ладно.

код, статья

Читать полностью…

grokaem себя

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

🪸АУДИО🪸

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

Читать полностью…

grokaem себя

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

Читать полностью…

grokaem себя

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

Читать полностью…

grokaem себя

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

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

Читать полностью…

grokaem себя

🌱МАЙ 2024 🌱

Разберем мои пересланные сообщения. Сумбурный получился месяц.

SPEECH:
0. про эту статью еще будет обзор, но в этом месяце я ее активно юзала mp-senet (speech enhacement с magnitude and phase decoding)
1. xtts выставляет кол-о токенов для генерации кастомно и легко лечится с 250 -> 500
2. еще одна и на этот раз интересная статья с LLM + TTS
3. интересный подход с error correction у asr
4. elevenLabs начали петь

NLP:
0. long-text functionality с retrieval heads
1. llama 3 from scratch
2. в hf добавили квантование kv
3. интересный подход рассказать про attention, я все еще ссылаюсь на когда-то где-то пример с поисковиком
4. лекция про attention O(n)
5. Илья выложил бота с разными русскоговорящими моделями, role model честн слово
6. вышла статья с your transformer is linear

рандомные:
0. свежий обзор PEFT
1. по квантизации учебные материалы
2. очень приятный обзор по multiple gpu
3. открыла для себя канал rizzearch, мне очень по душе статьи
4. бот для генерации арта, бизнес идея - подтянуть chatgpt и генерить объяснение этого арта

что я пропустила? (про chatgpt не писать)

Читать полностью…

grokaem себя

Better & Faster Language Models via Multi-token prediction

Только ленивый не восхитился статей с multi-token на линкедине, быстренько разберемся в чем соль.

0️⃣ Помните, мы говорили про speculative decoding? папир
Его можно делать как self, то есть когда вы предсказываете несколько токенов сразу -> blockwise parallel decoding. Это когда вы параллельно предсказываете следующие токены, но используете только один контекст. То есть для генерации 10-ого слова у вас есть 9 предыдущих, для генерации 11-ого слова у вас также есть 9 предыдущих, для генерации 12-ого тоже только 9. И так вы считаете в параллель. Но если мы можем предсказывать без ближайшего контекста, то почему мы не можем также тренировать?

1️⃣ Почему это может быть выгодно?
Мы можем генерить быстрее. Вроде бы этого достаточно, но! Нужно же качество чтобы все снова сравнивали с мозгом, так увеличение до 4 токенов для маленьких помогает в задаче induction (предсказать токен-пару), улучшает метрики для algorithmic reasoning и лечит кукуху.

2️⃣Как это сделать?
Авторы предлагают шарить несколько частей: общий trasformer truck и unembedding matrix (впервые видела, чтобы так называли...). Что не шарим? N-голов, каждая из голов отвечает за следующую x+n позицию, но каждой голове известен один и тот же контекст. Собственно почему бы не перестать делать несколько n прогонов? Так и делают, после прохода через shared truck, мы идем по головам и собственно считаем лоссы, как прошлись посчитали предыдущий лосс с shared truck'a.
Картинка в комментариях

3️⃣А разве раньше уже не показали, что это неверный подход?
Да, как раз авторы показывают, что такой кейс появляется только с usefullness only on scale. Так показатели повышаются только с увеличением модели от 3B. (Figure 3)

4️⃣Почему это может работать?
Одно из объяснений - это lookahead reinforces choice points, то есть для предсказания сложного токена мы увидим цепочку n раз, а не 1. Например, сложно предсказать 5 токен. Раньше мы видели его как 4 токен -> 5 токен. А теперь с предсказанием по 3 токена мы увидим его в 2 -> 5, 3 -> 5, 4 -> 5. Там еще формул накидали за information-theoretical argument, но кажется смысл тот же.

папир

#grokaem_nlp

Читать полностью…

grokaem себя

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

Например, на linkedin наткнулась на одно ссылка:
Neosensory develops wearable devices that empower people with new senses.
——
Идея в том, что для многих "стал плохо слышать" - это не про то, что надо громкость прибавить. А скорее про "не могу понять, что ты говоришь". Разница большая. То есть нам не нужен усилитель - нам надо разобрать только определенные звуки (например, женский или детский голос с более высокими частотами)

——
Смысл: алгоритм, который фильтрует background noise, достает установленные target phonemes (s, t, z, k). Каждая из фонем дает импульс на браслете. Таким образом мы как будто заполняем то, что не услышали маленькой вибрацией, но эта вибрация у нас на руке, а не в ушной раковине. 🤳🏻

——
Что сделали? А вот хер знает что. Соединили LibriSpeech и LibriSpeech augmented - записи с микрофона на браслете. И про модель скромно сказали: "neural network model that used a real-time temporal convolutional network structure optimized for real-time speech recognition." Скорее всего спектрограмма + маленькая cnn. Занимательно. Latency у них получилось в 10 milliseconds.

——
Через 6 неделек носки браслета встретили участников и провели *барабанная дробь* опрос 🫡. Ну и показали, что да - люди стали лучше слышать, как неожиданно и приятно.🎁 Но камон эффект плацебо никто не отменял, плюс участникам заплатили. Ну и что прям вот ты скажешь компании, которая тебе заплатила, что устройство 0 benefit дает?

Конечно, адаптивность мозга на замену сигнала с слухового нерва на кожу - это классно, но как-то proof of concept хромает.
——
Но так как мне было стремно выкладывать только это, вот вам подборка каких-то ссылок:

- пост c статьями по связи GPT like и EEG
- ardEEG на ардуино
- началось соревнование по декодированию eeg, ребята из the last neural cell будут участвовать
- нашла канал Нейроинтерфейсы, интересные посты и с новостями, и с статьями

Читать полностью…

grokaem себя

Визуализация 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

Читать полностью…

grokaem себя

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

Читать полностью…

grokaem себя

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.

Пример записей в комментариях.

Читать полностью…

grokaem себя

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.

link

🥸31. Зачем в NLP Convolutional neural network и как вы его можете использовать? С чем вы можете сравнить cnn в рамках парадигмы attention?
👩🏻‍💻CNN могут обрабатывать текст окном, что позволяет захватывать local patterns. Тем самым CNN могут полезны для извлечения локальных паттернов, например, n-gramы. best explanation ever

CNN для текста можно сравнить с local attention как с monotonic, так и с predictive alignment. В случае с CNN агрегация идет относительно pooling и мы можем уменьшать карту активации, а в случае с attention мы будем агрегировать относительно функции внимания, но карта не будет меняться в размерности. link

Все картинки прикладываю в комментариях, их и иногда формулы вы можете посмотреть в notion.

Читать полностью…

grokaem себя

Я не знаю, кому это нужно, но я про это не знала.

audio-preview - классный extension у VS Code, который позволяет:
а) сразу посмотреть мета параметры типо sr, длины
б) прослушать запись
в) посмотреть спектрограму

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

В дополнение я и claude еще сделали vs code task, чтобы открывать сразу n кол-о файлов, который я хочу из разных папок. Это удобно, когда у вас пару систем и вам нужно "ручками послушать" что да как. А спектрограмки только помогают!

Код таски в комментариях. Пример на картинке)

Читать полностью…

grokaem себя

👩🏻‍💻ИЮЛЬ👩🏻‍💻
Месяц безвылазный, месяц тютелька в тютельку. Ну и будем честны, новости я вообще не читала))

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

Как обычно пишите в комменты, что я не сохранила 👌🏻

Читать полностью…

grokaem себя

если у вас имеются хорошие учебные материалы по диффузиям/flow based models, поделитесь, пожалуйста 💔

Читать полностью…

grokaem себя

какое-то чудо-чудное ОТ А до 1.58 bit по квантизации

Вайб диаграмм, как у illustrated transformers, а объяснения, как у A. Karpathy.

Покрываются быстро, четко и последовательно:
изначальные подходы:
- into от fp32 до int8 через bf16
- symmetric + asymmetric quantization
- калибрация

post-quantization:
- dynamic vs static
- GPTQ
- GGUF

Ну и на сладкое: quantization-aware training, к которому я вернусь отдельно.

Читать полностью…

grokaem себя

На обзоре сегодня статья для 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

Читать полностью…

grokaem себя

PINOKIO

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

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

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

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

Читать полностью…

grokaem себя

На удивление приятный speech enhacement, который мне порекомендовали, роботовойс сильно не уберет, но идеально чистит шум на фоне и хорошо повышает голос по силе.

Resemble Enhance

* для запуска только надо не resemble_enhace, а resemble-enhance *

gradio demo

#grokaem_audio

Читать полностью…

grokaem себя

А suno.ai теперь по 4 минуты генерит треки (сначала для этого 3, а потом делаешь extension и склеиваешь)

Читать полностью…

grokaem себя

SELF-SUPERVISED SPEECH REPRESENTATION LEARNING review
Большое и классное ревью self-supervised подходов.

link

Обычно у нас есть representation model и какая-то downstream модель. Мы итак это знаем по pretrained model, но важно, что representation model почти всегда учится в self-supervised mode. Почему? Потому что для этого нам просто нужно больше данных, а unlabeled data у нас много. Но что не так с речью? Она sequence с variable длиной та и без заданных сегментов, так еще и continuous.

Обзор покрывает кучу других вещей:
- history behind
- datasets
- benchmarks и как с ними работать
- очень классные и подробные описания базовых моделей
- multimodal и acoustic embeddings

Основные подходы:
- GENERATIVE: (pre-text задача генерить на основе маски или corruption): autoencoding, autoregressive (VG-APC quantization), masked reconstruction, reconstruct другие тагреты
- СONTRASTIVE: CPC (Contrastive Predictive Coding), wav2vec
- PREDICTIVE: continuous loss, например, squared error (HuBERT, Discreate BERT, WavLM, data2vec)

#grokaem_audio

Читать полностью…

grokaem себя

🏵АПРЕЛЬ 2024🏵

предупреждение - я не читаю все и я не читаю все новости

SPEECH:
- Вышел релиз у Assemby AI на 12.5M данных для asr, playground
- Прошел ICASSP, было довольно много интересных статей, наверное надо дойти до нормального обзора. Одна из последних Noise masking attacks в asr.
- Прошел семинар по удалению шума от вшэ, советую анонсы этого канала, классные. И сам семинар был хороший, у ребят есть также свой канал с лекциями
- Вышла flash speech, 20x по инференсу для TTS
- Денис выложил RuNorm - нормализатор русского текста для TTS (сокращения, числа и тд). Подробнее и потестить тут
- *Обновился* комон войс с validated 124 languages

NLP:
- Новый дроп Mixtral 8*22B (262GB, bruh)
- У AIRI вышел обзор их статьи про пространство языковых моделей
- У 3Blue1Brown вышло видео с объяснение attention, экстетика you know
- Вышла LLAMA 3
посты, которые лучше прочитать, но мне понравились:
- обзор статьи с not all tokens are what we need - еще одна статья, подкрепляющая мысль о том, что dataset is important и фильтрация от предобученной модели - это круто
- пост с перепроверкой фактов модели, по сути то, чего не хватает LLM и мне в частности - перепроверить всю инфу, а для этого нужно прочесать весь интернет. Пайплайн классный с автономными фактами, есть возможная модификация с связью фактов с друг другом (do we need graphs?)
- обновился справочник по PEFT

Читать полностью…

grokaem себя

Вернемся к истокам. Один из любимых типов задач для меня - это two pointers. Очень давно нашла список с типовыми задачами для этого типа задач и все ждала момента, чтобы выложить его сюда, а что ждать?

🤞🏻All two pointers tasks список 🤞🏻
Список разбит на подтипы, например, sorted arrays или substrings.

Для себя я держу в голове задачи на пойтеры как либо: быстрый и медленный пойнтер, либо start и end (да, я не люблю право и лево):

1. Both ends - задача, как раз тот случай с началом и концом. Например, задача с водой в контейнере - двигаем пойнтеры с той стороны, что меньше, так как максимум воды будет только тогда, когда у нас стенки будут высокими.
2. Slow and fast pointer - задача, где у нас есть медленный пойнтер и быстрый, быстрому нужно что-то найти (какое-то условие) и тогда будет двигаться медленный. Часто мы можем заинициализировать медленный вне цикла, а по array двигаться быстрым. Например, задача на удаление дубликатов, когда дубли мы должны отодвинуть назад, что по сути означает - ставь на место медленного первый попавшийся уникальный быстрый.
3. Pointers on 2 arrays - задача, где два пойтера с одного конца, но для разных arrays. Например, задача, где нужно смержить две последовательности. Интересно, что ее легче решать не с начала последовательности, а с конца. И второй подтип этого вида - это задачи, где мы сначала находим в большой array место сплита, а потом мержим.

И у меня к вам 3 вопроса:
- Не хотите в комментах или отдельными постами обсудить эти задачи? 🥸
- Мб есть еще какой-то тип?
- Какой из типов вы считаете похожим и иногда идентичным sliding window?

Читать полностью…
Subscribe to a channel