senior_augur | Unsorted

Telegram-канал senior_augur - Старший Авгур

4617

Сохраненки и шитпост про ML от @YallenGusev

Subscribe to a channel

Старший Авгур

Почему-то задачи на ML design собеседованиях в корпорациях у меня всегда абсолютно одинаковые. Всегда нужно построить систему для рекомендации X. В качестве X на текущий момент выступали:

- Товары (как на маркетплейсах)
- Друзья в соцсети (как в VK)
- Города/отели для посещения (как в Букинге)
- Видео (как в TikTok)
- Песни (как в Spotify)

Я сначала радовался, а теперь мне тупо скучно. Там, конечно, в каждом пункте есть своя специфика, но только про неё всё равно никто не хочет говорить. Из этого списка выбиваются только друзья, там хотя бы есть эго-графы и всякие прикольные штучки.

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

Старший Авгур

What Matters for Model Merging at Scale?
Статья: https://arxiv.org/abs/2410.03617

Статья про слияние моделей. Основные пять выводов написаны сразу в абстракте:
1. Учить экспертов надо поверх инстрактов, а не базовых моделей.
2. Чем больше модель, тем лучше работает слияние.
3. Если учить на N разных задач и сливать, то генерализация (= качество на отложенных задачах) лучше, чем если учить одну модель на общем наборе данных.
4. Чем больше модель, тем больше разных экспертов можно вливать.
5. Чем больше моделей и экспертов, тем больше пофиг на выбор конкретного метод слияния.

Что вообще за слияние? Самый простой вариант — усреднение весов. То есть мы берём две разных модели (желательно от одного предка), считаем какую-то функцию от их весов, и получаем одну модель той же архитектуры. Конкретных функций бывает много, кроме усреднения см. Task Arithmetic, TIES, DARE.

Все эксперименты проводятся на разных вариантах PaLM-2, гугловой проприетарной модели. Всего есть N задач, для каждой из них делается отдельный тюн. Задачи берут из T0. Их делят на две категории: held-in и held-out. Тюнят модели на held-in, полностью, без Лоры.

Результаты 1 и 4 как по мне довольно очевидны, поэтому сосредоточимся на 2, 3 и 5. Третий результат особенно интересен, потому что он очень сильный: можно просто обучить 8 моделей на разные задачи, и итоговая модель не только будет хороша в этих задачах, но и станет в целом лучше (= качество на отложенных задачах станет выше) 😱

Бейзлайн: версии модели, обученные сразу на всех задачах. 24B модель, смёрженная из 8 экспертов, работает на уровне бейзлайна, 64B модель — значимо его превосходит. При обучении поверх базовой модели (вместо инстракта) ситуация не такая радужная, но всё равно неплохая. Второй результат про то же, но на held-in задачах. Там для 8 экспертов у 64B итоговое качество около 90% от бейзлайна, и чем меньше модель — тем хуже.

Что же касается последнего результата, он просто очень приятный. Для больших моделей вообще не очень важно, как именно сливать, получается одно и то же с точки зрения качества ☺️

Самое крутое в слиянии — возможность переиспользовать кучи GPU часов других людей. Мне в статье не хватило разве что исследований того, насколько хорошо сливаются модели разных форматов промптов. В остальном — это очень хороший повод всё это активнее применять.

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

Старший Авгур

Затраты и доходы по боту за октябрь. Есть ещё копеечки, потраченные на Runpod и OpenRouter, но там немного.

o1-preview для людей без подписки я убираю, сама подписка становится дороже.

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

Старший Авгур

На всякий слачай уточню: в v7 тюне Лламы 3 я был прям уверен, он был со всех сторон хороший.
Эта модель гораздо лучше того тюна, но и у меня тоже поднялись ожидания.
Всего было около 20 итераций, и в итоге ни одна меня не устроила. Этот релиз — это мой компромисс с собой. Я просто выбрал лучший вариант из всех итераций, и в итоге его и релизнул.
В целом, делать эту модель было не очень дорого. Порядок величин — около 1к$ на всё: разметка данных, железо, оценка. Самым дорогим было оценивать модель на арене с gpt-4, больше я так делать не буду.

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

