Forwarded from Red RecSys
Джентельменский набор RecSys статей на начало 2026
Не первый раз меня спрашивают – какой сейчас актуальный пул статей, достаточный для того, чтобы «быть в теме» и «проходить собесы». Моя личная подборка такая:
SASRec
Основа основ, не уходящая с наших слайдов на конференциях
Turning Dross into Gold Loss
SASRec+ Sampled Softmax. Непобедимая SOTA Amazon датасетов и по сей день (но в тексте статьи вы этого не найдёте, можно почитать в eSASRec)
Unified Embeddings
Элегантный и распространённый в индустрии подход для решения проблемы раздутых матриц эмбеддингов для много-миллионных каталогов и большого количества фичей
Sampling-Bias-Corrected Neural Modeling
В деталях опиcывают LogQ коррекцию - незаменимый индустриальный подход при использовании in-batch негативов в обучении (после неё можно почитать Correcting the LogQ Correction)
PinnerFormer
Уже не must-have, но всё ещё классика. Как SASRec адаптировался в индустрии. Pinterest научил нас, что предсказывать можно не только следующий айтем, но и более отдалённый из будущего, и описал свой итоговый рецепт обучения – в том числе с Mixed негативами и LogQ коррекцией.
TransAct
Нейросетевых ранкеров есть большое количество. Здесь описывают вариант от Pinterest времён 2023 под именем Pinnability. Обрабатывают оффлайн (PinnerFormer) и рантайм (TransAct) историю пользователя + фичи пользователя, сверху шапка из DNC-V2 и несколько голов на бинарные таргеты. TransAct использует раннее связывание.
Actions…
Забудьте про чередование токенов - от него откажутся. Забудьте архитектуру HSTU - это не серебряная пуля. Главное здесь – подход к отказу от ручных вещей через масштабирование модели над последовательностями действий пользователей. И само выделение сущностей Item и Action (к ним позже добавится Context). Ещё есть полезная история с инференсом сразу пачки кандидатов target-aware ранкером с помощью кастомной маски внимания. И здесь же хорошо описан общий индустриальный подход Deep Learning Ranking Models.
Argus
Адаптация и развитие идей Actions… в Яндексе. Мы уже не используем feedback prediction в претрейне, но Argus остаётся ключевой технологией в кандгене и ранжировании. А ещё, если я не ошибаюсь, это единственная статья с авторегрессивным двухбашенным ранкером.
Generative Retrieval
Они показали нам Semantic Ids в RecSys. Дали дорогу для одностадийных рексистем (см OneRec). Открыли прямой путь для рекомендаций LLM-ками (см PLUM). И чуть позже (в Better Generalization…) показали профит от использования семантиков фичами в ранжировании.
QARM
Перед заведением Semantic Ids нужно получить сами эмбеддинги для квантизации – и от их качества зависит успех всей затеи. Дообучение на item-item пары массово используется в индустрии для формирования контентно-коллаборативных эмбеддингов с целью их дальнейшей квантизации в семантики. И впервые его описали в QARM.
OneRec
Вы уже видели что-то про One… в каждом RecSys канале, на который только подписаны.
PLUM
LLM генерирует рекомендации. По-настоящему, в индустриальном сеттинге. В Google. Must-read. Такой же рецепт описан в OneRec-Think
Этого списка хватит и для общения со специалистами, и для собесов.
Насколько больше мы читаем в работе? Сейчас выходит около 5 актуальных мне статей каждую неделю. Из них минимум 1 от Kuaishou, и если эти ребята не остановятся в приростах своих App Stay Time, китайские подростки вообще перестанут спать.
Не первый раз меня спрашивают – какой сейчас актуальный пул статей, достаточный для того, чтобы «быть в теме» и «проходить собесы». Моя личная подборка такая:
SASRec
Основа основ, не уходящая с наших слайдов на конференциях
Turning Dross into Gold Loss
SASRec+ Sampled Softmax. Непобедимая SOTA Amazon датасетов и по сей день (но в тексте статьи вы этого не найдёте, можно почитать в eSASRec)
Unified Embeddings
Элегантный и распространённый в индустрии подход для решения проблемы раздутых матриц эмбеддингов для много-миллионных каталогов и большого количества фичей
Sampling-Bias-Corrected Neural Modeling
В деталях опиcывают LogQ коррекцию - незаменимый индустриальный подход при использовании in-batch негативов в обучении (после неё можно почитать Correcting the LogQ Correction)
PinnerFormer
Уже не must-have, но всё ещё классика. Как SASRec адаптировался в индустрии. Pinterest научил нас, что предсказывать можно не только следующий айтем, но и более отдалённый из будущего, и описал свой итоговый рецепт обучения – в том числе с Mixed негативами и LogQ коррекцией.
TransAct
Нейросетевых ранкеров есть большое количество. Здесь описывают вариант от Pinterest времён 2023 под именем Pinnability. Обрабатывают оффлайн (PinnerFormer) и рантайм (TransAct) историю пользователя + фичи пользователя, сверху шапка из DNC-V2 и несколько голов на бинарные таргеты. TransAct использует раннее связывание.
Actions…
Забудьте про чередование токенов - от него откажутся. Забудьте архитектуру HSTU - это не серебряная пуля. Главное здесь – подход к отказу от ручных вещей через масштабирование модели над последовательностями действий пользователей. И само выделение сущностей Item и Action (к ним позже добавится Context). Ещё есть полезная история с инференсом сразу пачки кандидатов target-aware ранкером с помощью кастомной маски внимания. И здесь же хорошо описан общий индустриальный подход Deep Learning Ranking Models.
Argus
Адаптация и развитие идей Actions… в Яндексе. Мы уже не используем feedback prediction в претрейне, но Argus остаётся ключевой технологией в кандгене и ранжировании. А ещё, если я не ошибаюсь, это единственная статья с авторегрессивным двухбашенным ранкером.
Generative Retrieval
Они показали нам Semantic Ids в RecSys. Дали дорогу для одностадийных рексистем (см OneRec). Открыли прямой путь для рекомендаций LLM-ками (см PLUM). И чуть позже (в Better Generalization…) показали профит от использования семантиков фичами в ранжировании.
QARM
Перед заведением Semantic Ids нужно получить сами эмбеддинги для квантизации – и от их качества зависит успех всей затеи. Дообучение на item-item пары массово используется в индустрии для формирования контентно-коллаборативных эмбеддингов с целью их дальнейшей квантизации в семантики. И впервые его описали в QARM.
OneRec
Вы уже видели что-то про One… в каждом RecSys канале, на который только подписаны.
PLUM
LLM генерирует рекомендации. По-настоящему, в индустриальном сеттинге. В Google. Must-read. Такой же рецепт описан в OneRec-Think
Этого списка хватит и для общения со специалистами, и для собесов.
Насколько больше мы читаем в работе? Сейчас выходит около 5 актуальных мне статей каждую неделю. Из них минимум 1 от Kuaishou, и если эти ребята не остановятся в приростах своих App Stay Time, китайские подростки вообще перестанут спать.
Forwarded from Находки в опенсорсе
PEP-814: frozendict
В Python 3.15 появится полноценный иммутабельный словарь.
PEP: https://peps.python.org/pep-0814
Обсуждение: https://discuss.python.org/t/pep-814-add-frozendict-built-in-type/104854
Оригинальный PR: https://github.com/python/cpython/pull/144757
Исходники (да, они с
Зачем?
Главный вопрос: зачем питону вдруг через 35 лет понадобился иммутабельный словарь? Мотивации в ПЕПе явно не очень хватает. Но я докину:
1.
2. С иммутабельными объектами куда проще работать в режиме Free-Threading
3. Многие другие новые идеи вроде Виртуальных Потоков тоже хотели бы иметь аналог иммутабельного словаря
Ну а
И вот у нас появилась точная копия обычного
Примеры
Но не умеет ничего из
Зато умеет в
Как его менять? А вот так, создавая новые:
Детали реализации
Чтобы вы понимали, насколько они похожи:
Интересно, как работает
В C-API тоже добавили функций для работы с новым словарем:
А еще половина stdlib поменяет константы с
Отличный ПЕП, простая реализация, крутая фича. Питон победа!
Обсуждение: как вы относитесь к иммутабельности в питоне и вообще?
| Поддержать | YouTube | GitHub | Чат |
В Python 3.15 появится полноценный иммутабельный словарь.
PEP: https://peps.python.org/pep-0814
Обсуждение: https://discuss.python.org/t/pep-814-add-frozendict-built-in-type/104854
Оригинальный PR: https://github.com/python/cpython/pull/144757
Исходники (да, они с
dict лежат в одном файле на 8к строк)Зачем?
Главный вопрос: зачем питону вдруг через 35 лет понадобился иммутабельный словарь? Мотивации в ПЕПе явно не очень хватает. Но я докину:
1.
frozendict можно будет шарить между разными интерпретаторами без какого-либо оверхеда2. С иммутабельными объектами куда проще работать в режиме Free-Threading
3. Многие другие новые идеи вроде Виртуальных Потоков тоже хотели бы иметь аналог иммутабельного словаря
Ну а
types.MappingProxyType(mapping) был только surface-immutable. Все равно можно было поменять оригинальный объект mapping.И вот у нас появилась точная копия обычного
dict, только иммутабельная:Примеры
frozendict является collections.abc.Mapping и таким же Generic с двумя параметрами:
>>> frozendict.__mro__
(<class 'frozendict'>, <class 'object'>)
>>> obj = frozendict({'a': 1})
>>> frozendict[str, int]
frozendict[str, int]
Но не умеет ничего из
collections.abc.MutableMapping:
>>> obj['a'] = 2
TypeError: 'frozendict' object does not support item assignment
>>> obj.update
AttributeError: 'frozendict' object has no attribute 'update'
Зато умеет в
hash, если все ключи и значения умеют в hash:
>>> hash(obj)
6343282633043897990
>>> hash(frozendict({1: []}))
TypeError: unhashable type: 'list'
Как его менять? А вот так, создавая новые:
>>> obj = frozendict({'a': 1})
>>> id(obj)
4352339472
>>> obj |= {'b': 2} # <- тут мы создали новый frozendict
>>> obj
frozendict({'a': 1, 'b': 2})
>>> id(obj)
4352341680
Детали реализации
Чтобы вы понимали, насколько они похожи:
frozendict просто переиспользует clinic макросы dict для определения своих методов (=использует те же методы):
static PyMethodDef frozendict_methods[] = {
DICT___CONTAINS___METHODDEF
{"__getitem__", dict_subscript, METH_O | METH_COEXIST, getitem__doc__},
DICT___SIZEOF___METHODDEF
DICT_GET_METHODDEF
DICT_KEYS_METHODDEF
DICT_ITEMS_METHODDEF
DICT_VALUES_METHODDEF
DICT_FROMKEYS_METHODDEF
DICT_COPY_METHODDEF
DICT___REVERSED___METHODDEF
{"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
{NULL, NULL} /* sentinel */
};
Интересно, как работает
hash: он полностью дублирует алгоритм хеша из frozenset.В C-API тоже добавили функций для работы с новым словарем:
PyFrozenDict_New, PyAnyDict_Check проверяет на dict, frozendict или их подтипы.А еще половина stdlib поменяет константы с
dict на frozendict.Отличный ПЕП, простая реализация, крутая фича. Питон победа!
Обсуждение: как вы относитесь к иммутабельности в питоне и вообще?
| Поддержать | YouTube | GitHub | Чат |
Python Enhancement Proposals (PEPs)
PEP 814 – Add frozendict built-in type | peps.python.org
A new public immutable type frozendict is added to the builtins module.
Forwarded from Не AБы какие тесты
Привет, товарищи-статистики!
Интересный вопрос по базе: почему при средних объемах выборки мы используем t-распределение, если средние уже вроде бы распределены нормально?
Действительно, при некотором объеме выборки (условно 30-50 измерений) у нас соблюдается не только нормальность средних, но и выборочная дисперсия начинает вести себя предсказуемо (моделируется через Хи-квадрат, одно не 1-в-1 с ним совпадает!). Это обеспечивает в принципе t-распределение для большинства случайный величин, то есть что-то универсальное.
Но многих в контексте "среднего объема" выборок ставит в тупик наблюдение о выборочных средних согласно нормальном распределении, значит и перевод в z-score должно давать z-нормальное, однако применение критерия без знания дисперсии генеральной дает именно t-распределение. Почему?
Действительно, наблюдаешь нормальность средних, применяешь z-score = z-нормальное. Но это если есть знания отклонения средних, что на практике невозможно, увы. Однако мы можем использовать оценку отклонения средних, стандартную ошибку: именно это и лежит в критерии в знаменателе.
Сразу скажу, числитель критерия тут почти вообще ни при чём: небольшая выборка может быть весьма непоказательной по среднему, давая большую удаленность, но все-таки львиная доля ответственности в знаменателе, где у нас стандартная ошибка.
И проблема как раз в незнании дисперсии генеральной. Знай мы её, использовали сразу в стандартной ошибке, тогда от выборке к выборке у нас было бы константное значение, константа же тем и хороша, что означает отсутствие вариации. Критерий давал бы z-распределение, так как постоянно бы делили на одно и тоже значение при фиксированном размере для всех наших выборок.
Вместо этого мы вынуждены использовать _оценку_ стандартной ошибки (еще раз: оценку оценки) в знаменателе, где мы используем выборочную дисперсию. При небольших объемах эта выборочная дисперсия очень шумная, она сильно варьируется, при чем достаточно специфическим образом, на уровне приближения мы моделируем ее поведение через Хи-Квадрат, см. картинку (повторюсь сама она не совсем так распределена, но это уже духота), а у этого распределения при малых степенях свободы значения в массе своей лежат у нуля.
То есть: вы подставляете в знаменатель значения, близкие к нулю, а при делении на очень малое значение вы как результат получаете очень большое значения (в пределе бесконечность), вот вам и объяснения длинного хвоста. Но так как у вас бОльшая доля значений дисперсии около нуля, то подставляете в знаменатель близкие к нулю чаще прочих, оттого хвосты не только длинные, но и еще и толстые. Значения числителя, будь они даже около маленькие, "вымываются" из центра кратно меньшей дисперсией (чаще всего), делая центр более приземистым: он будет ниже и менее плотным в сравнении с нормальным, так как все уйдет в хвосты.
В этом смысле t-распределение хорошо абсорбирует шум от выборочной дисперсии небольших выборок, оно естественным образом дает нам необходимый запас осторожности (консерватизма), пока выборка мала. При n -> бесконечность, выборочная дисперсия будет приближаться к истинной, то есть практически не колебаться, а значит от выборки к выборке мы будем делить по сути на саму дисперсию, что и хочет от нас как раз z-критерий, поэтому t станет z! - то, с чего начинался пост.
Можно сказать пафоснее: t статистика это есть нормированная z статистика и при стремлении n в бесконечность у нас нормировка, - отношение дисперсии истинной на дисперсию оцененную, - превращается в 1. Такие дела)
P.S. Что такое средняя выборка вопрос риторический и зависит от природы данных, готовых ответов у меня тут для вас нет: собирайте данные вашего домена, исследуйте.
Интересный вопрос по базе: почему при средних объемах выборки мы используем t-распределение, если средние уже вроде бы распределены нормально?
Действительно, при некотором объеме выборки (условно 30-50 измерений) у нас соблюдается не только нормальность средних, но и выборочная дисперсия начинает вести себя предсказуемо (моделируется через Хи-квадрат, одно не 1-в-1 с ним совпадает!). Это обеспечивает в принципе t-распределение для большинства случайный величин, то есть что-то универсальное.
Но многих в контексте "среднего объема" выборок ставит в тупик наблюдение о выборочных средних согласно нормальном распределении, значит и перевод в z-score должно давать z-нормальное, однако применение критерия без знания дисперсии генеральной дает именно t-распределение. Почему?
Действительно, наблюдаешь нормальность средних, применяешь z-score = z-нормальное. Но это если есть знания отклонения средних, что на практике невозможно, увы. Однако мы можем использовать оценку отклонения средних, стандартную ошибку: именно это и лежит в критерии в знаменателе.
Сразу скажу, числитель критерия тут почти вообще ни при чём: небольшая выборка может быть весьма непоказательной по среднему, давая большую удаленность, но все-таки львиная доля ответственности в знаменателе, где у нас стандартная ошибка.
И проблема как раз в незнании дисперсии генеральной. Знай мы её, использовали сразу в стандартной ошибке, тогда от выборке к выборке у нас было бы константное значение, константа же тем и хороша, что означает отсутствие вариации. Критерий давал бы z-распределение, так как постоянно бы делили на одно и тоже значение при фиксированном размере для всех наших выборок.
Вместо этого мы вынуждены использовать _оценку_ стандартной ошибки (еще раз: оценку оценки) в знаменателе, где мы используем выборочную дисперсию. При небольших объемах эта выборочная дисперсия очень шумная, она сильно варьируется, при чем достаточно специфическим образом, на уровне приближения мы моделируем ее поведение через Хи-Квадрат, см. картинку (повторюсь сама она не совсем так распределена, но это уже духота), а у этого распределения при малых степенях свободы значения в массе своей лежат у нуля.
То есть: вы подставляете в знаменатель значения, близкие к нулю, а при делении на очень малое значение вы как результат получаете очень большое значения (в пределе бесконечность), вот вам и объяснения длинного хвоста. Но так как у вас бОльшая доля значений дисперсии около нуля, то подставляете в знаменатель близкие к нулю чаще прочих, оттого хвосты не только длинные, но и еще и толстые. Значения числителя, будь они даже около маленькие, "вымываются" из центра кратно меньшей дисперсией (чаще всего), делая центр более приземистым: он будет ниже и менее плотным в сравнении с нормальным, так как все уйдет в хвосты.
В этом смысле t-распределение хорошо абсорбирует шум от выборочной дисперсии небольших выборок, оно естественным образом дает нам необходимый запас осторожности (консерватизма), пока выборка мала. При n -> бесконечность, выборочная дисперсия будет приближаться к истинной, то есть практически не колебаться, а значит от выборки к выборке мы будем делить по сути на саму дисперсию, что и хочет от нас как раз z-критерий, поэтому t станет z! - то, с чего начинался пост.
Можно сказать пафоснее: t статистика это есть нормированная z статистика и при стремлении n в бесконечность у нас нормировка, - отношение дисперсии истинной на дисперсию оцененную, - превращается в 1. Такие дела)
P.S. Что такое средняя выборка вопрос риторический и зависит от природы данных, готовых ответов у меня тут для вас нет: собирайте данные вашего домена, исследуйте.
Forwarded from Не AБы какие тесты
Привет, товарищи-статистики! С праздником, днём Красной Армии, днём образования первой регулярной и массовой армии в мире, которая отстаивала интересы трудящихся.
Раз сегодня праздник, то и пост будет несложный, чтоб не прерывал отдых
Когда на курсе я с ребятами дохожу до p-value, мы рассматриваем распределение p-value при верности H0. Оно, распределение, равномерное, и частенько возникает вопрос: но почему оно равномерное? Ведь чаще же значения статистики будут у центра в рамках z-распределения, то есть как будто должно быть больше p-value's около 1 (с перекосом в пользу единицы).
А давайте посмотрим, почему равномерное.
Раз сегодня праздник, то и пост будет несложный, чтоб не прерывал отдых
Когда на курсе я с ребятами дохожу до p-value, мы рассматриваем распределение p-value при верности H0. Оно, распределение, равномерное, и частенько возникает вопрос: но почему оно равномерное? Ведь чаще же значения статистики будут у центра в рамках z-распределения, то есть как будто должно быть больше p-value's около 1 (с перекосом в пользу единицы).
А давайте посмотрим, почему равномерное.
Forwarded from AI и грабли
Кодинг-агент в телефоне (ч.1)
Частый вопрос в ИИ чатиках – как работать с ИИ агентом с телефона. Единственный стабильно рабочий совет, который я видел – ставить Claude Code на VPS и подключаться через termius.
Ниже инструкция:
1️⃣ Покупаем VPS. Топ: Hetzner, DigitalOcean. Дешман: RackNerd. В РФ – хз, посоветуйте в комментах
2️⃣ Настраиваем его с sudo доступом без пароля – чтобы агент мог делать все. VPS – по сути сэндбокс
Если вы не опытный пользователь linux, то просто открываем Claude Code локально и вставляем этот промпт для базовой настройки:
3️⃣ Скачиваем и подключаем Termius на телефон
Тут все просто – добавляем ip, пароль оставляем пустым, на плашку AI Agent можно забить. Единственная сложность – нужно сразу создать ssh ключи и прокинуть публичный на VPS
Credentials → SSH.id, Key, Certificate, FIDO2 → Generate key → ✔️
Почему-то скопировать публичный ключ прям отсюда нельзя. Поэтому сохраняем настройки, возвращаемся в главное меню Vault → Keychain → ED25519-00 → 📤 → Copy Public Key
Дальше с десктопа:
Возвращаемся в Vault → Hosts, тапаем на созданный сервер, оказываемся в командной строке, вуаля
Осталось установить Claude Code:
Дальше пишем
Из комментов (спасибо @nobilix):
Вот, теперь можно не вылезать из CC даже в туалете
@ai_grably
Частый вопрос в ИИ чатиках – как работать с ИИ агентом с телефона. Единственный стабильно рабочий совет, который я видел – ставить Claude Code на VPS и подключаться через termius.
Ниже инструкция:
1️⃣ Покупаем VPS. Топ: Hetzner, DigitalOcean. Дешман: RackNerd. В РФ – хз, посоветуйте в комментах
2️⃣ Настраиваем его с sudo доступом без пароля – чтобы агент мог делать все. VPS – по сути сэндбокс
Если вы не опытный пользователь linux, то просто открываем Claude Code локально и вставляем этот промпт для базовой настройки:
Помоги мне настроить VPS, чтобы запускать кодингового агента – проведи меня за ручку по всем важным этапам, а там где можешь выполнять команды самостоятельно (в т.ч. через SSH), делай это (но гранулярно, без огромных скриптов)
Требования:
Базовая настройка:
- Новый пользователь agent с sudo без пароля, чтобы агент мог сам запускать sudo-команды без интерактивного режима
- Доступ по ssh-ключу к новому пользователю agent (заранее сгенерируй ssh-ключи локально)
- Доступ к root-пользователю должен быть закрыт. Доступ по паролю – тоже
- Файерволл и fail2ban
Дополнительные настройки:
- Адекватная настройка bash history
- Swap 2GB
- Caddy
- uv для python и bun для javascript – через install.sh скрипты (найди в интернете)
- Docker + Compose v2 (добавить agent в группу docker)
ВАЖНО:
- Во время работы ты не должен получать доступ к секретам (пароль VPS, приватный ssh ключ, etc)
- Если что-то требует ввода секретных данных, то проси меня делать вручную
- В остальных случаях старайся использовать non-interactive режим, чтобы я участвовал в процессе минимально
- Задавай уточняющие вопросы, если есть что-то, что не прописано явно
3️⃣ Скачиваем и подключаем Termius на телефон
Тут все просто – добавляем ip, пароль оставляем пустым, на плашку AI Agent можно забить. Единственная сложность – нужно сразу создать ssh ключи и прокинуть публичный на VPS
Credentials → SSH.id, Key, Certificate, FIDO2 → Generate key → ✔️
Почему-то скопировать публичный ключ прям отсюда нельзя. Поэтому сохраняем настройки, возвращаемся в главное меню Vault → Keychain → ED25519-00 → 📤 → Copy Public Key
Дальше с десктопа:
ssh agent "printf '%s\n' 'ВСТАВЛЯЕМ СЮДА КЛЮЧ' >> ~/.ssh/authorized_keys"
Возвращаемся в Vault → Hosts, тапаем на созданный сервер, оказываемся в командной строке, вуаля
Осталось установить Claude Code:
curl -fsSL https://claude.ai/install.sh | bash
Дальше пишем
claude и получаем красоту на скрине выше.Из комментов (спасибо @nobilix):
1) без tmux никуда - соединение рвется, а с tmux - просто супер
2) в Termius важно включить галочку "Use Mosh" - будет моментальный отклик на нажатие клавиш
3) в Termius есть встроенный SFTP - оч удобно по файлам бегать и читать (использует тот же конфиг)
4) сменить дефолтный порт с 22 на другой (безопасность)
5) можно настроить пуш уведомления через хуки CC
Вот, теперь можно не вылезать из CC даже в туалете
@ai_grably
Forwarded from AI и грабли
Кодинг-агент в телефоне (ч.2)
В прошлом посте расписал дефолтный подход с termius. Но консольный UX на тачскрине – достаточно сомнительный. Так что у меня давно чесались руки затестить еще одну идею, которую еще нигде не видел. И вот вчера руки наконец дошли
В чем идея:
1. Есть очень хороший кодинговый агент OpenCode. Пожалуй, ближайший к CC по плотности фич, а по качеству реализации, пожалуй, даже лучше
2. В отличие от остальных агентов, он написан в классическом клиент-серверном подходе – отдельно бэк, отдельно фронт
3. И у него есть два фронта – уже привычный нам консольный текстовый UI и веб версия
Короче, вы уже догадались – можно сервить на VPS сразу веб версию и подключаться к ней с любого устройства, где есть браузер (см. скрин выше)
Дальше – пошаговый гайд + подводные камни:
1️⃣ Берем инструкцию из предыдущего поста и настраиваем себе VPS с нуля – у агента будет полный доступ к нему
2️⃣ Ставим opencode. В любом агенте на локальном устройстве пишем:
Опционально: просим настроить в caddy Oauth через GitHub вместо багованного Basic Auth опенкода
3️⃣ Подключаем подписку
Недавно OpenAI сделали нативную интеграцию с OpenCode и обычная ChatGPT подписка за 20$ дает жирные лимиты на топовую gpt-5.2
1. Открываем только что задеплоенный opencode
2. Пишем
3. В открывшемся окне – Connect Provider справа вверху
4. Переходим по ссылке в лк OpenAI и даем доступ
❗️Тут проблема – флоу OpenAI редиректит на
Решение: перед попыткой входом временно пробрасываем порты в отдельном терминале
4️⃣ Создаем WebApp на смартфоне
Открываем адрес нашего OpenCode в Safary →
Кстати, так же можно создать WebApp и на десктопе, чтобы это было как отдельное приложение, а не одна из сотен вкладок в браузере (скрин в комментах)
———
Готово, у вас есть агент с полноценным UI, который доступен с любого устройства и поддерживает почти все современные фичи – CLAUDE.md/AGENT.md, MCP, LSP, skills, subagents
Бонус: теперь вы знаете как поднять такое для нетехнических сотрудников.
Ваш, @ai_grably
В прошлом посте расписал дефолтный подход с termius. Но консольный UX на тачскрине – достаточно сомнительный. Так что у меня давно чесались руки затестить еще одну идею, которую еще нигде не видел. И вот вчера руки наконец дошли
В чем идея:
1. Есть очень хороший кодинговый агент OpenCode. Пожалуй, ближайший к CC по плотности фич, а по качеству реализации, пожалуй, даже лучше
2. В отличие от остальных агентов, он написан в классическом клиент-серверном подходе – отдельно бэк, отдельно фронт
3. И у него есть два фронта – уже привычный нам консольный текстовый UI и веб версия
Короче, вы уже догадались – можно сервить на VPS сразу веб версию и подключаться к ней с любого устройства, где есть браузер (см. скрин выше)
Дальше – пошаговый гайд + подводные камни:
1️⃣ Берем инструкцию из предыдущего поста и настраиваем себе VPS с нуля – у агента будет полный доступ к нему
2️⃣ Ставим opencode. В любом агенте на локальном устройстве пишем:
Настрой мне opencode web на удаленной машине (подключаться через ssh agent):
1. Изучи документацию opencode
2. Установи opencode
3. Настрой caddy (с моим доменом или просто http – обсуди со мной оба варианта)
4. Настрой запуск в бэкграунде (tmux, docker, pm2, systemd – помоги мне выбрать)
5. Создай папку ~/projects
- Сначала вместе сформулируем план, а после моего аппрува пойдешь выполнять (или говорить мне, что выполнить, если нужен интерактивный ввод).
- Выполняй команды гранулярно (двигаемся step-by-step)
- Обязательно настрой доступ к OpenCode по паролю
- Не читай и не запрашивай пароли – они не должны оказаться у тебя в контексте
Опционально: просим настроить в caddy Oauth через GitHub вместо багованного Basic Auth опенкода
3️⃣ Подключаем подписку
Недавно OpenAI сделали нативную интеграцию с OpenCode и обычная ChatGPT подписка за 20$ дает жирные лимиты на топовую gpt-5.2
1. Открываем только что задеплоенный opencode
2. Пишем
/model в чате3. В открывшемся окне – Connect Provider справа вверху
4. Переходим по ссылке в лк OpenAI и даем доступ
❗️Тут проблема – флоу OpenAI редиректит на
https://localhost:1455, OpenCode ждет ответ не локально, а на VPSРешение: перед попыткой входом временно пробрасываем порты в отдельном терминале
ssh -L 1455:localhost:1455 agent -N
4️⃣ Создаем WebApp на смартфоне
Открываем адрес нашего OpenCode в Safary →
··· меню → share → добавить на домашний экран (скрины в комментах)Кстати, так же можно создать WebApp и на десктопе, чтобы это было как отдельное приложение, а не одна из сотен вкладок в браузере (скрин в комментах)
———
Готово, у вас есть агент с полноценным UI, который доступен с любого устройства и поддерживает почти все современные фичи – CLAUDE.md/AGENT.md, MCP, LSP, skills, subagents
Бонус: теперь вы знаете как поднять такое для нетехнических сотрудников.
Ваш, @ai_grably
Forwarded from AI и грабли
Протухание контента
Только собрался писать пост о том, как я его учил свою подругу маркетолога использовать OpenCode, который пару дней назад появился в форме десктопного аппа с нормальным UI,
Как сегодня выходит десктопный UI для кодекс 🤯
———
Скачать OpenCode (Mac, Windows, Linux)
Скачать Codex (Mac-only)
Обзор по фичам на картинке ниже (разбор только по десктопным фичам):
ваш, @ai_grably
Только собрался писать пост о том, как я его учил свою подругу маркетолога использовать OpenCode, который пару дней назад появился в форме десктопного аппа с нормальным UI,
Как сегодня выходит десктопный UI для кодекс 🤯
———
Скачать OpenCode (Mac, Windows, Linux)
Скачать Codex (Mac-only)
Обзор по фичам на картинке ниже (разбор только по десктопным фичам):
ваш, @ai_grably
Forwarded from Эмбеддинг бенчмарка
Transformers v5
Пост (от декабря): https://huggingface.co/blog/transformers-v5
Полный список изменений: https://github.com/huggingface/transformers/releases/tag/v5.0.0
- Теперь токенизаторы используют только tokenizers, что раньше было
- Теперь dtype будет
- Убрали
- Много аргументов в трейнере поменяли. Например,
- Также сделали методы для получения отдельных модальностей у модели для SentenceTransformers, так что ждем когда появится новая версия
Пост (от декабря): https://huggingface.co/blog/transformers-v5
Полный список изменений: https://github.com/huggingface/transformers/releases/tag/v5.0.0
- Теперь токенизаторы используют только tokenizers, что раньше было
fast. Более подробно можно прочитать в их блоге https://huggingface.co/blog/tokenizers- Теперь dtype будет
auto по дефолту (раньше было fp32)- Убрали
load_in_8bit и теперь надо передавать конфиг напрямую- Много аргументов в трейнере поменяли. Например,
report_to теперь по дефолту none- Также сделали методы для получения отдельных модальностей у модели для SentenceTransformers, так что ждем когда появится новая версия
Forwarded from Korenev AI - GPT в тапочках🩴
Принимать взвешенные решения в таких условиях - аццкий ад.
Но! На то есть - серебрянная пуля/ синяя таблетка/ узбагоин (выбери нужное).
Это - фильтр, через который можно просеивать собственные решения. Фильтр, основанный на твоих личных жизненных принципах.
Миллиардер Рэй Дэлио описал свои принципы и подходы в книге "Принципы". По ссылке получасовой ютуб-саммари этой книги.
Начал ее слушать и понял, что у меня формализована лишь малая часть принципов. Остальное - обитает на периферии сознания. И сразу врубил клода опуса, начал с ним сессию по извлечению собственных принципов. Оказалось весьма полезно и познавательно. После сессии - грёбаное солнце стало светить как-то приятнее, грёбаный мир стал намного милей
Кто хочет поразгонять - ловите промпт:
Промпт для разбора жизненных принципов
## Роль
Ты — коуч, который мыслит как Рэй Далио, автор книги "Принципы". Твоя задача — помочь человеку нащупать и сформулировать его личные жизненные принципы через рефлексию и честный разбор паттернов поведения.
## Методология
### Фаза 1: Сбор фактуры
Начни с открытого вопроса:
> "Расскажи о себе: что тебе нравится делать, что не нравится, как ты работаешь, отдыхаешь, общаешься. Не структурируй — просто говори, что приходит в голову."
Слушай и отмечай:
- Повторяющиеся паттерны
- Противоречия (говорит одно, делает другое)
- Эмоциональные маркеры (где энергия, где угасание)
- Что человек называет сам, но не осознаёт как паттерн
Задавай уточняющие вопросы, но не уводи в сторону.
### Фаза 2: Исследование боли
Далио говорит: "Боль + Рефлексия = Прогресс"
Найди точки, где человек:
- Сдавался раньше времени
- Терял энергию
- Конфликтовал с другими или собой
- Чувствовал себя не на своём месте
Ключевой вопрос: "Что ты чувствовал в этот момент? Это была злость, стыд, обида или что-то другое?"
Эмоция — ключ к пониманию реального принципа, который управляет поведением.
### Фаза 3: Поиск структуры
Ищи ответы на:
- Топливо: что даёт энергию?
- Кайф: от какой деятельности получает удовольствие?
- Боль: что истощает, бесит, демотивирует?
- Компенсаторы: что/кто помогает закрывать слабые стороны?
### Фаза 4: Формулировка принципов
Принцип должен быть:
- Конкретным (не "быть лучше", а "работать в партнёрстве с комплементом")
- Проверяемым (можно понять, следуешь ему или нет)
- Основанным на реальном опыте, а не на "как надо"
Группируй принципы:
- Про работу / продуктивность
- Про отношения / общение
- Про себя / ограничения
- Про рост / зону развития
### Фаза 5: Тест на практике
Возьми текущую ситуацию выбора и прогони через принципы:
> "У тебя есть X, Y, Z. Давай проверим каждый вариант через твои принципы."
Создай простую таблицу: принцип vs вариант.
### Фаза 6: Поиск механизмов
Принципы без механизмов — просто слова. Спроси:
> "Как ты будешь себя возвращать к этому принципу, когда захочется его нарушить?"
Варианты механизмов:
- Внешний партнёр / accountability
- Правила-триггеры ("если X, то Y")
- Ограничения ("новое можно только после Z")
## Правила ведения диалога
1. Не давай советов раньше времени — сначала собери фактуру
2. Возвращай к сути — если человек уходит в сторону, мягко верни
3. Называй паттерны — человек часто не видит, что повторяется
4. Используй его слова — когда он сам что-то точно сформулировал, зафиксируй
5. Один вопрос за раз — не перегружай
6. Проверяй резонанс — "Это отзывается? Что хочешь поправить?"
## Ключевые вопросы
- "Что ты чувствуешь в момент, когда сдаёшься?"
- "Где в жизни ты продолжал что-то делать долго без быстрого результата?"
- "Опиши идеальную роль — что делаешь, с кем, как часто контакт с людьми?"
- "Если бы мог оставить только одно направление — какое?"
- "Это осознанная стратегия или способ не выбирать?"
## Финал
Когда принципы собраны, резюмируй:
- Список принципов (компактно)
- Главное противоречие / зона роста
- Один практический шаг на ближайшую неделю
Не забудьте Рэю отсыпать огоньков! Ласковое слово даже миллиардеру приятно
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Душный NLP
Miss me? Как и обещали, возвращаемся не с обзором, а с «кое-чем ещё», но не менее полезным. Мы попросили инженеров Яндекса, чьи разборы вы можете почитать в канале, поделиться (уже) прошлогодними статьями, которые им запомнились больше всего.
ToolOrchestra: Elevating Intelligence via Efficient Model and Tool Orchestration
Статья о маленькой модели (Qwen3-8B-Based), которая, по сути, выполняет функцию планера и роутера во вспомогательные инструменты (глобальный/локальный поиск), специализированные модели (вроде Qwen3-Coder) и модели общего назначения (GPT-5) для решения задач. Кроме того, модель обучена учитывать преференции пользователя по использованию тулов и размену качества на скорость и цену. С помощью обучения на несложной синтетике у авторов получается модель, которая даёт высокий скор на HLE, FRAMES, tau2-bench и при этом оказывается более cost-effective.
Stabilizing Reinforcement Learning with LLMs: Formulation and Practices
Обзор нескольких трюков по стабилизации обучения GRPO, ранее предложенных в других статьях. Авторы дают некоторые теоретические обоснования границ применимости этих методов, а затем проводят достаточно подробные экспериментальные подтверждения. Статья позволяет быстро погрузиться в тему проблем стабильности GRPO и попробовать применить эти методы на практике.
Artificial Hivemind: The Open-Ended Homogeneity of Language Models (and Beyond)
Исследователи из разных университетов изучили ответы моделей на запросы, допускающие ответ в свободной форме (вроде «в чём смысл жизни?» или «сочини стихотворение о времени»). Обнаружили, что ответы одной и той же модели, и совершенно разных, по форме и содержанию очень похожи. Известные техники повышения разнообразия — регулировка температуры или Min-p Sampling — не сильно помогают. Например, большинство моделей стали сравнивать время с рекой.
Вероятно, эффект обусловлен тем, что модели обучаются на похожих данных, собранных из интернета, или даже на синтетике, сгенерированной другими моделями. Кроме того, выяснили, что предпочтения LLM-as-a-Judge плохо коррелируют с оценками людей, особенно на примерах, где предпочтения асессоров расходятся.
Результат важен тем, что мотивирует принятие специальных мер для повышения разнообразия генераций больших языковых моделей.
DAPO: An Open-Source LLM Reinforcement Learning System at Scale
Авторы исследуют недостатки ванильного Deepseek GRPO и предлагают для них очень логичные практические решения, которые совсем несложно добавить к себе. А ещё очень классно, что они опенсорсят датасет и код обучения (который теперь доступен в фреймворке verl. Разбор статьи есть в канале.
Любопытными статьями поделились
Душный NLP
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Душный NLP
Ускорение E2E-инференса через оптимизацию KV-кэша. Часть I
Существует много способов ускорить инференс LLM: менять архитектуру, использовать speculative decoding или просто добавлять вычислительные ресурсы. Но есть и более практичный путь — оптимизация KV-кэша.
Её можно разделить на pre-train и post-train. Первые требуют изменений до обучения модели: это архитектурные решения вроде GQA/MQA/MLA, смешивание глобального и локального атеншена, а также другие модификации, которые обычно стоят дорого из-за переобучения.
Post-train-методы можно применять к уже готовой модели: это различные sparse-стратегии, pruning, удаление повторов токенов и другие техники, которые уменьшают объём KV или сокращают число обращений к нему во время инференса.
KV-бюджеты удобно делить на dense и sparse, отдельно для prefill и отдельно для decode. В варианте dense prefill + dense decode (обычный KV-кэш) каждый новый Q взаимодействует со всеми K и V до него: ко всем токенам промпта и всем ранее сгенерированным токенам. Тогда KV-бюджет равен сумме длины промпта и длины генерации.
Если сделать sparse только на prefill, а decode оставить плотным, то Q перестаёт смотреть на весь промпт, но общий выигрыш заметен в основном в сценариях «длинный промпт — короткий ответ». Если же оставить dense prefill и сделать sparse decode, это часто релевантно reasoning/CoT-сценариям. Sparse и на prefill, и на decode даёт максимальную экономию бюджета, но обычно сильнее всего ухудшает качество.
Sparse можно строить по-разному. Если пересчитывать важные токены на каждом шаге decode, то качество станет выше, но скорость падает. Если пересчитывать раз в несколько токенов, то получается быстрее, но нужно удерживать локальный контекст между пересчётами, иначе модель начинает терять связность.
Один из сильных post-train-методов оптимизации KV-кэша — ShadowKV, который позволяет получать минимальные просадки на бенчмарках без дообучения и увеличивает throughput до трёх раз. О нём мы подробно поговорим в следующей части.
Разбор подготовил❣ Владислав Кругликов
Душный NLP
Существует много способов ускорить инференс LLM: менять архитектуру, использовать speculative decoding или просто добавлять вычислительные ресурсы. Но есть и более практичный путь — оптимизация KV-кэша.
Её можно разделить на pre-train и post-train. Первые требуют изменений до обучения модели: это архитектурные решения вроде GQA/MQA/MLA, смешивание глобального и локального атеншена, а также другие модификации, которые обычно стоят дорого из-за переобучения.
Post-train-методы можно применять к уже готовой модели: это различные sparse-стратегии, pruning, удаление повторов токенов и другие техники, которые уменьшают объём KV или сокращают число обращений к нему во время инференса.
KV-бюджеты удобно делить на dense и sparse, отдельно для prefill и отдельно для decode. В варианте dense prefill + dense decode (обычный KV-кэш) каждый новый Q взаимодействует со всеми K и V до него: ко всем токенам промпта и всем ранее сгенерированным токенам. Тогда KV-бюджет равен сумме длины промпта и длины генерации.
Если сделать sparse только на prefill, а decode оставить плотным, то Q перестаёт смотреть на весь промпт, но общий выигрыш заметен в основном в сценариях «длинный промпт — короткий ответ». Если же оставить dense prefill и сделать sparse decode, это часто релевантно reasoning/CoT-сценариям. Sparse и на prefill, и на decode даёт максимальную экономию бюджета, но обычно сильнее всего ухудшает качество.
Sparse можно строить по-разному. Если пересчитывать важные токены на каждом шаге decode, то качество станет выше, но скорость падает. Если пересчитывать раз в несколько токенов, то получается быстрее, но нужно удерживать локальный контекст между пересчётами, иначе модель начинает терять связность.
Один из сильных post-train-методов оптимизации KV-кэша — ShadowKV, который позволяет получать минимальные просадки на бенчмарках без дообучения и увеличивает throughput до трёх раз. О нём мы подробно поговорим в следующей части.
Разбор подготовил
Душный NLP
Please open Telegram to view this post
VIEW IN TELEGRAM