Плюшевый Питон – Telegram
Плюшевый Питон
712 subscribers
32 photos
1 video
2 files
43 links
Уютный техноблог про Python, саморазвитие и искусственный интеллект. От техлида LLM из команды YandexGPT (ex GigaChat, ex MTS AI) с 12-летним опытом в NLP.

Рекламу не размещаю. По всем остальным вопросам пишите на @AlexeyMalafeev
Download Telegram
Не так давно составлял индивидуальный учебный план для одного из подписчиков, который хотел перейти в сферу data science / machine learning. План был сильно "заточен" под этого конкретного человека и его бэкграунд. Потом я подумал, что будет полезно также опубликовать здесь обобщённый учебный план для тех, кто хотел бы заниматься машинным обучением, но не знает, с чего начать. Надеюсь, кому-то из вас будет полезно! Смотрите следующий пост.

#ml #career
Учебный план для погружения в data science и machine learning с нуля

Включает области, которые нужно "прокачать", кратко - зачем это нужно, а также ссылки на ресурсы (старался подбирать бесплатные и русскоязычные).

1) Программирование на Питоне

1.1) Базовый синтаксис языка
Python - "родной" язык для машинного обучения и интеллектуального анализа данных.
https://stepik.org/course/58852/
https://stepik.org/course/67/

1.2) Основы объектно-ориентированного программирования (ООП)
Нужно, чтобы реализовывать собственные компоненты на основе существующих библиотек. Для этого нужны некоторые знания ООП, хотя и в меньшем объеме, чем для бэкенд-разработки.
https://stepik.org/course/100558/ - для C++, но хорошая теоретическая база по ООП и паттернам, можно взять выборочно
https://stepik.org/course/114354/ - для Python, но платный курс
https://stepik.org/course/94022/ - для Python и бесплатный, но незавершённый

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

1.3) Алгоритмы (не МЛ, а классические: сортировка, нахождение пути и т.д.)
В некоторых компаниях в качестве скрининга предлагают решить 1-2 задачи на алгоритмы. Знание алгоритмов нужно не только бэкенд-разработчикам. Оно помогает всем писать более качественный код.
https://stepik.org/course/217/
https://stepik.org/course/1547/

2) Математика: матанализ, теория вероятностей, статистика, линейная алгебра.
Нужно для более глубокого понимания того, как работают алгоритмы машинного обучения. Есть мнение, что математика в ML/DS нужна не всем и не всегда. Моё дело - предложить. :)

На начальном этапе я бы не отделял это от изучения машинного обучения (см. соответствующий раздел). Во многих учебниках и курсах по машинному обучению есть в начале разделы по математике - их объёма вполне достаточно на первых порах.

3) Анализ данных
Обучение модели обычно начинается с разведочного анализа данных. "Become one with your data" (c) A. Karpathy

3.1) Теория анализа данных
https://stepik.org/course/73952/ (тут есть и машинное обучение)
https://stepik.org/course/57623/ (тут больше на статистику упор)

3.2) NumPy и Pandas - базовые библиотеки для анализа данных
https://stepik.org/course/120014/ - платный курс
Но в сети также есть много бесплатных тьюториалов.

4) Машинное обучение
Нужно изучить не только алгоритмы машинного обучения, но и лучшие практики обучения моделей и внедрения их в реальные продукты.
https://stepik.org/course/4852/
https://stepik.org/course/8057/

Как обобщение всего пройденного с заходом на новый уровень - глубокое обучение - рекомендую школу глубокого обучения МФТИ:
https://stepik.org/course/135002/
Также мне очень нравится книга: Николенко, Кадурин, Архангельская "Глубокое обучение. Погружение в мир нейронных сетей". С нуля читать будет сложновато, а вот с некоторой базой - очень полезно.

5) Дальше нужно выбирать специализацию: структурированные данные, тексты, изображения или звук. Это особая история, выходящая за рамки базового учебного плана. Может быть, ещё поговорим об этом отдельно.
Как многие знают, NLP сейчас в тренде – особенно всё, что касается больших языковых моделей (large language models или LLM). Крупные компании обучают свои аналоги ChatGPT, а небольшие стартапы строят свои продукты на основе АПИ от OpenAI. Сделал для вас небольшую подборку полезных бесплатных ресурсов, которые помогут относительно быстро “вкатиться” в LLM, особенно если у вас уже есть некоторый опыт в ML и NLP. Всё на английском.

1. LLM best practices от Weights&Biases
https://wandb.ai/site/llm-whitepaper

2. Patterns for Building LLM-based Systems & Products
https://eugeneyan.com/writing/llm-patterns/

3. OpenAI best practices
https://platform.openai.com/docs/guides/gpt-best-practices

