Интересное что-то
517 subscribers
2.72K photos
253 videos
139 files
4.52K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.me/asisakov_channel
Чат: https://t.me/youknowds_chat
Download Telegram
#паттерны

Введение

Сегодня мы рассмотрим паттерн проектирования "Адаптер".

Классификация

Тип:
Структурный

Определение: Адаптер — это структурный паттерн проектирования, который позволяет объектам с несовместимыми интерфейсами работать вместе.
Адаптер выступает прослойкой между объектами превращая вызовы одного в понятные для другого.

Очень удобно понять адаптер на примере из жизни. Представим человеку который говорит только на французском нужно рассказать историю человеку который понимает только немецкий. Сами понять они друг друга не смогут, поэтому им понадобится переводчик, который переведёт французкий на немецкий. В данном случае переводчик выступит адаптером.

Из чего состоит и как работает паттерн адаптер

1. Клиент. Описывает бизнес логику программы. Работает с адаптером и другими объектами.


adapter = Adapter()
result = adapter.do() + "5"


2. Интерфейс с которым может работать клиентский код.


class Test1:
def do(self) -> str:
return "3"


3. Класс, который имеет нужную клиенту логику, однако клиент не может с ним общаться, так как интерфейс данного класса ему не понятен.


class Test2:
def specific_do(self) -> float:
return 3.4


4. Адаптер - класс который помогает клиенту использовать функционал незнакомого ему сервиса в правильном формате. Реализует клиентский интерфейс. Содержит ссылку на незнакомый сервис. Адаптер при получении вызовов от клиента через клиентский интерфейс и переводит их в вызовы незнакомого сервиса в правильном формате.


class Adapter(Test1, Test2):
def do(self) -> str:
return f"Translated: {round(self.specific_do())}"


Уточнение: Приложение должно использовать объект адаптера только через клиентский интерфейс. Это позволит легко создавать и изменять адаптеры в будущем.

Плюсы данного паттерна

1. Скрывает все "низкоуровневые" преобразования интерфейсов от клиента. Реализует принцип абстракция.

Минусы данного паттерна

Таковых я не обнаружил

Пример и задача

В качестве примера возьмём класс с методом do который возвращает небольшой текст. Также есть класс с методом secret_do который возвращает другую строку, зашифрованную шифром Цезаря со сдвигом 5, которая ещё и полностью развёрнута.

В виде клиента выступает функция которая постит текст в ваш блог.(Можете просто создать функцию которая выводит переданный в неё текст). Естественно она должна принимать только расшифрованный текст.

Реализуйте адаптер для второго класса, который спасёт ваш блог от зашифрованных постов.

Пример из реального кода

https://github.com/aiogram/aiogram/blob/b190bbba1915ed3b7f311a780f34723ebd6b5acd/aiogram/contrib/fsm_storage/redis.py#L280

Вот его объяснение какую задачу решает адаптер в данном случае:

Здесь адаптер дает возможность контроллеру хранилища (RedisStorage) работать с первой версией редиса, т.е. адаптирует aioredis-v1, там еще есть адаптер для aioredis-v2, но он в отличие от первой версии адаптирует только создание клиента редиса


Дополнительные материалы

https://habr.com/ru/post/85095/
Forwarded from Душный NLP
Несём новую порцию статей с ICML 2025

Продолжаем рассказывать о том, что увидели на конференции.

Outlier Gradient Analysis: Efficiently Identifying Detrimental Training Samples for Deep Learning Models

Для нахождения плохих или, наоборот, хороших примеров в датасете часто используют influence function — это некоторый скор, который показывает, насколько сильно изменится лосс, если пример убрать из обучения. Проблема в том, что для вычисления функции надо обращать гессиан по параметрам модели, что вычислительно очень сложно.

В этой статье заметили, что на самом деле можно смотреть только на градиенты модели по примерам, которые мы проверяем. Если они сонаправлены с градиентами по данным из обучения — примеры хорошие, и наоборот. Далее, на основе этого можно применять методы детекции аномалий для нахождения примеров, которые портят обучение, и отфильтровывать их (но можно делать и наоборот — искать хорошие примеры и добавлять их в обучающую выборку). Основное преимущество метода — вычислительная простота; не нужны супердорогие обращения гессиана: только forward и backward pass модели для заданных примеров.

Towards Memorization Estimation: Fast, Formal and Free

Как померить меморизацию посэмплово, запоминала модель пример или нет? Для этого надо обучить модель один раз на данных с этим примером, а потом ещё несколько моделей на данных без него, и померить лосс на примере. Это очень дорого вычислительно. Но можно сделать проще — вычислять лосс на примере несколько раз в течение обучения и посчитать сумму. Если она выше некоторого порога, значит модель не смогла запомнить пример.