Старший Авгур

https://openai.com/index/introducing-chatgpt-search/

OpenAI выкатили поиск. С продуктовой точки зрения ничего нового, да и был уже поиск в ChatGPT, но сейчас это наконец сделано довольно хорошо.
Во-первых, это быстро. Раньше это у них работало чуть ли не по 2 минуты, сейчас — пара сотен миллисекунд.
Во-вторых, это красиво. Остались гиперссылки, у параграфов есть истонички в конце, и финальный список источников в самом конце. Плюс разные виджеты: карты, погода, новости.

Всё то же самое, что было и есть в той же Перплексии.

Минут за 15 общения модель примерно раз 10 выдавала галлюцинации на серьёзных щах, и запросы так себе формировала. С точки зрения качества поиска ничего хорошего.

Короче, OpenAI просто закрыли нишу и подавили конкурентов.

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

Старший Авгур

Зато друг друга они стоят... Диалоги тут.

Тут три момента:
- Во-первых, модели явно не учились отыгрывать роли. Почему Клод и GPT-4 учились, а эти нет — загадка.
- Во-вторых, с точки зрения языка всё действительно неплохо.
- В-третьих, в качестве судей выступают gpt-4o и Соннет, что вносит некоторое смещение оценок не в пользу русских моделей. Это же касается автоматических арен.

А вот если учесть цену, то всё это полная жесть. gpt-4o-mini стоит 30 центов за 1M токенов. Гигачат Про стоит 1500 рублей за 1M токенов, примерно в 50 раз дороже. YandexGPT Pro стоит примерно 10$ за 1M токенов, примерно в 30 раз дороже.

И даже если сравнивать с gpt-4o (до которой как до луны), то та всё равно дешевле!

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

Старший Авгур

Горький урок ABBYY: как лингвисты проиграли последнюю битву за NLP 

Недавно СМИ облетела новость об увольнении всех российских программистов из компании ABBYY (тоже в прошлом российской, а теперь уже совсем нет). Теперь, когда страсти вокруг обсуждения дискриминации сотрудников по паспорту улеглись, хочется поговорить о более глубокой истории. Закат ABBYY — это фиксация проигрыша последней битвы лингвистов за автоматическую обработку языка. Мир Data Science победил. Главный редактор «Системного Блока» Даниил Скоринкин, работавший ABBYY в 2013–2017, подводит итоги и пытается сформулировать уроки из этой истории.

Что за ABBYY и при чем тут лингвисты и NLP?

История ABBYY началась в 1989 году, когда студент МФТИ Давид Ян решил сделать электронный словарь для подготовки к экзамену. Так появились Lingvo, а затем — система распознавания символов FineReader. Продукты ABBYY развивались, и компания стала глобальным лидером оптического распознавания в 1990-е и 2000-е. Затем ABBYY двинулась покорять машинный перевод. 
На вооружение они взяли идеи известных лингвистов — в первую очередь Модели «Смысл ⇔ Текст» (прочитать о ней можно в нашем интервью с И. А. Мельчуком). Амбиция была в том, чтобы разобрать человеческие языки как формальные структуры на базе семантической иерархии. Но естественный язык устроен противоречиво и постоянно изменяется, подход оказался негибким и немасштабируемым

Что пошло не так?

В 2006-м появилась первая версия Google Translate. Она была несовершенной, но главное, что в ней был другой — статистический — подход. И масштабируемость. Для её улучшения не нужны были сотни лингвистов, только еще больше примеров перевода. В 2010-х стало ясно, что никаких шансов тягаться с Google Translate у ABBYY не было. С перевода ABBYY переключилась на задачи информационного поиска и извлечения информации из текста, но и там столкнулась с теми же проблемами: описания языка на базе лингвистической теории оказались немасштабируемыми, а решения уступали подходам на основе чистого машинного обучения. 