4. DeepLearning.AI short courses
https://www.deeplearning.ai/short-courses/

Изучение этих ресурсов должно дать понимание, как и для чего применять LLM, когда имеет смысл обучать свою модель, а когда достаточно существующих, и т.д. Это поможет вам не только в профессиональном развитии и работе над своими проектами, но и для прохождения собеседований, ведь, как я уже сказал, LLM – это горячая тема.

Безусловно, LLM – не абсолютная панацея. Бывает так, что применять их к конкретному запросу от вашего заказчика – не самая лучшая идея. Но и в этом случае полезно ориентироваться в теме, чтобы аргументированно обосновать свой отказ от этой технологии.
Всем привет! У нас в компании (напомню, это Центр искусственного интеллекта МТС) есть пара интересных NLP-вакансий. Наши рекрутеры попросили порекомендовать кого-то из знакомых, потому что от меня уже было несколько удачных рекомендаций. 💼🙌 Кажется, эти вакансии пока не опубликованы у нас на сайте.

Здесь в канале есть NLP-шники с опытом, многих из вас я знаю лично. Нужен мидл и мидл+/сеньор. Если хотите узнать подробности и (при совпадении опыта и интересов) получить мою рекомендацию, пишите в личку, контакты в описании канала. 🤝

А вот, кстати, список тех вакансий, что опубликованы:
https://mts.ai/ru/career/
Там довольно разнообразно. 👀
Завтра (суббота 23 сентября 2023) в 18:00 Мск буду делать доклад для нижегородского ODS-сообщества. Если хотите послушать о новейших паттернах и лучших практиках применения и обучения больших языковых моделей (large language models, LLM), приходите!

https://us02web.zoom.us/j/86771868132

Кроме моего, там будет ещё один доклад: Александр Пономаренко, научный сотрудник лаборатории Латас НИУ ВШЭ, расскажет про метод NeuralODE.
Лучшие практики LLM 20230923.pdf
1.9 MB
Спасибо всем, кто приходил вчера послушать мой доклад!
Пока ждём видеозапись (обещают через пару недель выложить на YouTube), предлагаю посмотреть мои слайды. Там много нейроартов)
Извините, что так много анонсов в последнее время и мало содержательных постов, обещаю исправиться! 😖

А пока - вот ещё один анонс. 🙈 Позвали выступить на Фенисте (Фестиваль наук, искусств и технологий Института прикладной физики РАН). Кто в Нижнем и есть время вечером, заходите, пообщаемся!
https://vk.com/wall-45512825_1430
Если вдруг вы, как я, холодным субботним вечером задались вопросом, а можно ли в Питоне построить простую диаграмму Венна, то вот ответ:

python
#!pip install matplotlib-venn

from matplotlib import pyplot as plt
from matplotlib_venn import venn3

ai = set(['AI1', 'AI2', 'AI3', 'NLP', 'NLP/ML', 'ML'])
nlp = set(['NLP', 'NLP/ML'])
ml = set(['NLP/ML', 'ML'])

diagram = venn3([ai, nlp, ml], ('AI', 'NLP', 'ML'))
for label in diagram.subset_labels:
if label is not None:
label.set_visible(False)

plt.show(out)


Кстати, посмотрите внимательно код, ниже будет мини-квиз)
У меня для вас снова вакансии в Центре искусственного интеллекта МТС! На этот раз - AI-тренер и Prompt-инженер. Приходите к нам работать! 😉🤝

Чем занимаются AI-тренеры и prompt-инженеры, в чём разница между ними? Обе эти профессии обычно не предполагают написание кода, но навыки программирования, конечно же, будут плюсом! 🙌 AI-тренеры занимаются созданием качественных обучающих примеров для ИИ. Когда ваша модель учится на различных инструкциях, написанных экспертами, AI-тренеры - это те самые эксперты. Prompt-инженеры - это мастера "общения" с уже обученными моделями. Они умеют правильно задавать нейросети вопросы, чтобы получать более полные и точные ответы. И AI-тренеры, и prompt-инженеры также занимаются оценкой качества ответов ИИ, анализируя сильные и слабые места и предлагая гипотезы по улучшению моделей. 💡

Исследователи и ML-инженеры занимаются обучением моделей и выводом их в продакшн, но без хороших данных и надёжных методов оценки нельзя получить сильную модель. Именно поэтому так важны крутые специалисты по созданию обучающих примеров, идеально подходящих под задачу. А когда сложно или невозможно автоматизировать оценку качества выполнения машиной той или иной задачи, нужны люди, способные объективно и грамотно оценивать ответы модели. 💪🦾
Недавно наткнулся на статью A Survey of Large Language Models. Это, по сути, введение в область LLM. Здесь чётко и по делу рассказывается о том, откуда взялись большие языковые модели, как они устроены, на чём их обучают и т.д. В статье обобщаются основные достижения последних лет в данной области и даются ссылки на 683 🤯 источника. Но при этом основной текст - меньше 70 страниц. Можно попробовать почитать на выходных, если интересна данная тема. 🧑‍💻🧠🏋️
Горжусь своей сестрой. Она год назад начала учиться с нуля на Java-разработчика, а сейчас уже приступила к своей первой оплачиваемой работе по этой специальности! 💪

