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

Рекламу не размещаю. По всем остальным вопросам пишите на @AlexeyMalafeev
Download Telegram
Вы могли заметить, что я сменил аватарку канала. Предыдущая была хоть и довольно милая, но обычная стоковая фотка, нагугленная по запросу "плюшевый питон". Новая же аватарка - не только эксклюзив, но ещё и с историей. Иллюстрацию специально для моего канала нарисовала акварелью Наташа Соло, руководитель нижегородского комикс-клуба "Горький комикс". Ребята выпустили уже семь замечательных сборников авторских арт-новелл, теперь на очереди восьмой выпуск. Он называется "Эпоха открытий" и посвящён стимпанку. Когда я полуслучайно узнал об этом проекте, не смог его не поддержать на краудфандинговой платформе. Во-первых, люблю комиксы, во-вторых, неравнодушен к стимпанку, ну а в-третьих, всегда радуют такие крутые инициативы в родном Нижнем Новгороде. Кстати, средства на печать сборника были благополучно собраны - план даже был перевыполнен почти в три раза. Если вам интересно узнать о проекте более подробно, делюсь ссылкой: https://planeta.ru/campaigns/epoha_otkrytyi. В сборнике будет страница, посвящённая каналу "Плюшевый Питон", и я с нетерпением жду, когда получу свой экземпляр. Такой вот немного неожиданный коллаб получился с нижегородским комикс-сообществом.
Одна из читательниц блога задала классный вопрос в комментариях (кстати, напоминаю, что вы всегда можете задавать мне интересующие вас вопросы под постами или просто писать мне в личку, контакты есть в описании канала). Я подумал, что на этот вопрос будет полезно ответить развёрнуто, в формате отдельного поста, потому что ответ затронет важную для меня тему, на которую я всё равно хотел в ближайшее время написать.

Итак, меня спросили: "расскажите, пожалуйста, про языки, которые используются в NLP-разработке и ML. Что встречалось на Ваших местах работы или у Ваших знакомых? Большинство проектов, которые я находила на эту тематику, — на python, однако кажется, что знание и умение использовать один язык для этих целей — не самое эффективное и правильное решение. Есть же языки побыстрее всё-таки"

---
Коротенькая ремарка. Некоторые пишут "на Python", другие "на Пайтоне", третьи "на Питоне". Мне привычнее и больше нравится "на Питоне", простите, если кого-то это раздражает)
---

Часть 1. Медленно, но быстро
#python #ml

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

Таким образом, важно учитывать не только быстродействие самого языка, но и скорость разработки на нём. Питон довольно лаконичен, его синтаксис не слишком перегружен скобками и прочими знаками препинания, а эксперты в языке всячески поощряют читаемость кода (например, об этом пишут автор книги "Effective Python" Brett Slatkin и автор книги "Robust Python" Patrick Viafore). Плюс отличный набор готовых библиотек и инструментов - вот и секрет его успеха. Раньше Питон называли "вторым лучшим языком для чего угодно", но сейчас по популярности этот язык занимает первое место в мире. Да и с "медленностью" Питона не всё так однозначно. Версия 3.10 значительно быстрее, чем 3.9, а 3.11 сильно обгоняет 3.10. Посмотрим, что будет с 3.12 и дальше. К тому же, активно развиваются всякие специальные инструменты для ускорения кода на Питоне.
Часть 2. Специализируй это
#career

Благодаря популярной сейчас архитектуре приложений - микросервисной - компоненты одного приложения вообще могут быть реализованы на разных языках программирования. Поэтому фронтенд может быть написан, например, на React, бэкенд на .Net, но приложение всё равно может использовать ML-сервисы, написанные на Питоне. Хорошо, но может быть, одному и тому же разработчику придётся заниматься и ML, и бэкенд-разработкой, и тогда не получится использовать только Питон? Выходит, нужно прямо сейчас бежать изучать и другие языки?

Во-первых, Питон сейчас востребован и в бэкенд-разработке. Во-вторых, круг обязанностей сильно зависит от специфики компании. Когда в компании мало разработчиков, действительно, одному и тому же сотруднику часто приходится заниматься всем понемногу: и модели обучать, и бэкенд писать, и покосившийся фронтенд поправлять, и инфраструктуру налаживать. Особенно это характерно для маленьких стартапов с числом сотрудников менее 20 человек. Я с уважением отношусь к таким разносторонним людям, но в больших компаниях обычно востребованы более узкие специалисты. Разработчик из стартапа просто не пройдёт техническое собеседование на позицию ML-иженера в крупной компании. Его будут глубоко и подробно спрашивать по ML, а у него не было возможности хорошо погрузиться в эту область из-за того, что приходилось работать в режиме "всё, везде и сразу".

