A bunch of things that I encounter during my journey as NLP/Audio developer
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"),
)
Сегодня на обзоре статья, которая возможно вам не особо и нужна. Но давайте сделаем вид будто другие статьи, которые я обозреваю прям сильно вам сдались. Поехали.
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
🌱МАЙ 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 не писать)
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
оукей, пост про мозг должен был быть, да? И нельзя сказать, что я прям вот сильно лох педальный, я тщетно искала нормальную статью на обзор.
Например, на 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_nlp
Mixture of Depths (MoD)
paper
Уже в парочке каналов написали про новую статью, го и мы пройдемся.
🪀basic idea behind - нечего считать attention на всех слоях на всех токенах, если можно не считать🪀MoD - это как MOE, только используем не mutliple experts, а одного, которого можем скипнуть (skip connection)!
🪀pipeline:
На каждом слое self-attention выбираем k токенов для обновления. Эмбеддинги только этих токенов будут участвовать в подсчете и обновляться, так как это self-attention, внимание для обновления других эмбеддингов будет также только от этих k.
Этот подход относится к conditional computation - использовать compute только когда надо. Иначе можно делать early exiting или использовать адаптеры, чтобы находить skip блоки.
🪀Что нужно от нас:
- выставить capacity - количество токенов для topk
- делать causal lm - выбор topk это non casual операция, почему? Потому что используются все токены. Одно из решений для router - штуки, которая и выбирает токены - базово заменить softmax на sigmoid. А именно - мы добавляем либо auxiliary задачу, либо auxiliary loss, который будет пытаться выучиться сам на нужную подзадачу. Для нас эта задача - понять, что токен должен быть в top k без мам пап и других токенов, то есть через сигмойду. Хорошее объяснение по таймкоду.
🪀Важные штуки:
- граф подсчета не динамический, то есть мы заранее выставили k - worst case scenario
- в gradient path подключаются веса router, как раз те, по которым мы выбрали k токенов (p. 7)
- лучше сработал вариант вставки MOD каждые два слоя с доступом только к 12.5% токенов, то есть пред слой видел все
🪀Глоссарий:
- FLOP - floating point operations per second. FLOP будет уменьшаться квадратично, если T - исходное кол-о, attention FLOP T'2, возьмем половину токенов для обновления T/2, attention будет (T/2)'2 или 0.25 FLOP intense
- Iso-FLOP - количество компьюта для подсчета в FLOP, чтобы натренировать модель
Круто, когда isoFLOP остается таким же, но мы при этом увеличиваем кол-о параметров. Это как раз наш кейс.
🪀Что с этим всем можно делать дальше?
Ну тут понеслась душа в рай, и long term memory tokens можем сделать, и какие-то только как keys использовать, и вместо identity function придумать разные под каждый кейс.
——
Ну и мы тут не просто так собрались, представим, что вы на собесе и сказали, что недавно прочитали эту статью и вам в ответку прилетает вопрос: почему не используют top p? Ваши действия в комментариях.
Март был сложным месяцем, что было сохранено у меня в закладках? Многое пропустила, пишите в комментах что))
МАРТ 2024
🎏NLP🎏
- вышла моделька T5 для русского, окно в 512, но summary Big мне понравилось
- интересный блок про модель Based аля замену transformer
- пара советов для улучшения rag
- статья от Яндекса о том, как они summary делали. Пожалуй, из всего, что делает Яндекс - эта штука меня поразила больше всех, так как на хакатоне делали похожую штуку. И тут самая главная вещь (барабанная дробь) - размеченные данные, что как обычно выигрыш. Много интересных трюков и инвайтов.
- кофаундер hugging face выложил длинный и интересный блок по LLM
- от нетфликса прилетела статья почему cosine similarity плох
🎏Speech🎏
- вышла voice engine - генерим текст по семплу аудио, весов нет
- громко по всем каналам прогремела suno ai, я вот в чатике better data community написала об этом, хайпа не было, сидите в чатиках, похайпуем. Уже пошли посты про промтинг, а мне интересно на каких промтах они вообще обучались
- вышла voice craft - с ней мы можем редачить речь и делать zero shot tts
🎏Рандомные🎏
- канал Рената Алимбекова, много про собесы, решения задачек и тд, клево для начинающих
- хороший cheet sheet вспомнить базу и повесить на стенку
Попрыгав по статье о EEG, эффектом википедии я дошла до Towards Voice Reconstruction from EEG during Imagined Speech.
NeuroTalk - неинвазивно читаем сигналы мозга и переводим сразу в речь, даже не в текст!!! (да это же круто!👍🏻) Система не End-to-end:
1. Generator
2. Discriminator
3. Vocoder - HiFi-GAN
4. ASR - HuBERT
Соответственно и лоссов у нас 3: reconstruction, GAN, CTC.
_____
Теперь кратко пайплайн:
Задача - сигнал EEG сделать аудио сигналом реальной речи. EEG -> mel spec -> wav. На этапе с mel spec мы понимаем, что это какой-то генератор.
- А какой именно должна быть эта mel spec?
- Такой же как и у реальной речи.
- Что это?
- GAN. С части генератора берем reconstructed mel spec, считаем reconstruction loss в сравнении с mel spec, где человек говорит. Прокидываем эти две спектрограмки в discriminator и просим сказать, где сгенерированная melspec, а где та, где человек говорит (spoken EEG/melspec). Снова считаем лосс уже GAN. С reconstruct melspec делаем vocoder, получаем wav, ее в asr -> получаем текст и сравниваем с текстом, который представлял человек.
Теперь, когда вы прочитали и закрыли скорее всего пост - вопросы:
0️⃣ Как так нужно пройтись по EEG сигналу, чтобы его восстановить?
Embedding space становится из 5000 time * 64 channels -> 104-feature * 16-time с помощью CSP (common spatial pattern). Про них тут кратко "These eigenvectors (spatial filters) project the EEG signals into a new space where the classes are optimally separated in terms of variance. In other words, the resulting spatial filters are basically a set of weights that can be applied to the EEG data to obtain a new set of spatially filtered data that emphasizes the differences between the two classes." По сути переносим обученными CSP filters наши значения EEG в новый space при этом пытаясь их разделить.
1️⃣Генератор с attention?
Попридержи коней, Conv и GRU. С мотивацией на time axis и sequence features используется GRU на выходы по Conv1d. Потом делают upscale с transposed Conv (transposed conv для upscale reminder) слоями.
2️⃣Мы учили на мелспектрограммах речи, которая говорится, а подавали eeg как люди представляют речь. Ок ли это? Ну камон, а как ты будешь подавать спектрограмму, если человек молчит? Делаем Domain Adaptation, он на самом деле клевый, потому что молчание - золото, нет шума от артикуляции и вибраций. Адаптируем домен двумя степами: 1) шарим csp filters между spoken и imagined EEG 2) делаем transfer learning с обученной модели на именно говорящие EEG
И тут интересный момент 🧊 CSP weights они натренировали именно на imagined EEG, а потом инферили на spoken, хотя в теории все лучше было бы делать на spoken. Таким образом latent space of spoken speech приближают к imagined. Также добавляют, что это позволяет именно речь отразить, а не артикуляцию и всякие шумы.
Задротский комментарий: в статье написано, что делили на 5 фолдов, но нет информации удаляли ли спикеров теста из трейна. Возможно этого не было, а это можно считать test leakage.
______
Что получилось в итоге? Супер-пупер все вкусно декодируется для слов, которые были при тренировке. Не так все хорошо для новых. Но нужно учитывать, что и учили на 6 людях, у каждого 12 фраз. Работает и славно.
Короче - пайплайн классный, больше людей и все точно будет офигенно, как пел Паша Воля.
статья
семплы
POLARS
docs
часто, очень часто я работаю с csv файлами и даже с excel (это отдельная песня, которая точно прокачала мое терпение)
Так вот, про polars я слышала довольно давно, но как-то он был ни к месту, но вот пришел момент, когда файлов дохера, все они обрабатываются, операции относительно тяжелые.
Что предлагает polars?
Polars написан на Rust, его главные фичи, которые мне нравятся:
- Out of Core - если сделать streaming=True, то мы можем не подгружать все данные в ram
- Parallel - параллелит процесс на cpu cores сам, без помощи и обходов
- Vectorized Query Engine - использует свой написанный Apache Arrow, a columnar data format, чтобы использовать vectorized manner and SIMD - собственно самый главный плюс и почему это быстрее
Примечательный посты на эту тему:
- длинный пост про apache arrows, апдейт с pandas 2.0 и подробные примеры
- пост о разнице pandas и polars, например поддержка не только eager - как написал, так и исполняются, но и lazy operations, это когда написанные операции могут меняться в порядке или даже дропаться
- пост о vectorization в pandas или почему не надо делать for, но тут почти говорится, что apply - это векторизация, что спорно
- пост о разном понимании векторизации
- qa в apache arrows о том, почему он вообще нужен и как он экономит под 80% компьюта
в постах затрагивают понятия, берем карандашики:
- interoperability - отсутствие deserialize степа при processing или грубо говоря общий формат между языками и тд, как csv
- SISD и SIMD - SISD (for loop), SIMD (one instruction for all samples)
- Apache Arrows - language agnostic формат данных
Что я не сразу врубила в polars и хотела бы сохранить и потом искать поиском в канале?
0️⃣ просто сделать apply на одну колонку со своей функцией
data = data.with_columns(pl.col("col_name").map_elements(your_func).alias("col_new_name"))
data = data.with_columns(pl.struct(["col_name_1", "col_name_2"]).map_elements(lambda x: func(x["col_name_1"], x["col_name_2"])).alias("col_name_new"))Читать полностью…
#grokaem_audio
LLM стали частью систем TTS и даже ASR. Одно из влияний - промтинг.
На рассвете дня - статья, с которой я довольно много работаю последнее время, но почему-то не написала обзор.
статья
Промтинг был и в AudioBox (обзорчик), там мы отдельными классификаторами вытаскивали параметры речи и звука и пихали это все в LLAMA. В той статье было мало деталей как раз этих параметров и того, как дальше приклеить этот промт?
0️⃣Начнем с того, зачем вообще он нужен?
Для получения более ярких и разнообразных samples мы можем добавлять style embeddings, например просодии. Но тут вопрос: если нет рефернсного аудио, что делать? Если я хочу озвучить текст малайским акцентом, а у вас только бритиш эксент? Нужна scalability. Еe можно получить, если не делать человеческие аннотации.
1️⃣ Тут авторы предлагают собирать много всякого разного:
- accent - тренируем свою модель (linear classifier на language id embeddings)
- recoding quality - SNR (signal to noise ration) и C50 (показатель разборчивости речи в помещении, статья)
- pitch
- speaker rate
- gender
Но обычные значения для какого-то SNR ничего не говорят LM. Поэтому для не дискретных категорий они сделали бины и из бинов сделали keywords, а дискретные сразу в keywords. Это все поперчить и отправить в LM (Stable Beluga 2.5).
2️⃣Но до этого этапа мы говорили только о description или аннотациях к речи. Как это запихнуть в TTS?
Здесь авторы не изобрели велосипед, а взяли пайплайн с audiocraft: embedding c t5 (у audio craft были поверх линейные слои, чтобы соответствовать dim у quantized tokens) и cross attention на сами эмбединги и tokens с codebooks. Encodec поменяли на Descript Audio Codec. Подробнее код.
3️⃣Интересно, что такой подход помогает на этапе тестирования. Го подумаем до вечера, как легче всего проверить, что аудио получилось действительно таким, как было в описании?
На улице появился асфальт, а я металась в попытках успеть спорт, жизнь, работу и другие проекты, так что eagle и keywords обзора так и нет. Извиняйте, не серчайте, зла за душой не держите, порчу не наводите, оклемаюсь - напишу, вы не прочитаете, зато совесть будет чиста, а есть ли она у меня, если я так редко что-то пишу (?)
Читать полностью…#grokaem_nlp
Наткнулась на ревью методов 2023, которые основаны на идее сделать модель меньше, но лучше. Автор разделяет 4 направления 2023:
- weight averaging и model merging
- proxy tuning
- mixture of experts
- pretraining small models
🐚ракушки, послушайте звуки моря, а не метель🐚
Краткие заметки на полях:
1. Weight averaging и model merging это не traditional ensemble, потому что мы не держит несколько моделей, мы их объединяем в одну. Weight averaging - это SWA, EMA, LaWA и modified LaWA. Model merging - это когда мы комбинируем натренированные разные модели (Ratatouille, LoraHub). В наших любимых каналах не нашла обзоры на эти статьи, мб кто-то видел? Классный пост про это у Dealer.ai
2. Proxy tuning - менять логиты у LLM согласно маленьким domain specific и finetuned. Из больших минусов - нужна finetuned маленькая и у нее должен быть такой же vocab.
3. Про Mixtral не заметка, но интересно, что сейчас она используется в браузере brave
4. В TinyLlama занятная заметка о "разрушенном" scaling law для 1.1B модели на 3.3 trillion tokens.
🐚опяяяять метельь🐚
А в конце автор оставляет много статей уже января, себе выделила наиболее завлекающие:
* EAGLE - новый метод в speculative sampling family (надо читать!)
* MambaByte - token free lm on raw bytes (чтоо?)
* Knowledge Fusion of LLM
* Soaring from 4K to 400K - новый метод activation beacon тоже для большого контекта (кто придумывает названия? это тот же человек, что придумывает названия аптек?)
* LLM Maybe LongLM - bi-level attention (group and neighbor)
Ладно, выгрузка по nlp тоже есть))
0. Узнала о фреймворке для "редактирования знаний LLM"
1. Наконец поэкспериментировала с p-tuning и prompt tuning. Лучшее объяснение разницы нашла от Ильи Гусева (его HF, если вы еще не знали)
я как-то раз коллеге так объяснял:
prompt-tuning = добавляем виртуальные токены в начало промпта
p-tuning = добавляем виртуальные токены куда-нибудь в промт (например, в середину)
prefix-tuning = добавляем префиксы во все слои
2. Саша и Карина выложили вихрь
3. Силошная выложил мини-курс по GPT, первая лекция ну просто супер-вкусная! Было очень интересно! Мысли по энтропии, компрессию и фичи, ну чистый кайф
4. Early weight averaging показали, что можем усреднять модели во время тренировки, небольшая критика
5. MLX выложили поддержу квантованных llm, мне понравилось
6. Выложили большую книгу о vector retrieval
7. Офигительно интересный эксперимент Техножрицы по дропаутам!
У меня есть теория о том, что все сохраненные сообщения в телеграмме имеют такой же вайб, как и фотки доски/слайдов. Я их не открываю и не перечитываю. В сохраненных они появляются, потому что я ненавижу непрочитанные сообщения и скидываю интересные посты в избранное или закладки (навсегда). Максимально эту проблему я почувствовала, когда перешла на Arc и понесла все закладки с собой...
Решить эту мини-проблему я попробую небольшими постами с новостями/постами за ~месяц.
#grokaem_nlp
На днях выложили овервью (37 страниц...) подходов к обработке очень длинных последовательностей в LLM
Приятная табличка внизу. Делят на интерполяцию и экстраполяцию, а для каждого подхода разбирают zero-shot и файнтюн для attention и для positional encoding.
interpolation:
- attention: LongLoRA/QLoRA, LM-infinite
- prompt compression
- RoPE: Linear positional interpolation, Yarn, PoSE
extrapolation:
- positional encoding: ALiBI, RoPE, randomized PE
- attention: xPoS, LongNet
- window based
- retrieval: Landmark attention, augmented language model with long memory
Кажется, удобной статьей, если вы сейчас боретесь со слишком длинными последовательностями и запутались во всем, что выходит каждый день.
Но меня преследует мысль о том, что подход - добавить что-то неверен сам по себе и лучшее решение проблемы это решение, которое в системе уже существует, но я хз
статья
На удивление приятный speech enhacement, который мне порекомендовали, роботовойс сильно не уберет, но идеально чистит шум на фоне и хорошо повышает голос по силе.
Resemble Enhance
* для запуска только надо не resemble_enhace, а resemble-enhance *
gradio demo
#grokaem_audio
А suno.ai теперь по 4 минуты генерит треки (сначала для этого 3, а потом делаешь extension и склеиваешь)
Читать полностью…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
🏵АПРЕЛЬ 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
Вернемся к истокам. Один из любимых типов задач для меня - это 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?
Вышла Parler TTS демо (веса, код, промпт)
Помните пост про генерацию TTS с заданными параметрами и, может быть, помните пост про MusicGen? Это вот все от них пошло.
🐢Для чего можно юзать? 🐢
- прогнать по параметрам исходную речь, прогнать сгенерированную - сравнить
- прогнать на весь датасет - отфильтровать странные семплы
Выкатили код и демо. Сказать честно, демо хорошее на чирипукнутых, а вот на мой промт: "A female speaker with a very high-pitched voice, the speech is very fast. The speaker is sad. She even cries." получила какую-то веселую девушку с нормальными даже низким питчем. Сейчас доступно только пару параметров (pitch, snr, speaker rate, reverbation).
#grokaem_thoughts
Рандомные штуки я пишу в чатах, но кажется многие можно постить и сюда, думала даже про отдельный чатик, но пока нет, буду мусорить - скажите))
Мне нравятся видео компании Skyeng, сама курсы у них не брала, но видосики смотрю часто и много. Сегодня вечером вышло новое видео, и ребята сделали ассистента, который анализирует ваш уровень.
Можно ожидать, что придется тыкать кнопочки, но нет:
НУЖНО ГОВОРИТЬ и ВАМ БУДУТ ОТВЕЧАТЬ! 🙉
Что круто?
0. Она говорит. Голос робота, но он не бесит, довольно приятный.
1. Она поддерживает контекст. Про хобби в самом начале разговора я ответила, что увлекаюсь NLP и в конце она выдала: Клево, что получилось пообщаться с людьми, которые занимаются таким как я. В КОНЦЕ ДИАЛОГА она помнит, чем я занимаюсь. У меня семья до сих пор не все запомнила.... Также задает наводящие вопросы с отсылками на твой ответ.
2. Она хорошо распознает речь. После можно посмотреть, что ты там наболтал и вроде бы все так))
3. В конце дают аналитику всего уровня и аспектов, где ты слабачка. У меня в этот раз это fluency, надо пройти не после работы и тренировки....
4. Показывают не только уровень, но и Thing to improve - фразы, которые ты хреново сказал и показывают, как надо было.
Крутые ребята в Skyeng! Я бы действительно болтала с такой учительницей.
Проверить уровень
Так как в плане на этот год стоял этот пункт, а кто я такая, чтобы не выполнять желания январской Миланки?
Читать полностью…#grokaem_audio
Интересная статья на medium (что уже редкость) об ускорении whisper для real-time.
Code
Medium
заметки на полях:
0. whisper работает по семплам в 30s, для реалтайма нам нужно процессить семплы и короче, как только они приходят. На этом моменте авторы заметили, что паддинг, который ставит whisper а) разделяет слова, которые еще произносятся б) увеличивает кол-о галлюнов. Первый случай решают re-прогоном, копят короткие семплы к 30s и прогоняют снова.
1. хранят intermediate states (хз что именно тут подразумевают) для реконнекта
2. для streaming диаризацию используют тык на x-vectors. Тут они на каждый чанк считают эмбеддинг, делают clustering на часть предыдущих эмбеддингов, ремепят лейблы и продолжают
3. объединить этот пайплайн с whisper + диаризация тот еще оркестр, потому что как раз диаризации нужно достаточно предыдущих эмбеддингов, а whisper хочет до 30s, чтобы пересчитать, но тоже извините меня не москва, не резиновый - тут они а) resegment выход у whisper и б) ставят похоже forcefully трешхолд какой-то
4. есть еще сложность в кол-ве engines, потому что пайплайн с shared queue тоже не сработает, ведь подключение должно быть постоянным, не получится распознать часть и взять джобу, тут тоже предлагают оркестр с worker pool, к которому прилетает информация и он инициирует подключение
ФЕВРАЛЬ 2024
NLP:
0. Пост про embeddings для поиска, можно брать в заметки для собеса.
1. Новый метод self-playing.
2. У Ильи Гусева появился канал, вот например клевый пост про утечку данных.
3. Вышла gemini на овердохера контекста (1млн), у нее много критики. Но сам вопрос длинных контекстов как никогда актуален. Рассуждения на эту тему.
4. Transformer United - пачка видео research orientated про NLP, клевое по RAG. Собрано давно, нашла сейчас.
5. Вышла DoRA - DoRA: Weight-Decomposed Low-Rank Adaptation, paper -> разделяем magnitude и direction, LORA на direction, источник.
Audio:
0. Вышла LLM ASR approach, источник, статья - почти все frozen, тренеруется только linear projection, звучит классно и похоже в теории на encodec, интересно, почему не юзают его.
1. Вышла Supervoice-GPT для перевода с текста на фонемы + duration.
2. Overview audio codec моделей, постоянный источник.
3. Вышла audio synthesis работа с NVIDIA: paper, источник. В HIFIGAN добавили Snake function для periodic inductive bias. Очень классные семплы.
4. CTC is still alive, paper СTC + prompt (ASR & ST), внутри self-conditioned CTC, быстрее 3,6 speed up. paper
5. Stability.AI выкатили StableAudio: CLAP + UNET + VAE (последний кстати тоже с snake function) paper, samples
others:
0. У моего знакомого, который учится в mbzuai был пост про вопросы к собесу
1. Вышла новая модель russian vibe для генерации грустных русских девятиэтажек - пейзажей
2. Я собрала еще один пазл, важная новость - я считаю
Декодируем речь. Не опять, а снова.
paper
🧊🧊🧊
В чем проблема?
- Нам не нужна отдельная decoding модель под каждого спикера. Мы можем добавлять отдельный 'speaker embedding', а юзать полную большую модель как для кодирования речи, так и для кодирования сигнала мозга.
- При regression моделях у нас все частоты равны в своей важности, также как и размерности. Но в жизни это не так. Низкие частоты мб не релевантными для восстановления. Поэтому давайте использовать constrastive loss. Правда тут уже задача становится матчингом, а не генерацией. Но да ладно.
🧊🧊🧊
Суть и модель:
Главная задача - заметчить brain recording с speech recording. По сути то же самое, что image <-> text, только данные сложнее.
Для этого у нас будет два блока: speech and brain.
1. Speech будет работать на wav2vec 2.0. По анализу показали, что использовать такой же как у brain model - неэффективно, ну и славно.
2. Ведь в brain model все сложнее: сначала колдовство с обработкой eeg/meeg, потому spatial attention + spatial dropout, потом добавляем выученную матрицу с такой же размерностью под каждого subject, а потом только conv с residual skip connection, они же dilated.
🧊🧊🧊
Интересные файндинги:
- Жестко запарились над test leakage. Каждый сегмент (речь 3s) относится только к одному сплиту. Никаких одинаковых предложений среди сплитов.
- Outliers тоже почистили, чтобы eye movement, electo-magnetic environment не влияли на сигнал. Для этого они вычитают среднее начала по каналам, а также делают robust scaler.
- CLIP дает более точечную реконстракцию. Но тут имхо играет роль, что они берут weighted average на предсказанные семплы.
- Чтобы понять качество на уровне слов, юзают такой пайплайн: берем три секунды сегмента именно brain recording для каждого слова в тестовой выборке. Берем probability distribution over all test segments. Сами сегменты группируем по одинаковым словам, вероятности складываем по сегментами (сложно, пипец)
- MEG показал качество лучше чем EEG. Хотя не было данных, где у каждого subject был и тот, и другой способ получения. При этом качество для слов, которые не были в train с MEG падает гораздо меньше по сравнению с EEG (A.7)
- Больше bins в MelSpectrogram дает выше качество (А.5)
- В конце добавляют, что поверх необходима lm.
🧊🧊🧊
Как вы считаете, есть ли будущее за таким подходом метчинга или все таки нужна модель (linear, diffusion) для восстановления из brain activity в речь? И что лучше latent speech encoding или melspec?
Так как никому неинтересно, что происходит в music ai, вот новости из music ai за прошедший ~месяц 😈
0. Splash теперь в Alexa
1. Suno Ai теперь в Bard
Тактика взять стартап и прикрепить его к своему большому проекту? Эх, российской монополии на ребят нет..(
2. Valerio выложил курс по генерации музыки. Мне пока не зашло
3. Вышла новая не авторегрессионная модель MAGNET, о ней был пост
4. Британское правительство в вопросе о правах на ии музыку отказалось от направления с text and data mining, так что тренироваться можно только на лицензионной музыке, так? Когда это придет в тексты?
5. Endel в кооперации с техническим университетов Дрездена открыли Phd на sleep and music. "You'll be involved in pioneering research, testing algorithmic music with wearable EEG devices in home settings."
Так все таки чип инвазивно или наушники?
6. Vinja notes выложила небольшой скоп рекомендательных алгоритмов от разных google, tiktok и тд. Статьи относительно старые, но интересно
Немного про asr и tts:
7. RNNT не стоят того?
8. Выложили readme с списком текущих tts
9. Вышла incremental fast pitch
#grokaem_audio
MAGNET - MASKED AUDIO GENERATION USING A SINGLE NON- AUTOREGRESSIVE TRANSFORMER
В генерации музыки есть (на мой взгляд) две проблемы:
- долго генерим
- не умеем в долгую генерить
🪗idea behind🪗
За решением первой проблемы мы можем попробовать перейти от авторегрессионности к привычному маскированию. Но есть же диффузии, скажите вы. To reach high-quality music samples recent studies report using a few hundred diffusion decoding steps говорит meta. А что если попробовать сделать что-то между? Декодировать какое-то кол-о степов с нуля, но не авторегрессионо, а делать condition от полученных токенов? Именно это и предложили в MAGNET.
🪗pipeline с перебивками🪗
0. Начинаем с нуля. Все замаскированно.
Предсказываем с condition на текст, он по традиции от T5. Дальше толи от того, что сначала не получалось, толи действительно с мотивацией на asr rescoring, мы делаем rescore с MusicGen или AudioGen. Токены, которые получились ок с высокой вероятностью - оставляем. Другие - маскируем.
1. Стой, но разве токены рядом не шарят информацию между собой?
Да, так и есть. Поэтому давай маскировать не токен, а span. Это то же самое, как маскировать не отдельный токен, а все слово.
2. Стопе. У нас же encodec может копить ошибку, ведь у нас внутри RVG вектора.
Да, да. Поэтому на codebooks дальше чем 1, то есть те, которые исправляют ошибку и созависимы от предыдущих, будут в self-attention смотреть только на несколько соседей.
2.0 Интересно, что text conditioning предлагают уменьшать в Classifier Free Guidance относительно masking rate. То есть когда мы уже что-то нагенерили, мы будем делать скорее infilling чем просто кондишн на тексте.
3. Если мы итак делаем rescore с MusicGen и (мб у нас просто все херово получается сначала) давайте и в начале будем генерить с MusicGen, а уже потом будем делать маскинг. Как расклад?
Не таро, но тоже норм и назовем это все классно - гибрид 🌈
code
в предыдущих постах:
набор sota моделей для music ai
обзор на audio box
обзор на encodec
#grokaem_audio
hf overview whisper
hf overview speculative decoding
Один из способов сделать 2x speed up saving accuracy
Есть более быстрая и маленькая assistant model и большая main model.
🪩
Этапы:
1. assistant генерит N токенов
2. big model их получает, делает один форвард, подверждает правильные токены и находит первый неправильный и исправляет
3. assistant получает обратно правильные токены + 1 исправленный
🪩
Считается, что ассистент должен быть как минимум в 3 раза быстрее, чем большая модель. Так останется трейд-офф между качеством и скоростью. Что-то типо: ассистент сможет загенерить и простые токены, а сложные (где он ошибется) исправит большая модель.
🪩
Почему это так работает?
Вспомним архитектуру whisper, у него есть большой блок декодера, как обычный gpt. Если у NLP моделей мы можем заюзать такого рода декодинг, то и тут тоже. Общая идея - пересмотреть forward pass. идея При forward pass нам доступны логиты на предсказание след. токена для всех токенов на всех позициях. То есть, если мы возьмем greedy decoding, прокинем все сгенерированные до этого токены, посмотрим на эти логиты, то получим исходную последовательность. Эту проперти и используем.
Однако в примерах учитывайте, что есть truncation на 30 секунд. Также сейчас поддержка только с greedy search.
🪩
Я чекнула на небольшой 9мин записи с stutter и буст был с 60с до 40с в обычном коллабе