Где это можно применять? Для фильтрации данных. Если вдруг модель никак не может выучить какой-то пример, то, вероятно, в нём есть шум (например, неправильное решение математической задачи или неполное условие). Такие примеры можно выкидывать и улучшать точность модели или уменьшать компьют на обучение. Интересная и простая идея, надо проверять, действительно ли она будет работать для LLM (в статье проверяли только на задаче компьютерного зрения, в которой одни и те же данные проходят несколько эпох).

NICE Data Selection for Instruction Tuning in LLMs with Non-differentiable Evaluation Metric

В этой статье снова задаются вопросом, как выбирать такие примеры для обучения, чтобы на валидации получать хорошее качество. Отличие в том, что качество на валидации измеряется не лоссом, а произвольной необязательно дифференцируемой функцией (например, accuracy). В качестве её градиента используют policy gradient.

Jailbreaking LLMs and Agentic Systems: Attacks, Defenses, and Evaluations

На туториале рассказали о защите языковых моделей от нарушения политик элайнмента — например, чтобы модель не выдавала инструкции по созданию опасных веществ или не генерировала дискриминационный контент. Оказалось, что white-box-модели с доступом к весам (например, Llama) до сих пор уязвимы к так называемым token-based-атакам — вставке «мусорных» токенов в промпт. С этим неплохо работают методы поиска инжекта, близкого к кластеру безопасных промптов.

Промпт-инжекты по-прежнему похожи на попытки обмануть не очень внимательного человека, но сейчас работают лучше. Для большинства моделей удаётся подобрать рабочий инжект за 256 попыток («shots»).

Дальше рассказывали о методах защиты. Понятный способ — кластеризовать опасные состояния, добавить состояния отклонения ответа и дообучить модель переходить в них. Однако такой подход снижает качество ответов даже на безобидные вопросы (например, «how to kill python script» — из-за слова kill).

Другой способ — «пошатать» промпты и с помощью majority vote ответов решить, отказаться отвечать или выдать ответ на исходный промпт. При этом иногда ответить может быть приемлемо: например, если инструкция по сборке бомбы нерабочая.

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

Интересное увидели Алексей Поспелов и Ермек Капушев

#YaICML25

Душный NLP
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Душный NLP
И ещё постеры с ICML 2025

rStar-Math: Small LLMs Can Master Math Reasoning with Self-Evolved Deep Thinking

Статья показывает, как с помощью маленькой модели (1,5-7В) добиться качества на уровне больших вроде OpenAI o1. Для этого использует реворд-модель, которая умеет оценивать каждый шаг в рассуждении (process reward model, PRM) и генерируют рассуждения с помощью Monte Carlo Tree Search.

Как получить качественную PRM: шаг за шагом бустим политику и PRM. Сначала обучаем начальную политику на синтетике от DeepSeek-coder v2 (236B). Далее, используя её, получаем данные для обучения PRM. Следующим шагом с помощью и политики, и PRM генерируем новые более качественные данные. Обновляем все модели. А в конце полируем их, генерируя и обучаясь на траекториях для более сложных задач.

На каждом шаге для валидации правильности шагов используется код (то есть просят модель сгенерировать python-код для проверки шага). Результат — улучшение скоров на десятки процентов на математических бенчмарках.

VersaPRM: Multi-Domain Process Reward Model via Synthetic Reasoning Data

Ещё немного о PRM — VersaPRM. Авторы заметили, что такие модели работают только для математики, но не на остальных доменах (биология, философия, юридический домен). Проблема в данных — нет качественных размеченных пошаговых рассуждений для этих доменов.

Взяли вопросы из нужных доменов, сгенерировали рассуждения небольшой моделью (Llama-3.1 8B), оценили каждый шаг большой моделью (Llama-3.1 80B), и обучили на этом PRM. Далее при генерации ответов — взвешенный majority vote, где в качестве весов используют усреднённое по шагам предсказания PRM.

Получают хорошие приросты по всем доменам. Правда, тут есть вопросы, так как для обучения и теста применяют данные из одного и того же бенчмарка MMLU-Pro.

CollabLLM: From Passive Responders to Active Collaborators

На сессии Alignment and Agents был доклад, отмеченный как Outstanding Paper. Он посвящён тому, что диалоговая модель иногда должна отвечать не сразу, а сначала уточнить запрос пользователя — но без лишней «болтовни». Доклад довольно простой, и при этом получил признание.