Именно поэтому я рекомендую начинающим пробовать разные области разработки, но не слишком задерживаться в роли "мастера на все руки". Важно в какой-то момент остановиться и выбрать что-то одно, что нравится больше всего, и большую часть усилий направить именно на это. Мир больше ценит и награждает узких специалистов, чем умеющих всё по чуть-чуть. Из-за стремительного развития технологий прошли времена универсальных "программистов". Сейчас невозможно быть полноценным экспертом одновременно в бэкенде, фронтенде, машинном обучении и девопсе. Поэтому зачастую крутые компании ищут разработчиков под конкретные, узкие задачи. Это может не всем нравиться, но ситуация на рынке сейчас такова: можно либо пойти в маленький стартап и заниматься там за небольшие деньги всем понемногу (как по мне, это дикий стресс), либо встать на путь экспертности в относительно узкой области и находить более оплачиваемые роли в престижных компаниях. Поэтому если хотите мой совет, вот он: найдите пересечение между тем, что вам нравится, что у вас получается и что востребовано, - и вкладывайтесь в своё развитие именно в этом. Легко не будет, но оно того стоит.
А вы знали про confident learning?
#ml

"Уверенное обучение" в контексте machine learning - что бы это могло значить? 🤔 Почти все алгоритмы машинного обучения основаны на предположении, что обучающие данные чисты и заслуживают доверия. Однако на самом деле в них часто закрадываются ошибки разметки, которые плохо влияют на обучение моделей. Confident learning - это относительно новый подход к обучению моделей в русле data-centric ML. Он объединяет в себе различные практики и трюки для обнаружения ошибок разметки и эффективного обучения моделей несмотря на присутствие в данных таких ошибок.

Зачем знать про этот подход? Его можно применять в почти любых задачах машинного обучения с учителем (мультикласс- и мультилейбл-классификация, регрессия) в NLP, CV, работе со структурированными данными. Подход автоматически определяет ошибки в разметке, не требуя подбора гиперпараметров (использует кросс-валидацию для предсказания вероятностей в режиме out-of-sample). После этого можно обучить модель только на данных, не содержащих ошибок разметки - как правило, такая модель будет более точной. 🤓

Confident learning хорошо обоснован теоретически, также есть реализация его методов в библиотеке cleanlab со свободной лицензией. Статья, описывающая подход, имеет 400+ цитирований с 2021 года, а репозиторий cleanlab - 6,2К звёзд. При этом подход не то чтобы очень широко известен. Вы можете применить confident learning в своих рабочих задачах (будем честны, как часто мы видим идеально размеченные датасеты?), а также блеснуть эрудицией на собеседованиях.

Например, с cleanlab можно одной строчкой кода запустить диагностику датасета и получить отчёт о возможных проблемах:

from cleanlab.dataset import health_summary

health_summary(labels, pred_probs)

Ещё один короткий пример для классификации текстов:

cl = CleanLearning(model, cv_n_folds=cv_n_folds)
label_issues = cl.find_label_issues(
X=train_texts,
labels=train_labels,
)
cl.fit(
X=train_texts,
labels=train_labels,
label_issues=cl.get_label_issues(),
)

При обучении новой модели на очищенных от ошибок данных будьте внимательны к тому, как вы оцениваете итоговый результат. Если оценивать на тестовом сете, содержащем ошибки разметки, то эффект от confident learning не будет заметен. Авторы библиотеки дают рекомендации, как правильно применять этот подход, в понятных тьюториалах и FAQ.

Для тех, кто дочитал до конца 🙏, небольшой бонус - курс 2023 года от MIT по датацентричному ИИ с большим количеством лабораторных работ. Очень рекомендую!
Не могу удержаться, чтобы не похвастаться подарком от читательницы канала)
Сегодня выступил перед старшеклассниками на летней олимпиадной школе. Рассказывал про ИИ и почему он не отберёт у них работу в будущем. Или всё-таки отберёт? 🤔 Судя по моему выражению лица на второй фотке, всё не так однозначно 😁

Ребята большие молодцы, с интересом слушали и задавали много классных вопросов. Мой самый любимый - "А зачем тогда нужны люди?" 🙃
Не так давно составлял индивидуальный учебный план для одного из подписчиков, который хотел перейти в сферу 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-разработчика, а сейчас уже приступила к своей первой оплачиваемой работе по этой специальности! 💪

Это было очень непросто, но если есть упорство и правильная мотивация, то обязательно всё получается. 😎
Хотите применить трансформеры к своей задаче, но не знаете, какую модель выбрать? 🤔 Информация о трансформерах для обработки русского языка разбросана по разным уголкам Интернета, поэтому я постарался собрать всё самое важное в своём списке русскоязычных трансформеров. 📃 Для каждой модели есть ссылки на код / статьи, важные архитектурные детали и рекомендации по применению. 🤓 Это первая версия списка, возможно, в нём есть недочёты - буду благодарен за обратную связь. 🙌