C новой проблемой компания столкнулась весной 2022 – им пришлось выехать из России, чтобы сохранить зарубежных клиентов. Следующим ударом стали большие языковые модели, который научились лучше и быстрее выполнять те же задачи, что и классические системы распознавания от ABBYY. Сейчас от компании осталась только вывеска, действующие продукты и небольшое количество менеджеров и специалистов по продажам.

Какие уроки мы извлекаем?


За 70 лет исследований ИИ стало ясно, что самые общие методы, опирающиеся на масштабирование вычислений, намного эффективнее всех остальных. А желание ABBYY сделать универсальную NLP-систему с опорой на лингвистическую теорию оказалось утопией. 

И всё-таки ABBYY успела сделать много важного: открывала кафедры на Физтехе и в РГГУ, оцифровывала наследия Льва Толстого и архива Большого театра. А еще благодаря ей появился «Системный Блокъ», ведь сооснователи издания познакомились именно там. И именно там вы сможете прочитать полную версию поста с мемами и более детальным описанием цифровой «Вавилонской башни», которую пыталась строить ABBYY.

🤖 «Системный Блокъ» @sysblok

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

Старший Авгур

А вот это удивительно, не ожидал я такого от коробочной Айи. 8b модель тоже лучшая в своём весе для русского.

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

Старший Авгур

еще одна новость вышла пока я ужинал и болтал

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

Старший Авгур

Выступал на семинаре ЛЕЯ, снова рассказывал про Сайгу.
Запись: https://www.youtube.com/watch?v=xiPCIWGTX1M
Презентация: http://tinyurl.com/gusevsaiga2

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

Старший Авгур

Я продолбался, и сильно. Оказывается, в дефолтном Mistral Nemo системное сообщение вставляется перед последним сообщением, если это сообщение от юзера. В обучении же последнее сообщение от бота. То есть системные промпты не вставлялись в SFT обучении. То есть все текущие версии SFT — сломаны.

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

Ну ладно, это хоть значит, что финальная модель должна стать гораздо лучше.

За скобками остается вопрос: а нафига вообще блин было нарушать стандарт? Во всех моделях, которые я до этого видел, системное сообщение было в начале.

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

Старший Авгур

Когда не умеешь писать стихи, но надо строго следовать промпту...

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

Старший Авгур

Ну что, сработала техника, получается. А нужен был всего лишь простой советский перевод Агаты Кристи.

Сайга пока догоняет, поэтому в качестве основы я взял Вихрь-Немо.

Аналогично оригинальному Ataraxy, дообучил модель через ORPO на датасете, описанном выше, и слил получившийся тюн с оригиналом. Внезапно получил +0.1 на ПингПонге. На арене стало чуть хуже, 77 у новой модели vs 80 у оригинала.

Сама модель: vikhr_nemo_orpo_dostoevsky_12b_slerp
В боте она тоже есть.

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

Старший Авгур

Долго ничего не писал, готовил ПингПонг к подаче на ICLR. Докинул циферок, поправил текст, сделал сравнение с Creative Writing. И наконец отправил, фух.

Ешё оказалось, что там теперь обязательно подаваться как рецензент для того, чтобы статью хотя бы допустили к ревью. Такую практику я в целом одобряю: любишь кататься, люби и саночки возить.

Так что я теперь возможно буду что-то там рецензировать.

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

Старший Авгур

Залил Qwen 2.5 70B и Gemma-2 27B в ArenaHard. Я не сомневался, что они хороши, но каким-то загадочным образом Квен обошёл Соннет. У меня 2 версии:
1) GPT-4 не любит Клоды, а он там судья.
2) Бейзлайн (gpt-3.5) уже слишком плох и мешает различать хорошие модели.

Весь замер с моей стороны обошёлся в 20 центов. Я платил только за инференс самих моделей, суд оплачивает бенчмарк.

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