Интересное увидели Алексей Поспелов и Ермек Капушев

#YaICML25

Душный NLP
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Душный NLP
Новая порция постеров с ICML 2025 — в последний день конференции

Independence Tests for Language Models

Авторы задаются вопросом, как проверить, являются ли две модели независимыми, или одна из них — это файнтюн другой? А может быть, у них общий предок? Чтобы узнать это, вводят специальный тест, основанный на перестановках весов. Предположим, что две модели имеют одинаковые архитектуры и размер. Тогда можно сгенерировать много перестановок весов для одной модели и считать статистики между этими перестановками и весами второй, а на основе этого вывести p-value.

Подход работает, если алгоритм обучения эквивариантен к перестановкам (сначала обучить, а потом переставить, или наоборот — в любом случае, получим один и тот же порядок весов), а перестановки при этом не меняют распределение весов на этапе инициализации модели. Для моделей с разными архитектурами можно делать сравнение слоёв с одинаковыми размерами. При этом надо учесть, что порядок нейронов может быть другим. Авторы убедились, что метод работает на моделях c Hugging Face из семейства Llama и её тюнов — посчитали, какие слои Llama-3.1 8B обрезали, чтобы получить Llama-3.2 3B.

Softmax is not Enough (for Sharp Size Generalisation)

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

What Do Learning Dynamics Reveal About Generalization in LLM Reasoning?

При обучении на задачах с решением и ответом можно смотреть на две метрики: перплексия правильного решения и точность финального ответа. Точность оценивается с помощью генерации нескольких решений, по которым считается средняя accuracy ответа. На разных примерах модель может вести себя по-разному: на каких-то в начале или середине обучения показывает высокую точность, но и высокую перплексию решения. Это хорошие примеры — модель ещё не запомнила ground truth-решение, но при генерациях приходит к правильному ответу. А бывают сложные примеры, в которых в течение обучения точность низкая, и растёт только тогда, когда перплексия ground truth-решения становится достаточно маленькой. То есть модель ничего не может выучить из этого примера, а лишь запоминает его. В статье предлагается метрика — точность до запоминания, — которая позволяет такие примеры разделять. На основе этого можно генерировать примеры, похожие на сложные, и повышать точность модели.

Overtrained Language Models Are Harder to Fine-Tune

Авторы делают следующее наблюдение: чем дольше мы претрейним модель, тем сложнее её потом файнтюнить. Как проверяют: берут чекпоинты открытых моделей с разных точек обучения, и измеряют точность на бенчмарках после претрейна и после файнтюна этого чекпоинта.

Оказывается, что в какой-то момент метрики после файнтюна начинают ухудшаться. Почему так происходит? Модель становится более чувствительной к изменениям весов. Авторы попробовали добавлять гауссовский шум к весам с разной дисперсией на разной длине обучения, и смотрели, как изменяется перплексия. Чем дольше учится модель, тем больше разница между перплексиями до и после добавления шума. То же самое происходит и при файнтюне.

Во всех результатах lr сводится к нулю. В первый день конференции была статья, в которой утверждалось, что если не сводить, то результаты на дообучении (файнтюне) будут лучше. Приятно, что независимые наблюдения сходятся.

Интересным поделился Ермек Капушев

#YaICML25

Душный NLP
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥Аттракцион неслыханной щедрости! Дарю 200 баксов!

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

Встретил на своем пути Deepgram - сервис, который позволяет работать со звуком: генерация и распознавание аудио. Качество транскрибации - огонь! Можно работать как в вебинтерфейсе, так и через api

Deepgram используют свою модель Nova-2.
Поверхностные тесты показали:
Час транскрибации с разделением по ролям стоил примерно 25 центов
Виспер явно не дотягивает до Новы по качеству
Подарочного депозита хватит примерно на 800 часов

Пацаны, я погуглил, депозита хватит на всю подборку Санта-Барбары!🔥🔥🔥

"Санта-Барбара" - 2137 эпизодов × 22 минуты = ~786 часов
"Просто Мария" - 605 серий × 45 минут = ~454 часа
"Рабыня Изаура" - 100 серий × 45 минут = 75 часов
"Что? Где? Когда?" - ~1500 игр × 45 минут = ~1125 часов (недобор)

Не хватило времени просмотреть эту дичь? Теперь ее можно всю перечитать!🤔
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️Как нащупать идею полезного сервиса, за который будут платить

Прилагаю часть тезисов с трехчасовой консультации посвященной поиску идей. Благодарю Зенина Андрея за уделенное мне время и внимание.


1. Роль личных мотивов и глубинного интереса

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

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