Это было очень непросто, но если есть упорство и правильная мотивация, то обязательно всё получается. 😎
Хотите применить трансформеры к своей задаче, но не знаете, какую модель выбрать? 🤔 Информация о трансформерах для обработки русского языка разбросана по разным уголкам Интернета, поэтому я постарался собрать всё самое важное в своём списке русскоязычных трансформеров. 📃 Для каждой модели есть ссылки на код / статьи, важные архитектурные детали и рекомендации по применению. 🤓 Это первая версия списка, возможно, в нём есть недочёты - буду благодарен за обратную связь. 🙌
Вчера мне написал мой бывший студент, талантливый NLP-разработчик Павел. Он нарисовал суперполезную схему энкодера трансформера, причём более подробную, чем все схемы трансформера, что я видел. Ему удалось в одной диаграмме уместить все важные детали этой ключевой для NLP архитектуры. 👏 Мне кажется, получилось замечательно, поэтому я предложил ему поделиться схемой с сообществом, что он и сделал:
https://github.com/pa-shk/transformer-encoder

Почему это круто? Как известно, трансформеры перевернули мир NLP, их используют почти во всех сложных задачах по автоматической обработке текстов. Не случайно на большинстве собеседований по NLP спрашивают про устройство трансформера. Однако при всём изобилии материалов в Интернете именно такой подробной и информативной схемы мне ещё не попадалось - её можно увлечённо изучать, как карту сокровищ! 🤩 Надеюсь, вам тоже понравится (и тогда не забудьте поставить звёздочку репозиторию Павла).
Все же знают про "Дзен Питона"? (Если не знаете, выполните команду import this в питоновском интерпретаторе.)

А я вам сегодня принёс "Дзен Плюшевого Питона"!

===

Качественные данные важны не меньше, чем сильная модель.

Избегание ненужной сложности важно не меньше, чем улучшение метрики на 0.2%.

Читаемость кода важна не меньше, чем его эффективность.

Личные качества важны не меньше, чем техническая экспертиза.

Увидеть широкую картину важно не меньше, чем сосредоточиться на ТЗ.

Развиваться важно не меньше, чем закрывать "горящие" задачи.

Понятно объяснять важно не меньше, чем много знать.

===

Можно не воспринимать этот пост слишком серьёзно... Но без шуток, для меня эти принципы действительно много значат. Я стараюсь руководствоваться ими в своей работе. Хотя это, конечно, не исчерпывающий список! 😉
Сегодня делюсь с вами крутым списком ключевых статей по NLP, опубликованных _после_ BERT, по мнению Ильи Гусева. Кто не знает, это один из авторитетнейших экспертов в NLP. Илья составил этот список в ответ на вопрос пользователя в одном из профильных чатов. Не знаю, будет ли где-то ещё публиковать, но я уверен, что этот список точно заслуживает внимания, поэтому решил репостнуть здесь.

- GPT-2, Radford et al., Language Models are Unsupervised Multitask Learners, https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf
- GPT-3, Brown et al, Language Models are Few-Shot Learners, https://arxiv.org/abs/2005.14165
- LaBSE, Feng et al., Language-agnostic BERT Sentence Embedding, https://arxiv.org/abs/2007.01852
- CLIP, Radford et al., Learning Transferable Visual Models From Natural Language Supervision, https://arxiv.org/abs/2103.00020
- RoPE, Su et al., RoFormer: Enhanced Transformer with Rotary Position Embedding, https://arxiv.org/abs/2104.09864
- LoRA, Hu et al., LoRA: Low-Rank Adaptation of Large Language Models, https://arxiv.org/abs/2106.09685
- InstructGPT, Ouyang et al., Training language models to follow instructions with human feedback, https://arxiv.org/abs/2203.02155
- Scaling laws, Hoffmann et al., Training Compute-Optimal Large Language Models, https://arxiv.org/abs/2203.15556
- FlashAttention, Dao et al., FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness, https://arxiv.org/abs/2205.14135
- NLLB, NLLB team, No Language Left Behind: Scaling Human-Centered Machine Translation, https://arxiv.org/abs/2207.04672
- Q8, Dettmers et al., LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale, https://arxiv.org/abs/2208.07339
- Self-instruct, Wang et al., Self-Instruct: Aligning Language Models with Self-Generated Instructions, https://arxiv.org/abs/2212.10560
- Alpaca, Taori et al., Alpaca: A Strong, Replicable Instruction-Following Model, https://crfm.stanford.edu/2023/03/13/alpaca.html
- LLaMA, Touvron, et al., LLaMA: Open and Efficient Foundation Language Models, https://arxiv.org/abs/2302.13971