Старший Авгур

Начинаем рабочую неделю с часовой лекции Sasha Rush (Associate Professor @ Cornell University, Researcher @ HuggingFace 🤗) под названием «Speculations on Test-Time Scaling» (спекуляции по поводу того, как работает модель OpenAI o1). Презентация техническая, содержит большое количество ссылок на разные работы для самостоятельного изучения.

Разбирать я её не буду, так как тем, кому интересно разобраться в деталях и предпосылках o1, лучше смотреть саму лекцию. А тем, кому не интересно — им и не интересно 🧠Лишь отмечу, что Sasha рассматривает несколько направлений исследований касательно цепочек рассуждений, и для каждой указывает, почему и чем это отличается от o1 — и по итогу ни одна идея полноценно под всё не подходит(

Смотреть на YouTube
PDF со слайдами
Репозиторий со ссылками на все упомянутые статьи

Это мы смотрим 🍿

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

Старший Авгур

Выложил v2 версию Сайги Немо. Основных изменений 3:
- Я убрал 80+ примеров из SFT, в которых использовались системные промпты персонажей из ПингПонга. Они появились там до ПингПонга из логов бота, собственно сам лидерборд я собирал на их основе. Это может считаться утечкой, поэтому они убраны из обучения.
- В SimPO датасете я агрессивнее порезал длину и увеличил вес SFT лосса, чтобы укоротить ответы и уменьшить количество выдуманных слов.
- Дотюнил на Достоевском и смёржил ровно так, как я делал для Вихря.

На ПингПонге стало лучше, на арене пока нет результатов.

Если кому-то захочется остаться на v1, везде можно указать ревизию, они есть в карточке модели.

GGUF'ы будут завтра.

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

Старший Авгур

А ещё у нас новый лидер на дне нашего стакана с проприетарными русскими моделями!

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

Старший Авгур

Ура, релиз Сайги Немо!

Модель: https://huggingface.co/IlyaGusev/saiga_nemo_12b
Уже доступна в боте.
GGUF завтра подвезу.

По метрикам: 85 на РуАрене, что чуть хуже 87 у Вихря. Примеры из тест-сета я не использовал. И 3 место на ПингПонге.

Пайплайн абсолютно классический: SFT + SimPO. Датасеты, конфиги обучения, W&B логи лежат в карточке модели.

Уникальная фича модели — расцензурированность и ориентация на role-play. Обучал я её поверх abliterated версии Немо, и из и SFT, и SimPO датасетов агрессивно вычищал отказы. В оба датасета доливал role-play промпты, но не с теми персонажами, которые есть в ПингПонге.

Я поштырил и в RP диалоги, и в ответы на арене, и увидел несколько проблем:
1) Модель не умеет рисовать ASCII.
2) В 2 примерах я наблюдал повторы. Это было там, где нужно было написать пример кода, а в нём был какой-нибудь токен. И вот этот токен генерировался бесконечно. Эта проблема специфична для нулевой температуры.
3) Длина. Хоть я и пытался бороться с слишком длинными ответами, по бенчам видно, что ответы всё равно длиннее среднего.
4) Очень изредка попадются выдуманные слова. Причём они вполне разумны, просто их не существует.

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

Старший Авгур

🎆 Небольшая лекция об Alignment и как мы его готовим

Это слайды с текстом, пока устно ее я рассказывал только внутри команды Vikhr.

Внутри вы узнаете:
- Теория Bradley-Terry и откуда берутся Reward модели
- Что нужно для обучения Reward модели и как его делаем мы
- Откуда взялся DPO и каковы его недостатки
- Какова мотивация нас и других авторов улучшать DPO
- Как устроен наш функционал SMPO - Simple Margin Preference Optimization
- Какие есть способы улучшения DPO на уровне данных и как готовим эти данные мы

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

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

Старший Авгур

