Pull to refresh
235
0
Сергей Аверкиев@averkij

ML Engineer

Send message

DRAGON: динамический бенчмарк для оценки RAG-систем на русском языке

Level of difficultyMedium
Reading time12 min
Reach and readers3.3K

С появлением больших языковых моделей (LLM) стало казаться, что они умеют всё: от генерации кода до написания статей в научные журналы. Но, как только дело доходит до фактов, особенно актуальных и узкоспециализированных, начинаются проблемы. LLM — это не поисковики и не базы данных, знания у них статичны: что было в обучающей выборке, то модель и «знает» (да и то не всегда твёрдо). Постоянно дообучать её на актуальных данных — уже вызов. Тут на сцену выходят RAG-системы (Retrieval-Augmented Generation).

Если коротко, RAG — это способ «подкормить» LLM свежими данными: перед генерацией ответа модель получает не только сам вопрос, но и релевантные тексты, найденные внешней поисковой системе или во внутренней базе знаний. Идея звучит просто, но как понять, насколько хорошо это работает? Какие документы действительно помогли модели, а какие запутали её ещё больше? А главное — как сравнить разные RAG-системы между собой по-честному?

Оценка таких систем — нетривиальная задача. С одной стороны, нужно учитывать и качество извлечённых документов, и финальный ответ модели. С другой — важно избегать контаминации: когда модель «угадывает» правильный ответ просто потому, что уже видела его в процессе обучения. Это особенно актуально при использовании статических наборов данных вроде Natural Questions или HotpotQA: они давно «протекли» в открытые датасеты, в том числе для обучения популярных LLM.

Читать далее

Как Cursor устроен изнутри. Часть 2

Level of difficultyMedium
Reading time11 min
Reach and readers5.5K

Полная версия платной статьи, публикуется с разрешения автора. Первая часть здесь.

В этой части поговорим о сложностях, с которыми столкнулась команда при лавинообразном росте нагрузки, как разваливался бекенд, а архитекторы из AWS пожимали плечами.

5. Инженерные вызовы

Рост нагрузки и его влияние на выбор технологий

Тип технологических решений, которые принимает команда, диктуется в первую очередь паттернами чтения и записи (Cursor всю дорогу синхронизирует струкутру проектов от миллионов пользователей без перерыва, об этом говорили в первой части. Прим. пер.):