Искренний интерес: Успех требует некоторого интереса к занятию, личного ответа на вопрос "почему мне этим заниматься действительно интересно". Если нет глубинного интереса, а есть лишь предпосылки, что это только ради денег, вряд ли это станет критическим фактором для успеха.

Источник "суперсилы": Удовольствие от деятельности является важным сигналом, где содержатся подсказки к будущему результату и неконкурентным преимуществам. Исследование собственных мотивов может помочь обнаружить свою "суперсилу", определить роль и конфигурацию в проектах. Например, твой мотив — не деньги, а создание сообществ, коммуникация и ценность в группе людей (как в мастермайнде или семейной компании). Вероятно, твой большой успех будет в командной работе или партнерстве.

Следование за желаниями: Важно следовать за своими большими желаниями, даже не понимая, как их воплощать, но чувствуя внутренний сигнал, что желание есть.

2. Рекомендуемые книги для формирования бизнес-гипотез и общения с клиентами

Андрей предложил изучить несколько книг для повышения точности в формировании бизнес-гипотез и понимания рынка:

"Mom Test: Спроси маму: как понять, что твой бизнес нужен, даже если все врут" (Роб Фитцпатрик):
◦ Суть: Не нужно самому ничего изобретать; рынок сам подскажет. Главная идея — правильно задавать вопросы.
◦ Как использовать: Задавать вопросы людям в прошедшем времени ("Как часто ты пользовался?", "Почему не стал?"). Не анализировать свое предложение и не спрашивать "нравится ли вам эта идея?", так как люди будут социально одобрять и поддерживать, а не давать ценную критику. Цель – узнать, где у людей фокус внимания направлен сейчас, потому что там, где внимание, там и деньги. Можно увидеть несовершенства в процессах, которые люди уже делают, и заработать, помогая им сделать это быстрее, дешевле, проще, результативнее.

"Продажи по методу СПИН" (Нил Рекхэм):
◦ Суть: Как в голове человека формируется ценность, и как продавать, чтобы человек сам захотел купить, не зная метода решения.
◦ Как использовать: Взять теорию из книги и перенести ее на себя, чтобы понять, как доносить ценность своего предложения клиенту и выявлять изъяны. Это поможет вскрыть потребность клиента и помочь ему решить проблему, которую он захочет купить, даже не зная, что это будет квиз или другой конкретный продукт.

"Running Lean" (Эш Маурья):
◦ Суть: Выделение критических предположений, на которых строится гипотеза. Позволяет быстро выявить допущения, например, о высоком спросе или свободном рынке, и спланировать их проверку.
◦ Как использовать: Можно использовать ChatGPT, чтобы он, основываясь на методологии этой книги, проверял твои идеи. Это поможет понять, действительно ли рынок свободен, потому что там много покупателей, или потому что покупателей нет.

"The Startup Owner's Manual" (Стив Бланк):
◦ Суть: Описывает, как запускать и развивать бизнес со стадии идеи.
◦ Как использовать: На стадии идеи нужно общаться с потенциальными клиентами и опытными людьми, чтобы они "покупали" твою идею, т.е. видели ее логичность и отсутствие серьезных рисков. Не искать подбадривания, а просить критиковать и находить изъяны бизнес-модели.

Первые 2 книги крайне желательны к прочтению
Please open Telegram to view this post
VIEW IN TELEGRAM
3. На какие рынки обратить внимание (Внешний контур)

Выбор рынка — один из наиболее критичных факторов успеха. Рынок должен быть большой и доступный. Андрей выделяет четыре критерия рынка:

1. Много клиентов: Должно быть много потенциальных клиентов, которых можно сгруппировать по их проблеме.

2. Значимая/болезненная проблема: Проблема должна быть важной и занимать фокус внимания человека, существенно влияя на его жизнь и счастье. Проверочный вопрос: "Насколько человеку жизнь не мила без этого?".

3. Платежеспособность: У клиентов должны быть деньги, чтобы заплатить за решение проблемы.

4. Доступность: Ты должен понимать, где эти клиенты водятся, и иметь возможность до них дотянуться (например, через личные сообщения, знакомых). Не выбирай рынок, где дотянуться до клиента слишком тяжело.

Пример: Рынок недвижимости больше, чем рынок CD-дисков, и вложение одинаковых ресурсов принесет кардинально разные результаты. Рынок юристов, к примеру, соответствует этим критериям: он большой, у юристов есть понятные потребности и деньги, до них легко дотянуться.

4. Как выводить на интервью (обращение к клиенту)