Мммм, 35 место. Но так-то серьёзный скачок с 46. В комментах скриншоты с артефактами. Посмотреть диалоги можно тут.

UPD: С другой стороны, я бы ещё обратил внимание на language fluency, по нему она так-то делит первое место ещё с 3 модельками.

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

Старший Авгур

Ларчик с Вихрём Немо просто открывался. Рецепт оказался прост: трейн на тесте.
Я недавно случайно обнаружил, что в GrandMaster-PRO-MAX лежит около 180 промптов и ответов на них из ru_arena_general. А их там всего 500, то есть больше трети примеров из тестов слиты в обучающую выборку. Вполне возможно, что это сделано не только в SFT, но и в SMPO фазе.

Код для проверки:


from datasets import load_dataset

examples = dict()
for row in load_dataset("Vikhrmodels/ru-arena-general", split="train"):
examples[row["turns"][0]["content"]] = 0

for row in load_dataset("Vikhrmodels/GrandMaster-PRO-MAX", split="train"):
ex = row["conversation"][0]["content"]
if ex in examples:
examples[ex] = 1
print(sum(examples.values()))


Я решил поэкспериментировать и сделал то же самое в SFT. Получил +6 пунктов на арене. Справедливости ради, мне всё равно не удалось догнать Вихрь, но, вероятно, это решается доливом теста в SimPO.

Намеренно ли это было сделано? На 99% уверен, что нет.
Делает ли это Вихрь Немо плохой моделью? Тоже нет.
Но хорошо бы это увидеть в карточке модели, да и с арены модель убрать.

UPD: карточку обновили, там об этом теперь написано

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

Старший Авгур

Я и не сомневался. Что прикольно — сильно уменьшилась доля отказов.

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

Старший Авгур

Догоняние Вихря... затянулось.

Модель явно перестала быть дерьмом после фикса системного сообщения, но подняться выше 74 на арене пока не получилось. Зато на ПингПонге она на второй позиции, сразу после Соннета, что лучше, чем Вихрь. Завтра буду добавлять on-policy side-by-side разметку, до этого момента модель училась только на парах из других моделей. Ну то есть сейчас я насэмплировал по 3 предсказания из SFT версии, по 3 предсказания из SimPO версии, и теперь попарно буду их сравнивать. Промпты использовал из текущего датаста (saiga_preferences). Итоговую разметку долью в обучающую выборку. Должно помочь.

Ещё я много чего понял про SimPO! У него есть два режима: в первом модель разносит, во втором модель ничего не выучивает. Стандартными способами регуляризации очень сложно находить баланс между ними. Единственное, что прямо хорошо сработало — добавление SFT лосса (в trl это означает cpo_alpha > 0). Вихрёвская версия SimPO это учитывает и вполне разумна, просто я не хочу использовать нестандартные кубики.

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

Старший Авгур

За статью спасибо подписчику.

Cheating Automatic LLM Benchmarks: Null Models Achieve High Win Rates
Статья: https://arxiv.org/abs/2410.07137

Сейчас достаточно популярный бенчмарки на основе автоматических side-by-side сравнений выходов моделей, например RuArenaGeneral. Можно ли обмануть эти бенчмарки? Самый очевидный способ обмана — длина. Если в бенчмарке не используется нормализация по длине, то модели с большей длиной ответов заведомо победят. Авторы статьи пошли дальше и задались вопросом — можно ли добиться высокого винрейта, выдавая один и тот же ответ на все вопросы?


🔸Промпт-инъекция
Самое очевидное решение — это промпт-инъекция, которая скрывает оригинальные ответы и вставляет свою кастомную пару ответов. Там, правда, нужна небольшая хитрость, потому что ответ может быть вставлен, либо первым, либо вторым, и позиция выбирается случайно. То есть наш константный ответ должен работать на обеих позициях. И это вполне возможно, учитывая, что мы перезаписываем и инструкцию тоже. Ещё мы пользуемся тем, что если ответы одинаковы, модель чаще выбирает первый.