P.S. Коллеги из того чата также предложили добавить в список статью про Flan-T5, я согласен с этим: https://arxiv.org/abs/2210.11416
На этой неделе у меня произошло важное событие - перешёл на новую работу, ведущим ML-разработчиком в СберДевайсы. Буду помогать делать GigaChat умнее, в частности, техлидить одно из направлений, связанных с alignment. Пока что довольно много стресса, большой поток новой информации. Надеюсь, быстро освоюсь и оправдаю высокие ожидания коллег! 🙏
Для джунов, которые "никому не нужны"

Поделюсь мыслями на одну животрепещущую для многих тему. Есть такой тезис: джуны никому не нужны. Об этом уже не первый год говорят, кстати. Некоторые довольно авторитетные разработчики вообще не советуют новичкам сейчас начинать изучать технологии, потому что потом всё равно не получится найти работу. Без опыта не найти работу. А без работы не приобрести опыт. Тогда и смысла нет учиться. Так? Нет, не так.

Да, согласен, джуны сейчас на рынке, как правило, не востребованы. Джуновских вакансий (или стажёрских) - раз, два и обчёлся. Нужны мидлы. Мидловых вакансий просто море. Мидлов на рынке даже близко не достаточно. Но интересно получается:

- Мидлы нужны?
- Да.
- Их не хватает?
- Да.
- А откуда взяться новым?
- Вырастут из джунов.
- Но джуны же никому не нужны?..

Получается, нужно расти с нуля до мидла. Я понимаю, как это звучит. Но можно ли с нуля дорасти до мидла без работы в компаниях? Я считаю, что можно. Только поймите правильно. Не получая практический опыт решения сложных задач - нет, конечно, нельзя. Но не работая в компаниях или на коммерческих проектах - можно. Это, кстати, путь, которым шёл я сам.

Вы не станете мидлом сразу, минуя этап джуна, это невозможно. Просто расти от джуна до мидла придётся не на (основной, оплачиваемой) работе, а где-то ещё. Нужно будет очень серьёзно поучиться.

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

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

Можно учиться в вузе - это более долговременное вложение в своё будущее, но важно понимать, что не все программы одинаково хороши. Часто в них много лишнего и устаревшего. Тем не менее, (не только в топовых вузах) многие студенты устраиваются на первую работу на 2-3 курсах бакалавриата. Один мой знакомый уже после второго курса прошёл сразу на сеньорную ML-вакансию, а потом быстро вырос до тимлида.

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

Таким образом, если хочется с нуля стать разработчиком, сейчас, скорее всего, вам придётся расти не до джуна, а до мидла. Придётся накопить такой опыт, который работодатель просто не сможет игнорировать, даже несмотря на отсутствие формальной работы по специальности в вашем резюме. Но как получить этот самый опыт, если не на оплачиваемой работе по специальности? Пути известны, не скажу тут ничего нового: через пет-проекты, build your own X, изучение опен-сорса и вклад в него, неоплачиваемые стажировки, общение с более опытными людьми, чтение профильных чатов, соревнования и хакатоны.

По сути, вы будете заниматься примерно тем же, что и на "настоящей" работе по специальности: изучать новые инструменты, решать сложные задачи, (в отчаянии) дебажить код и т.д. Если вам это сейчас кажется неинтересным, скучным, слишком сложным, - действительно, тогда не стоит и начинать, наверное. Ваша будущая работа из всякого такого и будет состоять. Но если вас это не пугает и вы готовы испытать себя, то жму вам руку и от всего сердца желаю удачи!
Возможно, некоторые из вас уже видели этот пост Миланы, но я всё равно хочу им поделиться) Тем более, что тоже немного поучаствовал. Она собрала список актуальных и современных вопросов для собесов по NLP. Я тоже несколько штук закинул, которые реально задавал на собесах не раз.

https://news.1rj.ru/str/grokaem_seby/271

Именно современных списков вопросов по NLP в сети не так много, потому что область ну очень активно развивается. Тем и интересна эта подборка.

Если хотите, могу написать, как бы я ответил / какой ответ бы ожидал на какие-то из этих вопросов. Кидайте в комментарии наиболее интересные для вас. Только не предлагайте отвечать на все 100, это слишком долго 😅