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

Паттерн 5. Архитектура надежных RAG-систем

В Паттерне 4 мы поняли, как удобно, когда вся информация, нужная для ответа, находится у LLM в контексте.
Часто эта информация зависит от текущего состояния системы. Тогда возникает RAG.

RAG это синтез двух очень больших и очень разных миров: Поиска и Генерации. Разберем каждый.

Поиск

Основная сложность в Поиске — огромное число кандидатов, с которых можно написать ответ.

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

- Эмбеддинги и быстрый векторный поиск. Это то, о чем все думают, когда представляют RAG. Они хороши, что позволяют искать семантически похожие тексты. Но у них есть принципиальные ограничения: не могут найти точные совпадения, не могут выделить дату, не понимают структуру документа

- Текстовый матчинг. Точное совпадение кусков текста. Можно считать по буквам, словам, n-граммам. Работают формулы TF-IDF, BM25 и тд. Не способны ловить семантику

- Графы знаний. Задают структуру ваших данных. Например, что эти документы из одной категории. Или, что тот документ идет после вот этого. Можно делать с помощью LLM, рассказывал про cocoindex в дайджесте.

Можно и нужно генерировать кандидатов разными методами, а затем их ранжировать более тяжелыми формулами. Бертами, LLM или даже ансамблем деревьев решений. Про выбор модели читайте тут.

Генерация

Основная сложность в Генерации - опираться только на найденные Поиском документы. Ничего не выдумывать, не галлюцинировать.

Для решения есть такие опции, от простого к сложному:

- Промптинг.
Попросить, дорогой генератор, ответь только по тому, что у тебя в контексте. Не выдумывать. Для простого RAG, где небольшой контекст и простые вопросы — метод рабочий, можно использовать.

- SFT-дообучение.
Когда промптинга мало, модель все равно галлюцинирует. Собираем датасет троек (запрос, контекст, правильный ответ). Учим на этом генератор. Не забывайте в "правильный ответ" записать "Не могу ответить, ничего не нашла", когда по контексту невозможно ответить. Работает для средней сложности задач.

- RLHF.
Когда даже SFT не справляется. Делаем reward модель, которая оценивает качества ответа. Дальше делаем итерацию PPO/DPO/GRPO, обновляем reward, делаем новую итерацию, потворять до готовности.

Агентность в RAG

В RAG идеально вписываются элементы архитектуры агентов. От простого к сложному:

1) Отдельная модель, которая генерирует удобные запросы.
Позволяет формулировать правильные запросы, снимать омонимию.

2) Итеративные походы в Поиск.
Если в первый раз не нашли, давайте сходим снова. Понять, что не нашли, можно эвристиками или рассуждениями.

3) Настоящий DeepResearch.
Объединение первых двух. Агент рассуждает, ходит итеративно в Поиск с правильными запросами.

Это все можно промтировать, SFT-шить, или через RL. Последнее можно глянуть в статье.


Литература для обязательного изучения

- Глава 1 отсюда. Понятно про архитектуру RAG.

- Видос по основам RAG. Во многом дублируется с постом

- Туториал по оценку RAG-а через LLM-as-a-judge (важная тема, не влезла в пост)

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



Как всегда, все вопросы пишите в комментарии или в личные сообщения.

#llm_system_design
Нашел небольшую и чудесную методичку по инференсу LLM.
Понятно, наглядно, без сложных подробностей. Читается легко за пару вечеров.

Что там есть

- Как работает инференс LLM (Prefill стадия, декодинг стадия)

- Как посчитать, сколько нужно VRAM у GPU

- Какие есть надежные фреймворки

- Метрики для инференса

- Методы ускорения LLM

и много всего еще

Чего там нет

Нет технических кишок, как устроена модель памяти в GPU, что такое арифметическая интенсивность, Kernel Fusion и тому подобное. Это может пригодиться, если вам не хватит готовых фреймворков и захотите залезть поглубже в кроличью нору.

Тогда вам поможет зубодробительная статья тут и немного менее тут.


Теперь вы знаете, что делать вечером в воскресенье, не благодарите :)
Обсуждать абстрактно "как правильно делать LLM" очень тупо. Поэтому мы будем разбирать архитектуру на реальных примерах.

Раз мы недавно обсуждали RAG, начнем с примера поисковой архитектуры.

Архитектура Поиска по контенту LinkedIn

В соцсети много контента, надо по нему искать. Для RAGа, да и просто для души.

Метрики

Time Spent просмотра постов
Если пользователь листает выдачу поиска и ничего не читает, то скорее всего мы нашли фигню.

Релевантность
Часто просто крутить Time Spent плохая идея, сигнал шумный. Хорошая идея мешать его с чем-то более легко измеримым, например, релевантностью поста. Мерят с помощью GPT.

Архитектура

Индекс из миллиардов постов. Два метода генерации кандидатов:

1) Текстовое совпадение по словам
Вечная классика — обратный индекс, нашли посты со словами из запроса, никакой семантики.

2) Эмбеддинги и быстрый поиск ближайших соседей
Для эмбеддеров используется хорошая мультиязычная моделька.

Дальше тысячи кандидатов отправляются в ранкер.