Работа с кодом: транзакции с низкой задержкой. Для фичей, связанных с кодом (дополнения по tab'у, индексация, пересчет хеш-деревьев), рабочая нагрузка представляет собой череду чтений и записи. Задержка для этих операций должна быть как можно ниже. Изначально Cursor использовал Pinecone для семантической индексации и поиска, но затем перешел на Turbopuffer.

Также важно иметь серверы поближе к пользователю. Рабочие нагрузки распределены по нескольким регионам, таким как западное и восточное побережье США, Великобритания, Европа, Япония.

Читать далее

Как Cursor устроен изнутри. Часть 1

Level of difficultyMedium
Reading time10 min
Reach and readers25K

Вторая часть статьи здесь

Всего за год нагрузка на Cursor выросла в 100 раз: более 1 млн запросов в секунду и миллиарды автодополнений кода каждый день. Подробный разбор архитектуры — вместе с сооснователем Суалехом Асифом.

Cursor — это IDE с кодогенерацией на AI-агентах, которая сейчас пользуется наибольшей популярностью среди разработчиков. В прошлогоднем опросе, Cursor был самым частым ответом на вопрос «Назовите вашу любимую IDE с генеративными функциями, помогающими в работе».

Стартап, стоящий за Cursor — Anysphere, был основан в 2022 году, а в марте 2023 года запустил Cursor. Недавно Anysphere сообщила, что привлекла $900 млн, при оценке компании в $9.9B. Годовой доход (автор имеет в виду годовой повторяющийся доход, Annual Recurring Revenue, ARR. Прим. пер.) уже превысил $500M. Ни одна другая компания в сфере инструментов для разработчиков, которую я знаю, не достигала этого рубежа в течение первых 2 лет после запуска первого продукта. Поспособствовало этому и то, что Cursor используется более чем половиной из 500 крупнейших технологических компаний из списка Fortune 500.

Я встретился с сооснователем Cursor, Суалехом Асифом, чтобы узнать, как работает Cursor и как команда этот инструмент создает. Обсудили следующие темы:

Технологический стек. TypeScript, Rust и куча облачных провайдеров — Turbopuffer, Datadog, PagerDuty и другие.

Как работает автодополнение. Устройство low-latency движка для передачи зашифрованного контекста на сервер для инференса.

Читать далее

В гостях у классиков. Модели для генерации фото с русскими писателями (FLUX + LoRA)

Reading time4 min
Reach and readers4.7K

В ходе новогодних экспериментов с дообучением FLUX, у меня появилось несколько моделей которыми я хотел бы поделиться с сообществом и рассказать про их особенности. Про то, как сделать такую модель самому, я написал в предыдущей статье.

Дообучать можно на чем угодно, а не только на лицах. Можете взять несколько картинок (хватит 15-30, если они не очень разнообразны) одного стиля или класса с ресурса типа Pinterest или просто нагуглить.

Запускать будем через ComfyUI. Это приложение само по себе очень гибкое и мощное (интерфейс видно на картинке), так что, если поразбираетесь в нём, то сможете автоматизировать трудоёмкие процессы при работе с нейросетями. Например, оцветнение старых изображений с последующим их масштабированием.

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

Читать далее

Создаем воспоминания. Осваиваем FLUX, LoRA и ComfyUI

Reading time7 min
Reach and readers19K

Разбираюсь на праздниках с дообучением моделей для генерации изображений. Было интересно, насколько сложно дообучить модель для генерации изображений по тексту в домашних условиях, сколько нужно обучающих данных и как затем генерировать качественные фотографии и иллюстрации.

Чтобы через время не забыть про особенности процесса и как-то его зафиксировать, решил поделиться наработками. Под катом подробности и еще немного фотографий АБССС.

Читать

Язык твой — друг твой. Дообучаем языковые модели, собираем корпуса, делаем книги на малоресурсных языках

Level of difficultyMedium
Reading time14 min
Reach and readers11K

📌 градиент обреченный

Всем привет. Хочу поделиться с сообществом небольшим опытом и наработками для исследования и развития языков, в особенности малых. Для большинства таких языков нет ни систем машинного перевода, ни виртуальных ассистентов, ни других языковых моделей. Основная проблема тут в недостатке данных и отсутствии большого интереса у крупных компаний в их развитии. Однако есть достаточно большое число людей, которым дорог их язык, и которые прикладывают усилия по их сохранению и развитию. Предлагаю обсудить это и познакомиться с инструментами, которые помогут не только собирать данные, но и делать на их основе полезные вещи, типа паралельных книг для изучения языка и систем машинного перевода.

Мы научимся:

1. Дообучать мультиязычные языковые модели, переводящие текст в векторное представление (эмбеддинги).

2. Использовать их для выравнивания текстов библиотекой lingtrain-aligner, извлекая из текстов параллельные корпуса.

3. Загружать датасеты и модели на HuggingFace, чтобы это было доступно всем.

4. Создавать из выравнивания параллельные книги для изучения языков.

5. Начнем собирать датасет инструкций на малых языках, чтобы языковые модели и виртуальные смогли понимать и общаться на чувашском, якутском, башкирском и других языках.

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

Читать далее

GigaChat расправляет плечи. Новая версия нейросетевой модели от Сбера

Level of difficultyMedium
Reading time8 min
Reach and readers29K

Обращаясь к мастерам научной фантастики, всё чаще удивляешься их проницательности. В рассказе Артура Кларка «Девять миллиардов имён Бога» компьютер воплотил пророчество тибетских монахов о наступлении конца света, а в повести Ника Горькавого «Астровитянка» ИИ был единственным другом маленькой девочки в течение десятка лет и помог ей выжить на чужой планете. Многие люди, включая специалистов, верят как в позитивный, так и в негативный путь развития искусственного интеллекта. К счастью, подобные системы являются лишь инструментом, который можно использовать себе во благо, или оставаться в стороне от этого. Уверен, что в течение нескольких лет ажиотаж вокруг нейросетей постепенно спадёт до такой степени, что мы будем относиться к ним как к ещё одному подарку технического прогресса.

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

Сначала освежим в памяти, что такое языковые модели и как они развивались до сегодняшних дней.

Читать далее

Сбер открывает доступ к нейросетевой модели ruGPT-3.5

Level of difficultyEasy
Reading time3 min
Reach and readers50K

? Upd. Добавили пример запуска в Colab'е.

Друзья, свершилось. Сегодня мы рады сообщить вам о релизе в открытый доступ нейросетевой модели, которая лежит в основе сервиса GigaChat.

Про то, что такое GigaChat и как мы его обучаем, вы можете прочитать в нашей предыдущей статье. Скажу лишь, что главной его частью, ядром, порождающим креативный ответ на ваш запрос, является языковая модель обученная на огромном количестве разнообразных текстов — сотен тысяч книг, статей, программного кода и т.д. Эта часть (pretrain) затем дообучается на инструкциях, чтобы лучше соответствовать заданной форме ответа. Обучение такого претрейна занимает около 99% от всего цикла обучения и требует значительного количества ресурсов, которыми обычно обладают только крупные компании.

Этот претрейн, названный ruGPT-3.5, мы выкладываем на Hugging Face под лицензией MIT, которая является открытой и позволяет использовать модель в коммерческих целях. Поговорим о модели подробнее.

Читать далее

Это не чат, это GigaChat. Русскоязычная ChatGPT от Сбера

Level of difficultyMedium
Reading time14 min
Reach and readers129K

Хайп вокруг нейросетей, выровненных при помощи инструкций и человеческой оценки (известных в народе под единым брендом «ChatGPT»), трудно не заметить. Люди разных профессий и возрастов дивятся примерами нейросетевых генераций, используют ChatGPT для создания контента и рассуждают на темы сознания, а также повсеместного отнимания нейросетями рабочих мест. Отдадим должное качеству продукта от OpenAI — так и подмывает использовать эту технологию по любому поводу — «напиши статью», «исправь код», «дай совет по общению с девушками».

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

Мы с радостью хотим поделиться с сообществом своим опытом по созданию подобной модели, включая технические детали, а также дать возможность попробовать её, в том числе через API. Итак, «Салют, GigaChat! Как приручить дракона?»

Читать далее

Lingtrain. Приложение для создания мультиязычных книг и параллельных корпусов

Reading time13 min
Reach and readers14K

📌 градиент обреченный

Хочу показать, как создать мультиязычный параллельный корпус и книги при помощи моего пет-проекта.

Для примера возьмем 10 редакций "Мастера и Маргариты" Михаила Булгакова (ru, uk, by, en, fr, it, es, de, hu, zh). Сначала выровняем девять переводов с оригиналом, а затем выровняем все вместе. Получим параллельный корпус на 10 языках и много красивых книг. Приступим.

Код я оформил в виде веб-приложения, основная логика которого выполняется при помощи библиотеки lingtrain-aligner. Выравнивать можно прямиком из кода на python, либо через UI. В приложении будет удобней разрешать конфликты и там есть редактор, позволяющий корректировать получающийся корпус плюс дополнительные опции по верстке. Код у проекта открытый, можно посмотреть как все работает внутри. Приступим.

Читать далее

Распознавание речи, генерация субтитров и изучение языков при помощи Whisper

Reading time12 min
Reach and readers71K

⚡ Градиент обреченный

Есть ряд платных решений по переводу речи в текст (Automatic Speech Recognition). Сравнительно малыми усилиями можно сделать свое решение, — обучить на целевых данных end2end модель (например, из фреймворка NeMo от NVIDIA) или гибридную модель типа kaldi. Сверху понадобится добавить расстановку пунктуации и денормализацию для улучшения читаемости ("где мои семнадцать лет" → "Где мои 17 лет?").

Модель заслуживает внимания так как умеет делать очень много "из коробки". Давайте разберемся подробнее как она устроена и научимся ей пользоваться.

Недавно в открытый доступ была выложена мультиязычная модель whisper от OpenAI. Попробовал ее large вариант на нескольких языках и расшифровал 30 выпусков "Своей игры". Результат понравился, но есть нюансы. Модель транскрибирует тексты вместе с пунктуацией и капитализацией, расставляет временные метки, умеет генерировать субтитры и определять язык. Языков в обучающем датасете порядка ста. Чтобы прикинуть по качеству, нужно посмотреть на их распределение — данных на 100 часов и более было лишь для 30 языков, более 1000 ч. — для 16, ~10 000 часов — у 5 языков, включая русский.

Читать далее

Инфоинженер. Как я делал курс по NLP для МГТУ им. Баумана

Reading time5 min
Reach and readers6.6K

Пандемия. Осень. Друг и бывший одногруппник, работающий на кафедре прикладной математики, попросил меня сделать курс по обработке естественного языка для МГТУ имени Баумана. Курс подразумевался быть коротким, около 10 занятий. Аудитория — студенты с первого по четвертый курс.

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

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

Читать далее

Я уеду жить в Лейнвуд. Создаем новые слова при помощи GPT

Reading time4 min
Reach and readers6.2K

Предлагаю немного поразвлечься и научиться придумывать новые слова, которые звучат совсем как настоящие (прям как товары в Икее). Для начала вот вам десяток несуществующих городов:

Лумберг, Сеф, Хирнов, Бинли, Лусский, Ноловорск, Сант-Гумит, Хойден, Голтон и Оголенда

И женских имен:

Инела, Каисья, Ганнора, Целия, Тарисана, Лелена, Феомина, Олиcc, Нулина и Рослиба

Для запуска генерации нам не понадобится технических навыков, хотя технология, стоящая за ней, сейчас является очень перспективной и многофункциональной. Это генеративная нейронная сеть, способная решать множество задач по обработке естествнного языка (NLP). Это такие задачи как суммаризация (сделать из большого текста его резюме), понимание текста (NLU), вопросно-ответные системы, генерация (статей, кода или даже стихов) и другие. Тема эта очень глубокая, поэтому далее я дам пару ссылок для любителей копнуть поглубже. А те, кто хочет "только спросить", может сразу приступить к созданию слов.

Генерировать будем скриптом makemore от Андрея Карпати (недавно писал про скрипт в канале градиент обреченный), который он выложил пару недель назад. Андрей является известным исследователем в мире ИИ и периодически радует народ такими вот игрушками, можно полазить по его репозиторию, там еще много интересного.

Запустим скрипт.

Читать далее

DIY. Книги для всех, даром

Reading time7 min
Reach and readers37K

Lingtrain cover


⚡ Градиент обреченный


Upd. 11.06.2022 Многие заинтересовались генерацией изображений нейросетями. Вот Colab (интерактивная среда для запуска кода) для рисования картинок в стиле pixel art по текстовому описанию. Просто запускайте, ближе к концу увидете ячейку для ввода текста. Примеры картинок из Colab'а в комментариях.


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


Сегодня же я расскажу как при помощи него создать полноценную параллельную книгу на разных языках. Книга будет красиво сверстана в PDF, иметь содержание, обложку и две выровненные по смыслу колонки текста. Такие книги служат отличным подспорьем при изучении иностранного языка. Найти их, однако, не так просто, и скорее всего это будут книги для детей или избранная классика. Полный пример готовой книги можно посмотреть здесь. Под капотом у приложения NLP модели, поддерживаемых языков более ста.


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

Сделать книжку

Нюансы распознавания речи. Восстанавливаем пунктуацию, числа и заглавные буквы

Reading time6 min
Reach and readers8.6K


градиент обреченный


В задачах распознаваниях речи при переводе аудио в текст есть дополнительные этапы, делающие этот текст более человекочитаемым. Например, предложение "привет хабр сегодня мы сделаем двадцать шесть моделей по распознаванию голоса" будет выглядеть лучше в таком виде: "Привет, хабр. Сегодня мы сделаем 26 моделей по распознаванию голоса". Другими словами, сегодня мы поговорим про то, как автоматически восстановить пунктуацию и капитализацию (сделать нужные буквы заглавными). Также упомянем денормализацию текста (при этом числа обретут свою цифровую форму обратно, эту задачу еще называют inverse text normalization).


Пунктуация и капитализация

Читать дальше →

How to create bilingual books. Part 2. Lingtrain Alignment Studio

Reading time6 min
Reach and readers4.5K

title


How to make a parallel book for language learning. Part 1. Python and Colab version


This is a second article on making parallel books. Today we will use the more advanced tool which will bring rich UI functionality. Lingtrain Alignment Studio is a web application written on Vue and Python. The main purpose of it is to extract the parallel corpora from two raw texts and make a bilingual (or even multilingual) parallel book. This is an open-source project and I will be glad to hear all of your bright ideas. Links to the sources and our community contacts can be found below. Los geht's!


Setup


The app is packed into the docker container. It's a simple technology to deploy your stuff anywhere from the server to your local machine. It's available across all the operating systems. So at first, you need a docker installed locally. Then you need to run two simple commands. The first will download the container:


docker pull lingtrain/aligner:v4

And the second one will run the application:


docker run -v C:\app\data:/app/data -v C:\app\img:/app/static/img -p 80:80 lingtrain/aligner:v4

C:\app\data and C:\app\img — your local folders.


The app will be available on the 80th port. Let's open the localhost page in your favorite browser.


Lingtrain app 1


We will make three simple steps: Load, Align, Create

Continue reading

Популярная лингвистика. Книги про языки, которые мне нравятся

Reading time20 min
Reach and readers42K

cover


Наш телеграм канал


14.11.2021 — Upd 7. В японский язык добавил Путь бесхвостой птички Адиля Талышханова (Shinrin), в английский — The Mother Tongue — English And How It Got That Way Билла Брайсона (alexey-m-ukolov) и Приключения английского языка Мелвина Брэгга, Введение в прикладную лингвистику Анатолия Баранова к серьезной лингвистике (darkTux)


Upd 6. Добавил Атомы языка Марка Бейкера (9_pm) и The Language Instinct (Язык как инстинкт) Стивена Пинкера (alex518 и snvtr). Проставил у рекомендаций значок ?


Upd 5. Добавил раздел 'Лингвистические задачи'. Лингвистические задачи Зализняка, "Три склянки пополудни" Бердичевского и Пиперски (книга только вышла!) (middle), и еще одни "Лингвистические задачи" от коллектива авторов, включая Алпатова и Зализняка (AlexKarpan и DinaPy). Спасибо всем, кто рекомендует!


Upd 4. Добавил раздел 'Полевая лингвистика'. Не спи — кругом змеи! Дэниела Эверетта (9_pm), добавил "Слово о словах" Льва Успенского (Temmokan и saboteur_kiev)


Upd 3. Добавил раздел 'Серьезно о лингвистике'. Человек говорящий. Эволюция и язык Хомского и Бервика (alex518) и Значение и структура языка Чейфа Л. Уоллеса (darkTux)


Upd 2. Добавил "The Unfolding of Language" Гая Дойчера и "Our Magnificent Bastard Tongue" Джона Макуортера (etoropov)


Upd 1. Добавил раздел 'Грамотность и стиль'. "Слово живое и мертвое" Норы Галь (darkTux) и "The Sense of Style" Стивена Пинкера (9_pm)


Количество атомов в наблюдаемой Вселенной — где-то 10^80, число Дэвидов на картинке к статье — 2. Количество книг в этой подборке находится между этими ориентирами и будет пополняться (всегда рад рекомендациям). Что же это за книги?

Читать дальше →

Lingtrain Aligner. How to make parallel books for language learning. Part 1. Python and Colab version

Reading time8 min
Reach and readers5.2K

title


If you're interested in learning new languages or teaching them, then you probably know such a way as parallel reading. It helps to immerse yourself in the context, increases the vocabulary, and allows you to enjoy the learning process. When it comes to reading, you most likely want to choose your favorite author, theme, or something familiar and this is often impossible if no one has published such a variant of a parallel book. It's becoming even worse when you're learning some cool language like Hungarian or Japanese.


Today we are taking a big step forward toward breaking this situation.


We will use the lingtrain_aligner tool. It's an open-source project on Python which aims to help all the people eager to learn foreign languages. It's a part of the Lingtrain project, you can follow us on Telegram, Facebook and Instagram. Let's start!


Find the texts


At first, we should find two texts we want to align. Let's take two editions of "To Kill a Mockingbird" by Harper Lee, in Russian and the original one.

Read more →

Выравнивание параллельных текстов для малоресурсных языков

Reading time8 min
Reach and readers14K

Сложный был год: налоги, катастрофы, бандитизм и стремительное исчезновение малых языков. С последним мириться было нельзя...


Upd. 04.12.2021 — Наш телеграм канал


На территории России проживает большое количество народов, говорящих более чем на 270 языках. Около 150 языков насчитывает менее 1 тысячи носителей, а за последние 20 лет 7 языков уже исчезло.


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


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


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


I. Извлекаем параллельный корпус


Для выравнивания двух текстов я написал на python'е библиотеку lingtrain_aligner. Код у нее открыт. Она использует ряд предобученных моделей, можно подключать и свои. Одной из самых удачных мультиязыковых моделей сейчас является LaBSE. Она обучалась на 109 языках. Так как соотношение текстов смещено в сторону популярных языков, то для них качество эмбеддингов (эмбеддингом называют вектор чисел применительно к данным, которые он описывает) будет лучше.


Colab


Попробовать извлечь корпус на нужном языке можно в этом Colab'e. Дальше пройдемся по шагам более подробно.


Установка


Установим библиотеку командой


pip install lingtrain_aligner
Читать дальше

Сделай себе книгу для изучения языка с нейросетевыми иллюстрациями

Reading time12 min
Reach and readers12K

Lingtrain books


Upd. 04.12.2021. Наш телеграм канал


Upd 10.09.2021. Добавил ещё одну подборку Colab'ов для генерации картинок


Upd 21.09.2021. Добавил пару иллюстраций к Дюне для примера


Статья будет интересна всем любителям программирования, иностранных языков и красивых книг. Сначала мы сделаем параллельную книгу, имея на руках два обычных текста. Затем мы проиллюстрируем ее картинками в стиле pixel art на основе лишь текстовых подсказок.


Книгу можно сделать более чем на сотне языков с восстановлением и подсветкой связей между предложениями:


Lingtrain


А теперь давайте сделаем такую книгу сами.

Смотреть демо
1

Information

Rating
5,507-th
Location
Москва, Москва и Московская обл., Россия
Works in
Date of birth
Registered
Activity

Specialization

Фулстек разработчик, ML разработчик
Ведущий
From 600,000 ₽