Только что открыл для себя ChatPDF, хоть и слышал давно. Позволяет загружать любой PDF, например, статью, резюме кандидата, презентацию или целую книгу – и терроризировать вопросами. И конечно, работает по принципу Retrieval Augmented Generation (RAG), о котором написал вчера.
Нравится.
RAG: Retrieval Augmented Generation
Значит, дошли у Богдана руки наконец сделать один проектик с чат-ботом поверх базы знаний. Кто уже работал с knowledge-augmented chatbots – зову в комментарии похвастаться, какой самый крутой конструктор лего собирали. Кто не работал – расскажу как это заводить.
Проблема следующая: у ChatGPT, как и у других больших языковых моделей, контекст ограничен. Например, у GPT-3.5 он 4K токенов, у GPT-4 он 8К токенов (кто не знает, токен – это символ, или часть слова; посмотреть, на какие запчасти ChatGPT разбирает ваш промпт перед ответом, можно здесь; в английском 1000 токенов ≈ 750 слов). Размер контекста – это сколько текста может переварить модель перед ответом. Ясно, что в такое малое число токенов не запихать какую-то большую, длинную и специализированную базу знаний, с оглядкой на которую мы хотим чтобы модель отвечала.
Какие варианты решения проблемы?
Вариант №1 (долго-дорого-сложно): дообучить модель на свои данные
Вариант №2 (быстро-дёшево-легко): подтягивать релевантные контексты по запросу.
Естественно, нас интересует второй вариант. Как он работает?
VISIAL GOALS
Значит, рассказываю, что было на экране.
Близится к концу третий квартал 2023 года (Q3), и начинается четвёртый (Q4). Это самое время заняться квартальным планированием, выставлять свои персональные OKR (Objectives & Key Results) на следующий квартал. Эта практика стала регулярной лишь с начала этого года.
Как Я ранее писал, свою жизнь Я раскладываю на несколько сфер и каждая ассоциируется со своим цветом. Сферы жизни – это векторы развития. Каждый квартал Я определяю, по каким фронтам Я собираюсь бить, куда направлять больше всего времени и энергии – и главное, в какой пропорции. Прошлые кварталы Я писал чисто текстовый документ-стратегию. В этом Я решил попробовать другой формат, где большой акцент сделан на визуализацию.
Есть гипотеза, что >90% информации, с которой работает наш мозг, – это визуальные образы. Даже когда мы говорим о языке и тексте, это лишь "вход" и "выход", а само мышление, сами цепочки ассоциаций возникают в некотором зримом пространстве в голове.
#MyProtocols
1:1 with Myself
Вдвоем человек бывает более одиноким, чем наедине с собой.
– Фридрих Ницше, "Так говорил Заратустра"
Одна из Моих давних практик, которая насчитывает уже 8 лет и которая помогает оставаться в гармонии с собой, контролировать стресс, понимать и слышать себя – это разговоры с собой. Буквально, хожу по дому или иду вдоль дороги – и говорю с собой вслух. Всегда это делаю в движении, потому что...
Только выхоженные мысли – имеют смысл.
– Фридрих Ницше, "Сумерки Идолов"
В разные годы Я называл эту практику разными именами: разговор с собой, персональный 1:1, мистерии, walk-n-talk... однажды ChatGPT подсказал Мне термин Soliloquy (в русском аналогов не нашёл), приём из театральной практики, когда герой озвучивает свои размышления – как например Гамлет в известном "Быть... или не быть?". Не путать с монологом, который обращён к другому человеку.
Посоветуйте фильм к просмотру.
Какой Ваш любимый и почему?
P.S. Сейчас попробую параллельно свою подборку склепать по памяти.
https://uberkinder.notion.site/02e6cf2a24f64607857083c880f7781c?v=351cee670d2f41b4827d4d3707f2bc2e&pvs=4
В общем, мы сделали токсичную ChatGPT-2 на чистом numpy
. А как прошла ваша суббота?
COLOR CODING
В комментариях вы попросили Меня рассказать про цветовые обозначения. Всё банальнее, чем вы думаете.
Идея раз: мы делим жизнь на сферы, например: работа, здоровье, семья, друзья.
Идея два: мы пользуемся разными приложениями: календарь, заметки, задачник. В каждом есть "проекты" или "категории", которые можно ассоциировать с определённой сферой жизни.
Идея три: наша память любит повторяемость. Это помогает быстрее переключать (вспоминать) контекст.
Эти предпосылки много лет назад подтолкнули Меня к тривиальному лайфхаку: соблюдать консистентность в цветовых обозначениях во всех приложениях.
–––
Конкретная палитра – штука индивидуальная, Я использую следующие обозначения:
• Пурпурный: цвет фокуса и мистики – Я, Мой внутренний мир и всё про Self-Management.
• Красный: всё про работу, AI, цели, огонь амбиций; красный – цвет приоритета №1.
• Оранжевый: цвет денег, бизнеса, менеджмента (дистрибуции Моих знаний) – находится очень близко, с одной стороны, к красному (цвет работы), с другой стороны жёлтому (цвет работы над собой). Смущает, что не близко к синему.
• Жёлтый: саморазвитие, без шуток, когда произношу квантили и персентили, в голове тёплый жёлтый цвет; про саморазвитие в целом мы говорили здесь; ещё желтый ассоциируется у Меня с чтением.
• (Персидский) зелёный: здоровье и тело, цвет витальности, овощей и кето-диеты (хотя сейчас Я и на более строгой диете); ассоциируется с восстановлением, выглядит как шкала здоровья в играх.
• Синий/Голубой: про людей (друзья, отношения, связи); цвет спокойствия и надёжности. Задумывались, почему телеграм, фейсбук, твиттер – голубых или синих оттенков?
• Розовый: всё про прекрасных женщин и любовь.
#MyProtocols
P.S. Поделитесь в комментариях, занимаетесь ли вы подобным и если да, какие у вас ассоциации каких цветов в какими сферами?
Personal SCRUM
Фундаментом Моей системы являются недельные спринты (для себя так и называю, персональный SCRUM). Я пробовал планировать по месяцам, пробовал по двух-недельным спринтам. Но эмпирически выявил, что лучше всего лично для Меня работают недельные спринты (веду их уже 1.5 года, без остановок).
Неделя – это золотая середина между временем, за который можно сделать что-то серьёзное и ощутимое, – и период, за который всё ещё не теряется фокус (наш мозг с большой неохотой аллоцирует ресурсы на что-то далёкое и туманное, отсюда прокрастинация).
Описал принципы своего недельного планирования и актуальную структуру своих спринтов здесь: https://uberkinder.notion.site/Personal-SCRUM-d4cb79f07ee442b5a8ffe7dbc47f2ed2
Вообще, для любого человека, кто хочет навести порядок в своей жизни и взять всё под контроль, рекомендую начинать именно с осознанного еженедельного планирования.
P.S. Также прикрепляю 18-минутное видео Cal Newport (автора книг Deep Work, So Good They Can't Ignore You, Digital Minimalism, etc.), которое на 90% описывает Мою текущую систему планирования, притом максимально простым и доступным языком. Этот парень шарит.
#MyProtocols
В соавторстве с GPT-4 составили ещё один список. Как вам?
#notion #theoryofmind #chatgpt
Из папочки "Избранное". Игорь Котенков утверждает, что большинство людей неправильно учатся, и рассказывает методику, как правильно обучаться чему угодно:
0. Четко формулируешь проблему
1. 10 минут думаешь сам
2. 20 минут ищешь в интернетах
3. если не нашёл ответ, задаёшь вопрос
"Я ЗНАЮ, ЧЕГО ТЫ ХОЧЕШЬ"
Пожалуй, самая важная книга, которую Я прочитал за последние 365 дней. Книга учит, как выстраивать с людьми долгосрочные доверительные отношения, как слышать людей, их намерения и цели; на что обращать внимание; какие люди надёжные (предсказуемые, заслуживающие доверия), а какие нет; как научиться смотреть на ситуацию глазами другого человека (не побоюсь этого сравнения, но автор на голову выше Дейла Карнеги).
Ещё прослушав первые 2 главы (слушал аудиокнигой), уже будто просмотрел в ускоренной съёмке все свои отношения, конфликты и недопонимания со всеми коллегами, начальниками, партнёрами, друзьями, девушками. Увидел, где Я игнорировал очевидные сигналы и действовал, мягко скажем, недальновидно.
Система поведенческого анализа автора рассказывается через живые истории и сопровождается чеклистами вроде "признаки доверия" или "признаки стресса". Каждый хочется куда-то выписать и внимательно обдумать. Не успев прослушать до конца, уже запланировал второе прочтение, на этот раз в электронном виде, с ноушеном наготове.
Книгу рекомендую не только менеджерам и продажникам всех мастей (им она будет полезна в первую очередь), но и всем-всем-всем остальным. Без исключения. Definitely "Must Read".
#books #management
Есть классическая картинка для иллюстрации жизненного цикла технологических инноваций - Gartner Hype Cycle. Он, конечно, скорее про adoption компаниями, но почему бы не натянуть эту фигуру и на отдельного индивида? Кажется, что прошло уже достаточно времени, чтобы ChatGPT прошел через этот hype cycle персонально для меня и достиг плато продуктивности: равномерное использование, выжившие юзкейсы, отсутствие восторгов и разочарований.
Так вот, лично у меня сложилось четыре явных паттерна использования:
1) Бюрократ-копирайтер"Перепиши этот месседж для официального емейла / обращения в службу поддержки / аппликейшена в организацию / маркетингового описания"
. В общем, для переписывания текста. Например, так пишутся жалобы в банк, заблокировавший транзакцию, или описание биографии для сайта издательства.
2) Поверхностный эрудит"Опиши состояние дел в какой-то области / объясни с учетом моего уровня (не)знания в соседних областях"
. Примеры вопросов: какой софт используют 3д художники для работы с текстурами? чем replacement map отличается от height map? какие острова на Азорах выбрать для недельного отпуска, если меня интересуют хайки и природные достопримечательности? какие прикладные применения сверхпроводимости? Дьявол обычно в деталях, и слишком глубоко закапываться с LLM не стоит, но можно быстро получить поверхностное понимание.
3) Junior software engineer "Напиши прототип такой штуки, используя этот незнакомый мне, но популярный в целом API".
Из последнего: делал так ORM на SQLAlchemy и blender-скрипты для headless рендеринга. В обоих случаях хочется, чтобы оно хоть как-то работало, а разбираться в апи не хочется - не предполагаю, что этот код нужно будет долго поддерживать или развивать.
4) Въедливый критик
"Найди недостатки и корнеркейсы в следующей идее/коде/тексте: {{INSERT YOUR STUFF}}
". Люди неплохо справляются с поиском подтверждений своей идеи или дизайна (confirmation bias и его друзья), а по-хорошему надо искать опровержения и логические нестыковки. Кстати, отлично сочетается с предыдущим режимом использования: напиши-покритикуй-исправь-вываливай в продакшен.
Это именно персональные примеры использования, а не приложения вокруг API. Хотя я как раз использую не веб-интерфейс, а консольный heygpt: он быстрее, удобнее и даже дешевле, чем обычная подписка на GPT-4.
Расскажите в комментариях про сложившиеся у вас паттерны!
А вот и запись нашего с Игорем стрима, где мы 2 часа искали ответ на вопрос:
What Is ChatGPT Doing... and Why Does It Work?
Кто был на трансляции, либо уже успел посмотреть, пишите в комментариях ключевые идеи, которые вы забрали из нашего разговора 😎
Идея простая:
Подготовка:
1. Берётся база знаний как некий набор текстов (documents). Тексты бьются на кусочки, скажем, по 64 или 128 токена (их называют чанками или нодами).
2. Каждый кусочек текста прогоняем через некоторую маленькую вспомогательную предобученную модель (embedding model), которая трансформирует каждый кусочек в вектор ("смысл кусочка", или на инженерском, эмбеддинг).
3. Эти вектора (и исходные кусочек текста и документ откуда они взяты) складываются в некое хранилище, которое называется "векторной базой данных" или "индексом".
Инференс:
1. Retrieval. От пользователя приходит запрос или вопрос. С помощью всё той же вспомогательной модели превращаем его в вектор, находим 2-3-5 самых похожие: либо напрямую, через kNN (k nearest neighbors, k ближайших соседей), либо через ANN (approximate nearest neighbors, приближённый поиск ближайших соседей) – на случай если база знаний очень большая и точный поиск затруднён.
2. Далее с найденными релевантными кусочками текста можно делать что угодно: можно вытащить весь исходный документ (особенно если они небольшие, скажем, по 500-1000 токенов), можно вытащить некую окрестность ближайших кусочков токена в том же документе, в котором нашли данный.
3. Наконец, формулируем промпт для базовой модели (GPT): вставляем исходный вопрос, далее говорим, мол, "вот что тебе может пригодиться при ответе" (ставить подтянутый контекст до или после – сильно зависит от ваших юзкейсов, подумайте, почему), – и далее случается магия, при генерации своего ответа теперь GPT будет опираться на наш контекст из базы знаний, какого бы размера она не была.
Впервые Я услышал эту идею в лекции Игоря Котенкова про модель RETRO (Retrieval-Enhanced Transformer) от DeepMind из статьи "Improving language models by retrieving from trillions of tokens".
Завести описанный пайплайн несложно, это займёт у вас не больше 1 вечера. Ваши друзья здесь: LlamaIndex и LangChain, под это дело там и там есть специальные утилиты, если не сориентируетесь – у них есть языковая модель поверх... документации, которая тоже работает по описанному принципу. Задайте вопрос – и она поможет найти и разобраться.
P.S. Как-то Александр Дьяконов пошутил, что лучший алгоритм в машинном обучении – это kNN, а остальные модели – это попытки его аппроксимировать, нивелировав те или иные недостатки. Тут же мы прямо возвращаемся назад к истокам.
Эта идея легла в основу формата Моего визуального плана-карты на следующий квартал. Попробую проговорить Мою логику визуализации, хоть Мне лично она и кажется на поверхности.
1. Значит, в центре нахожусь Я версии "Август-2023".
2. Вокруг Я рисую 4 круга на каждый месяц (план на 120 дней).
3. На расстоянии 3-4 месяцев от Меня находятся большие цели, к которым Я хочу придти и которые имеют для Меня стратегическое значение (каждая в своей сфере).
4. Вдоль каждой цели большое количество средних и малых промежуточных целей, которые алайнятся с большими целями и которые упорядочены во времени (это могут быть гипотезы, майлстоуны и целые проекты). Цели связаны стрелкой, если какие-то из них блокируют друг друга.
5. Есть контур (пунктиром) текущих целей, которые сейчас находятся в фокусе Моего внимания ("территория на которую Я позарился"). Есть контур (жирным) из целей, которых Я уже достиг ("захваченные территории"). Цели вне контуров – полупрозрачные (кроме финальных боссов).
Да, добыча знаний, развитие навыков и новые достижения – это буквально как захват новых территорий. Внимание – это Моя армия: чтобы достигать поставленных целей, необходимо концентрировать усилия на малом числе ключевых направлений – и не сбавлять напор.
Кто не знает, чего он хочет, – легко подпадает под влияние, того, кто знает, чего он хочет.
Вдогонку делюсь парой релевантных ссылок на тему:
• Dr. Emily Balcetis: (Visual) Tools for Setting & Achieving Goals
• Andrew Huberman: How to Set & Achieve Your Goals
• Cal Newport's Planning System (In Detail)
Что дают разговоры с собой?
• Рефлексия (взгляд в настоящее): понимаешь себя – чего ты хочешь, что тебя тревожит, что тебе нравится, а что не нравится сейчас. Регулярное изучение своих мыслей, эмоций и реакций – необходимое условие для сохранения внутренней целостности, преодоления внутренних конфликтов и противоречий, выработки внутреннего стержня (укрепление своей самости, поиск своего "Я").
• Разбор полётов (взгляд в прошлое): обдумываешь свои действия, слова, поступки, ошибки – в недавнем или далёком прошлом; думаешь что тобой двигало в каждый момент времени, что двигало других участников событий, которое тебя беспокоит; прикидываешь, что бы ты мог сделать лучше или по-другому в той ситуации.
• Брейншторм (взгляд в будущее): думаешь над решением проблем в будущем, достижением поставленных целей, над предстоящими вызовами – генерируешь идеи, продумываешь варианты развития событий и т.д.
• Побочные эффекты: медитация, терапия, тренировка дыхания и голоса (однако!), эмоциональное восстановление (в конце концов на время этого диалога ты на полчаса-час-два оффлайн), заряд энергией (причём как из-за движения, так и из-за ускорения интеллектуального метаболизма).
У многих из нас есть огромное количество не проговоренных с собой мыслей и эмоций, которые тратят энергию, но которым мы не даём возможности выйти наружу, материализоваться в словах. Я пробовал вести дневники, но они оказались не такими эффективными, как диалоги с собой (вероятно, с голосом наружу выходит сильно больше эмоций).
Разговоры с другими людьми (друзьями, психологами) для перечисленных целей Мне видятся неэффективными: во-первых, когда мы говорим с кем-то другим, хотим или нет, у нас включается самоцензура (подбираем слова, иногда что-то не договариваем, выставляем что-то в ином свете); во-вторых, а кто, как не ты, знаешь лучше тебя и... твои данные?
#MyProtocols
Если по какой-либо причине вы считаете, что “Вас пока недостаточно для Симулятора ML”, и Вы только начинаете свой путь в увлекательный мир машинного обучения, рекомендую не пропустить выгодное предложение:
До конца августа доступен пакет: курс с нуля Start ML на 5 месяцев + 1 месяц подписки на Симулятор ML бесплатно (промокод: SimML1M). Этого суперкомбо будет более чем достаточно, чтобы не только заложить надёжную базу в ML, но и получить свой первый боевой опыт (например, поучаствовав в одном из пет-проектов Симулятора).
Подарочную подписку можно активировать в любой момент прохождения Start ML, например, Я лично рекомендую по завершении модуля «Основы машинного обучения».
Акция продлится до 31 августа, так что решайте, Вы готовы стать полностью укомплектованным ML инженером уже к весне 2024, или пока нет?
PET-PROJECTS
Спустя 1.5 месяца после записи, Симулятор ML вырос в 1.5 раза – с 200 человек до 300. Наконец публикуем долгожданный анонс нового направления, пет-проектов.
Считайте, теперь в Симуляторе ML, помимо основной кампании, доступна кооперативная игра! 😎
https://youtu.be/MJMjGRU8uUc
SKILLS: PART 1/3
Меня часто спрашивают, как стать крутым ML инженером, сделать качественный скачок в карьере, дойти до Senior. Делюсь пуленепробиваемой методикой, которой со Мной поделился Валера Бабушкин. Секрет прост как три рубля, но одновременно тернист.
😁 Шаг 1: Формулируем точку Б
Какая конечная цель? К чему хотим придти? Посмотрим на это как на задачу классификации: что делает ML инженер, когда формулирует проблему для модели? – он собирает датасет.
Я обратился к Валере с вопросом "как стать синьором?", он предложил Мне вспомнить всех синьоров, которых Я знаю лично. Из Х5 их набралось штук десять (из департамента в 150+ человек). Мы выписали всех, чтоб были перед глазами.
😁 Шаг 2: Определяем метрику
Чтобы чем-то управлять, надо это измерять. Как только мы поняли, к чему мы хотим придти, нам необходимо научиться понимать, двигаемся ли мы в верном направлении.
Мы выделили навыки (признаки в датасете), которые помогут отделять класс "синьоры" от "не-синьоров". В разрезе чего будем смотреть? Примерный список на выходе:
• Coding (Python, MLOps)
• SQL, Databases, Big Data
• Machine Learning
• ML System Design
• A/B Testing & Statistics
• People Management
• Self-Management (Discipline)
• Achievements, Authority
😁 Шаг 3: Измеряем точку Б
У нас есть цель, и есть критерии. Самое время определить, где находится наша цель.
Мы взяли список, взяли каждого синьора, и Я, опираясь на свои грубые субъективные прикидки, стал оценивать каждого в разрезе каждого навыка по шкале от 0 до 10. По каждому навыку оценки разнились, но медианный уровень был получен.
Сейчас, для себя, Я использую персентили. Например "60% в выступлениях" означает, что "Я думаю, что Я лучше, чем 60% из всех, кто выступает".
😁 Шаги 4-5-6: Играем в RPG
Итеративно:
- Честно оцениваем текущий уровень;
- Выявляем по каким навыкам наибольший пробел;
- Работаем над ошибками, учимся, ищем советов.
Каждое обновление в комментариях к карточке снабжается кейсом, ссылкой или другим артефактом, подтверждающим, что по этому навыку Я подрос.
#notion
Чтоб Вы понимали, насколько Я геймер, Моя сквозная аналитика круга общения:
#notion #theoryofmind
Стратегия выбора команды и партнёров
"Я знаю, чего ты хочешь" – больше чем ещё одна книга по психологии. Это простой, но глубокий фреймворк для анализа межличностных отношений, основанный на наблюдении за паттернами поведения в людях. Ядро книги – вопрос доверия, надёжности и нацеленности на долгосрочное партнёрство. Люди, демонстрирующие эти качества, стоят вашего времени и внимания. От них можно ожидать последовательности и предсказуемости. Наоборот, от людей, кто демонстрируют обратные качества, следует дистанцироваться (к вопросу о стратегии формировании своего социального круга).
Автор выделяет шесть ключевых аспектов поведения:
1. Вложения друг в друга
2. Продолжительность (стремление к долгосрочному партнёрству, а не краткосрочной выгоде)
3. Надёжность (сочетание компетентности и ответственности)
4. Модель поведения (ценности и принципы человека)
5. Язык доверия (искренность в общении)
6. Эмоциональная стабильность
К каждому из этих качеств прилагаются чеклисты паттернов и антипаттернов в конце каждой главы.
Сохраняйте их себе, делитесь с друзьями и близкими. Пусть они помогут вам в формировании окружения (включая выбор команды, руководителя и партнёров), которое вас не ослабляет или изнашивает, а наоборот, усиливает.
#books #theoryofmind
DATA ASSISTANT
На Моих первых местах работы очень напрягало постоянно терроризировать аналитиков, DQ, DE – вопросами, где какая таблица лежит, как они связаны между собой, как посчитать какую метрику и т.д.
2023: за 2 часа написал телеграм-бота с ChatGPT API, скормил ему DDL-схему всех таблиц в DWH (Data Warehouse) со всеми внешними ключами между таблицами. Теперь онбординги, поиски нужных данных (где что лежит, что есть в какой табличке или колонке, каким SQL-запросом их связать) – будут проходить с минимальным отвлечением коллег.
Осталось прикреплять ссылки на упоминаемые в ответе таблицы в dbdocs, где можно руками посмотреть, с какими она связана какими ключами, узнать источники, и прочитать значение колонок, и DWH-документация, буквально говорящая сама за себя, готова.
P.S. Думаю сделать это одной из задач Симулятора ML... к слову, у нас вчера полностью обновился лендос, как он вам? 😎
FIRST PRINCIPLE THINKING
THE PROBLEM-SOLVING 101
https://uberkinder.notion.site/First-Principle-Thinking-23029d70d67b4e73828fbb9f0289f09b?pvs=4
Каким взглядом мы, инженеры, смотрим на мир? Как мы разрабатываем высоконагруженные системы, строим небоскрёбы, запускаем ракеты? Как вообще мы думаем о проблемах – и как мы подступаемся к их решению?
Написал короткую заметку, которая отвечает на вопрос, каково это быть инженером, и какими принципами мы руководствуемся, когда решаем проблемы.
#MyProtocols