Ранкер из 2-х этапов. Сначала тысячи ранжируются одной моделькой. Дальше сотни ранжируются моделькой побольше. Архитектура моделей одинаковая.

Модель ранкера это две FC сети. Первая предсказывает релевантность. У нее есть только эмбеддинги запроса и документа. Вторая предсказывает Time Spent. Туда помимо эмбеддингов подаются и обычные фичи (популярность поста, дружит ли пользователь с автором и тд).

Учатся модели на взвешенную сумму Time Spent + Релевантность.

Учатся на кучи исторических сессиях поиска.

Что тут важно почерпнуть

- Несколько таргетов. Часто хорошая идея. Особенно связка онлайн + оффлайн

- Классическая архитектура поиска. Несколько генераций кандидатов + несколько ранкеров.

- Разметка с помощью GPT. Если не очень сложная задача, работает быстро и хорошо

Что я бы поменял

Очень странный выбор ранкера. Две FC-сети, при чем с готовыми эмбеддингами на входе и еще в лаваше с обычными фичами. Такое делать можно, ну только если у вас совсем нет железа.
Мне нравится что-то из:

1) Трансформеры-кроссэнкодеры на текстах, которые вы файнтюните

2) Бустинг над деревьями с обычными фичами

А лучше когда выход 1) пихаете в 2)

Если исторических данных много, то можно учить очень крутые и сложные ранкеры.

Итог

Базовая статья, как обычно делают поиск, но со странным выбором моделей. Можете на нее опираться, когда у вас в базе RAG что-то больше, чем 1000 документов.

Что думаете по этой архитектуре поиска? Слабовато или наоборот перекрутили?

Если есть пример, который надо разобрать, присылайте в личку.

#llm_cases
Хранить нельзя списать: Юнит экономика, ч2
Начнем разбирать издержки с той самой статьи расходов, которая часто и рушит бизнес: хранение товара. Просто следите за руками

Спрос = f(price)

Ст-ть хранения = g(спрос) = g(f(price)) =
= Средний обьем в мес, м2 * ставка аренды
+ Средний обьем в мес, руб * ставка депозита (связка с оборачиваемостью?)
+ max(Средний срок хранения, дни - Срок годности; 0) * себестоимость товара


Прибыль = Спрос * (цена продажи - цена закупки) - Стоимость хранения --> max(price)

Мало того, что нужно получить зависимость g(f(price)). Так эта ж* g() еще и очень сложно устроена!
Вот есть у нас прогноз спроса = f(price). Он в штуках, а не в м2. Он - это не обьем хранения. Он не знает о текущих остатках на складах и сколько нужно закупить товара до некоторого оптимального обьема хранения. Он еще не знает, что закупать товар можно только коробками по 12-20 штук

Если спрос маленький (до 10 штук), то его колбасит по полноценному Пуассону. И любая ошибка прогноза (очень вероятная) приводит к покупке не 1 коробки, а 2ух коробок - здравствуйте х2 издержки хранения (списания)

😈О как..
Какое-то "хранение" превратилось в нелинейную комбинаторную невыпуклую и черт еще знает какую заадчу математической оптимизации


Допустим, мы знаем текущий сток(обьем хранения) на складе. И у нас есть прогноз спроса. Казалось бы, закупаем c учетом округлени до коробки round(Спрос - Сток) и все дела?

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

Поэтому появился термин Старховые запасы. Из приятного - можно решать задачи прогноза спроса и определения страховых запасов почти независимо!

Обьем закупки = round(Спрос + Страховой запас - Сток)
Средний обьем хранения = (Сток + Спрос + 2 * Страховой запас
+ доп хранение из-за округления) / период между поставками

А дальше есть 2 пути
- Зубодробительно решать задачу математически, например, вот так
- Делать симуляции типа Монте-Карло, тк округления "по коробкам" все равно здорово ломают математику

Как бы я ни любил красивую математику, порекомендую заняться симуляцией

💡 Несколько интересных выводов из опыта таких симуляций :
- При маленьком обьеме спроса (до 10 штук товара за период между закупками) ловить нечего - нужно продавать много и вкладываться в рекламу
- Чем меньше размер "коробки" вы можете закупить, тем лучше
- Следите за сроками годности товаров. Фрэш со сроком годности 4 дня и меньше - кровавый океан
- Редкие поставки с большим лагом во времени очень круто растят стоимость хранения
- Если не считать, сколько товара закупать, то можно легко погореть только на хранении)) Хотя казалось бы, это просто фикс ставка за склад в месяц
- Вы удивитесь, но с маржинальностью товара = (цена - закупка) / цена менее 100% у небольшого продавца шансов на прибыль нет. Гораздо эффективнее будет положить деньги на закупку товара на депозит под 16-18%

Это была аналитика для селлеров ml-щиков бесплатно, без регистрации и смс

Подготовлено каналом @ml4value
Please open Telegram to view this post
VIEW IN TELEGRAM
Я принес. How to become a more effective engineer

Сегодня статья на английском https://newsletter.pragmaticengineer.com/p/how-to-become-a-more-effective-engineer

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