Говорить о клиенте: Чтобы привлечь внимание, нужно говорить не о себе, а большей степени о собеседнике. Делай предположения о том, что нужно клиенту, основываясь на изучении его мышления и потребностей (через ChatGPT, собственный опыт, анализ видео).

Предложение ценности: Приходить с решением его проблемы. Например, "Андрей, нужны клиенты? У меня есть такая штука, я придумал прототип технологии, которая позволит получать клиентов таким способом. Хочешь попробовать?".

Краткость и снятие ответственности: Предлагать короткий созвон (например, 15-минутный). Это снижает сопротивление. Снимать с себя ответственность: "Ты сам оценишь, подходит ли идея, и мы, может, попробуем у тебя".

Конкретика и доказательства: В текстовом сообщении можно повысить конкретику, сбрасывая образ потенциальных результатов или примерное решение, чтобы повысить доверие. Используй факты, а не выводы: "Я добился такого результата...". Например, "Мы устранили такие проблемы, как... сократили ошибки... выгадали во времени...".

"Торговля" выгодами и итогами: Не продавай характеристики продукта ("я заменил заголовок"), а продавай факты о том, как это повлияло на цифры и решило проблемы клиента ("изменил стоимость лида на 40%", "повысил качество клиентов", "экономия миллионов"). Если нет готовых кейсов, можно торговать потенциальной выгодой или гипотезой об итогах. Предлагать пилотные проекты или особые условия (дешевле, бесплатно).

Использование ИИ для лидогенерации: Можно использовать ИИ для создания уникальных предложений клиентам "с ноги". Например, анализировать их соцсети/сайты и присылать список проблем и рисков с предложением бесплатной вводной консультации. Или генерировать контент-планы/видео по их теме и предлагать реализовать это. Это копеечная лидогенерация с высокой ценностью.
Please open Telegram to view this post
VIEW IN TELEGRAM
5. Как проводить интервью (кастдев)

Изучать клиента, не продавать продукт: Цель — изучить клиента, а не предлагать ему свой продукт. Задавай вопросы, чтобы понять его потребности, как он уже решает задачи, как часто ему это требуется.

Вопросы в прошедшем времени: Это помогает получить достоверные данные, опираясь на факты, которые уже произошли в жизни человека.

Избегать одобрения: Не спрашивай "нравится ли вам идея?". Люди будут социально одобрять, но это бесполезная информация. Вместо этого, проси критиковать и находить изъяны.

Ролевая модель: Поставь собеседника в ролевую модель: "Если бы ты был владельцем этой идеи, ты бы стал делать это, или выбрал бы по-другому, отказался?". Считывай, что бы он делал по-другому и почему, ведь у него есть пережитый опыт.

Сначала выясняй, потом предлагай: Лучше сначала выяснить информацию от человека, не подавая свою идею. Например, прежде чем предлагать сайт с рецептами, спросить, как часто пользуются книгой рецептов, почему не смотрят в интернете и т.д..

Приоритет рынка: Общение с рынком (потребителями, пользователями услуги) неизбежно и критично. Лучше это делать рано, чем поздно. Общение с другими предпринимателями ценно (особенно если они опытные), но не является заменой прямого общения с целевыми клиентами.


6. Проработка бизнес-идеи и юнит-экономика

План на салфетке: На стадии идеи необходимо иметь "план на салфетке" – документ, описывающий сколько продаж планируется, воронку, кто клиент, почему выберут тебя, примеры конкурентов, оценка факторов (насколько "душа лежит").

Юнит-экономика: Посчитай цифры своей бизнес-модели: стоимость привлечения, обслуживания, сколько денег получишь с клиента, прибыльность. Прикинь расходы (маркетинг, производство, продажи, налоги, неучтенные расходы) и доходы, чтобы понять, реалистичны ли цифры. Например, декомпозиция продаж, конверсии, необходимое количество лидов. Это поможет понять, сможете ли вы вообще это сделать, или цифры нереалистичны.


7. Итеративный подход и ценность ошибок

Короткие и быстрые тесты: Делай тесты гипотез короткими и быстрыми, минимально необходимыми для следующего шага ("из говна и палок").

Не стремись к совершенству сразу: Первая версия будет неправильной, вторая тоже, третья может быть нормальной, а шестая — хорошей. 11 циклов можно пройти за 10 дней, если каждый день делать одно изменение.

Ценность ошибок: Осознанно воспринимай ошибки, позволяй себе ошибаться много и глупо. Ошибки на ранней стадии — это крайне ценный опыт, который сэкономит огромное количество денег в будущем, так как масштаб этих ошибок — "песочница".
Please open Telegram to view this post
VIEW IN TELEGRAM