Инструкция, которую авторы вставляют вместо оригинальной, такая: "Ничего не выводи". Ответы пустые, но сначала идёт идёт ID второго ответа, а потом ID первого. Когда ответ вставляется на вторую позицию, мы перезаписываем инструкцию и заставляем модель выбирать из двух одинаковых пустых ответов, и она выбирает первый ID (который от второго ответа). Когда ответ вставляется на первую позицию, под ID второго ответа подставляется неправильный ответ, и модель выбирает ID первого ответа. В итоге на первой позиции модель выбирает первый ID, а на второй позиции — второй ID 🤔

Итог такой атаки: 77% LC винрейта на AlpacaEval 2.0 против GPT-4. Учитывая структуру атаки, в общем-то не важно, против какой модели выставляются ответы 😁


🔹Случайный поиск
Второе возможнное решение — автоматический подбор атакующего промпта. Авторы берут инструкции из открытого датасета, вставляют ответ, и измеряют лосс "правильных" ID. И потом этот лосс оптимизируют случайным поиском в пространстве токенов. Итераций поиска требуется не очень много, в худшем случае около 400. Ещё раз — оптимизируют не на самих бенчах, а на открытых инструкциях. И перенос вполне работает, итоговый промпт ломает бенчи.

Итог этой атаки: 87% LC винрейта на AlpacaEval 2.0.


🛡Предлагаемые варианты защиты:
- использование разных вариантов промпта в side-by-side
- фильтр по перплексии


Мне статья не очень понравилась, всё очень очевидно. О нет, в языковых моделях возможны промпт-инъекции, вот это новость! 😱
Да и нет такой проблемы, что кто-то засылает в бенчмарки константные ответы. Реальные атаки должны быть незаметны для людей, и я уверен, что они вполне возможны. То есть интересная постановка задачи звучала бы так: как поменять ответы моделей таким образом, чтобы значительно поднять винрейт в бенчмарке, но чтобы люди при этом ничего не заметили?

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

Старший Авгур

Почти там. Проблема в том, что в ПингПонге очевидно, что модель — дерьмовая.

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

Старший Авгур

Если кого-то интересует, как там новая Сайга, то новая Сайга пока не очень. Есть ощущение, что на Немо просто нужно пролить несколько больше токенов, чем есть в текущем датасете.

На картинке результаты арены на текущих попытках. Это уже лучше всего, что у меня было до этого, но всё ещё хуже Вихря.

Какой план:
- Добить SFT до 55 перебором параметров и доливкой данных в датасет. Начну я с чистки новых логов бота (аж 4к диалогов) и стыривания system_chat части GrandMaster-PRO-MAX.
- SimPO работает уже офигительно, а там пока была только одна попытка. Имхо, вращение гаммы и беты может вполне докинуть до 5 пунктов.

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

Старший Авгур

Помните историю про Гутенберг, датасет пар для обучения моделей писательству? Нашёлся-таки герой, который повторил его для русского, мой подписчик — Макс 👏

Вот сам датасет: https://huggingface.co/datasets/40umov/dostoevsky

Методология аналогична оригинальной. Напомню:
1) Берём книжки из общественного достояния.
2) Режем их на фрагменты.
3) Для каждого фрагмента автоматически генерируем промпт и выжимку.
4) Перегенерируем фрагменты языковой моделью.
5) Используем оригиналы как положительные примеры, а синтетические копии — как отрицательные.

Весь процесс был не особо автоматизированный, нарезка на фрагменты делалась вручную. Использованные книжки — на скриншоте.

Теперь дело за малым, нужно всего лишь обучить на этом модель 💪

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

Старший Авгур

Накрылась прокси, которую я использовал, чтобы отображать Claude в OpenAI-like API. Я уже сплю, поэтому пока убрал эти модели из бота, завтра починю.

UPD: всё работает

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

Старший Авгур

Welcome to the future motherfuckera

Release llama3.2

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