Несмотря на то, что в названии есть слово engineer, речь пойдет не об инженерии, а о том, как работает жизнь и система, в которой вы работаете.

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

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

А после этого станет намного более понятно, что вам нужно принять, с чем можно бороться, а где бесполезно жечь нервы и вообще забить/дистанцироваться/уйти.

После 18 лет в ИТ мне эта статья кажется довольно мудрой и жизненной. В начале карьеры я бы её, скорее всего, захейтил, сказал бы, что это «политика», приспособленчество и надо жестко бороться абсолютно за всё «правильное», против абсолютно всего «неправильного».
Я принес. Контакты… конфликты…

Игры вам приносил, сериалы и фильмы приносил, а вот мультики еще нет. Вот вам для затравки 4 отрывка из старого мультика 1984 года «Контакты… Конфликты…». Сняли 40 лет назад, а актуально всё и по сей день 🙂

https://www.youtube.com/watch?v=edha3Krhick – про то, как «помогает» совещание и почему работягу не мотивирует прибавка.

https://www.youtube.com/watch?v=EH_3ukkNuwg – про то, как у нас выстроилась очередь СРОЧНОЙ РАБОТЫ уже вплоть до пенсии, а она всё продолжает прибывать.

https://www.youtube.com/watch?v=Ovs5LSl1yOk – встречал граждан, у которых был такой же режим планирования и приоритизации 🙂

https://www.youtube.com/watch?v=3LqSbUdz1sY – а это когда слова и аргументы слушать не хотят, но объясниться и договориться о дальнейшем надо.

Если у вас есть еще любимые серии, заносите в комментарии. Ну а если ситуации знакомы вам, то ставьте 💯
Forwarded from Dev Easy Notes
Пришло время сделать новый закреп.

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

Это канал про разработку для тех, кто устал от беззубых душнил, корпоративных блогов или ребят, которые падают в обморок при виде мата в тексте.

Истории с собесов:
👉 Самый забавный собес в моей карьере
👉 Собес в Авито
👉 Собес в Aliexpress
👉 Советы по прохождению алго-секции
👉 Как уменьшить волнение перед собесом

Истории и рофлы:
👉 Мой каминг-аут
👉 Про первое место работы
👉 Как я попал в инфру
👉 Какого это работать в БигТехе
👉 Приключения мобильного разраба в мире инфры

Для любителей сериалов:
👉 Про CI
👉 Про тесты
👉 Про DI

Немного базы про разработку:
👉 База программирования в одном посте
👉 Советы, как не проебаться в работе
👉 Как я навайбкодил синтаксический анализ
👉 Оцениваем сроки
👉 Что такое архитектура
👉 Разгоняем про логи
👉 В IT нет научного подхода

Boost канала для неравнодушных
ChatGPT только что убил тысячи образовательных AI-стартапов (ладно, тысячи нервных клеток их фаундеров) — в сервисе появится специальный режим «Study Together».

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

2. Материал разбивается на небольшие части, чтобы обучение шло поэтапно и было максимально понятным. Вместо длинных лекций — короткие сообщения, вопросы, практические задачи, обсуждения.

3. Режим пока в стадии тестирования и доступен немногим. В будущем возможно появятся групповые сессии — типа учебного чата или семинара. А еще, судя по конкурентам, возможность загрузить учебные материалы.

4. Пока ощущается, что Study Together — не отдельная модель или файнтюн, скорее набор системных промптов и дополнительный UI специально для этого режима.

Теперь про конкурентов, которые уже довольно давно реализовали эту фичу:

♥️ Gemini Learning Coach Gem
Еще в прошлом году в Gemini появился аналог GPTs, настраиваемых под пользователя кастомных Gems. Среди уже предустановленных был Learning Coach. Коуч от Google использует специальную модель LearnLM, обученную на образовательных данных и встроен по всей экосистеме продуктов Google.

♥️ Claude for Education
Такой же специальный режим тьютора: загрузка материалов, составление плана, ответы на вопросы, помощь с
эссе и прочее. В Learning Mode используется специализированный RLHF-пайплайн (Reinforcement Learning from Human Feedback), где модель дообучается на педагогических диалогах и поощряется за создание вопросов, а не готовых ответов. В архитектуре добавлены компоненты для отслеживания логики рассуждений и адаптации сложности вопросов под контекст.

Сфера образования — лакомый кусочек для AI-гигантов. Появление ChatGPT и других подобных сервисов так безнадежно её задисраптило, что мы буквально будем вынуждены перепридумать как учиться по-новому с помощью AI. ChatGPT тут как Apple — выходит на рынок не первым и очень осторожно, возможно не с лучшим решением — но повлияет мощно за счет своего масштаба.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Метаверсище и ИИще (Sergey Tsyptsyn ️️)
This media is not supported in your browser
VIEW IN TELEGRAM
Ну и наконец-то Google Flow раскатали почти на весь мир, включая Европу.

https://labs.google/fx/tools/flow

У меня открывается без всякого ВПН.

https://blog.google/technology/google-labs/flow-adds-speech-expands/

Нужна подписка Pro.

И да, это липсинк по начальной фотке.

@cgevent