Обновить
512K+

Python *

Высокоуровневый язык программирования

361,56
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Jev за 25 строк на Python

Время на прочтение2 мин
Охват и читатели13K

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

Читать далее

ASR для языка, которого Whisper почти не знает: LoRA за полтора часа — и почему полдела сделал декодер

Уровень сложностиПростой
Время на прочтение16 мин
Охват и читатели7.7K

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

Итоговая таблица, чтобы сразу было видно, о каких величинах речь. Один и тот же отложенный тест, один и тот же скоринг, 893 клипа / 1.86 ч, два диктора, которых модель не слышала:

Читать далее

Ни слова по-китайски

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели7.9K

Иногда LLMки путаются в языке, на котором они отвечают. Ты задаёшь вопрос на английском, а тебе в ответ прилетает простыня на китайском.
Почему бы не помочь им забыть про языки, в которых мы не заинтересованы?

Читать далее

Бот ищет зоны спроса и предложения и присылает касание в Telegram

Время на прочтение8 мин
Охват и читатели6K

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

Бот получает свечи бессрочных контрактов, отмечает зоны на 15-минутном графике и ждёт возврата цены. Если на закрытой пятиминутной свече появляется пинбар с касанием зоны, бот отправляет график и ориентиры по цене.

Ниже разберу правила отбора и несколько ошибок, которые всплыли при попытке связать поиск зон, график и уведомление.

Код прикладываю на github - можете пользоваться и модернизировать!

Читать далее

Практический GitHub Actions: полноценный CI/CD для FastAPI + PostgreSQL

Уровень сложностиСложный
Время на прочтение14 мин
Охват и читатели8.7K

В этой статье будет разбираться написание GitHub Actions пайплайна на основе моего стенда cicd-practice на GitHub (подробно все можно посмотреть там). Стенд состоит из FastAPI (веб API на Python) и PostgreSQL. Все сервисы разворачиваются в Docker с помощью Docker Compose (микросервисы) на VDS от Timeweb Cloud.

Для части приложения я также написал около 90 Pytest тестов, которые будут воспроизводиться в пайплайне, но об этом позже.

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

Read more 📖

−1000% занятости: как я нашёл дыры в собственном опубликованном датасете

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели7.8K

Мы выложили открытый датасет по загруженности парковок, а потом увидели в нём процент занятости со значением −1000. Дальше — расследование, в котором каждая следующая гипотеза оказывалась неверной: почему пересчитать «правильно» было бы худшим решением, как достать из данных знаменатель, которого в них нет, и почему проверка, честно срабатывавшая полтора года, никого ни разу не предупредила.

Читать далее

Генерация энциклопедии фазовых равновесий

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели7.9K

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

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

Я проверил – в базе оказалось более 4000 двухкомпонентных систем. Написать самостоятельно комментарии к каждой из них не в моих силах. Естественно, первой и единственной идеей, пришедшей на ум, были нейросети.

Нужно было выбрать вариант, который:

·      Был с минимальными финансовыми затратами;

·      Не занял много времени;

·      Описание системы было химически грамотным.

Я выбрал LM Studio и начал перебирать варианты нейросетей, способных работать на моем железе (RTX 3090) и выдавать приемлемый результат. Таковой оказалась gemma-4-31b.

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

Читать далее

От сырых проверок качества данных до понятной картины в OpenMetadata

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели6.8K

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

Меня зовут Микаэл Новиков, я главный разработчик в команде ML-платформы MAGNIT TECH. Расскажу, как мы в проекте F&R не смогли оставить data quality без внимания, отобразили результаты проверок в OpenMetadata и попутно наступили на несколько грабель интеграции open source-решения.

Читать далее

Давай по новой, Миша: speculative decoding от черновика до проверки

Уровень сложностиСредний
Время на прочтение18 мин
Охват и читатели6.1K

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

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

Далее разберём весь цикл: как работает черновая модель, по какому правилу принимаются токены, какого размера должен быть draft, почему важен одинаковый токенизатор и как всё это включить в Transformers и vLLM.

Отдельно посмотрим на подходы, где вторая модель вообще не нужна: EAGLE, Medusa, LayerSkip и DFlash.

Читать далее

Способ визуализации n‑мерных эмбеддингов в трёхмерном пространстве

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели5.9K

Способ визуализации n‑мерных эмбеддингов в трёхмерном пространстве.

Обычно при упоминании отображения эмбеддингов (или как мы уже знаем, n‑мерных векторов) имеют в виду отображение множества этих векторов на двумерное или трёхмерное пространство с уменьшением размерности.

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

Читать далее

Почему ИИ для программирования выбирает одни и те же библиотеки: я просканировал 30 сайтов документации

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели5.6K

Я собираю фидбэк по проекту, который советую людям как альтернативу тяжёлому фреймворку. Вставляю его в диалог с ассистентом кода и прошу подсказать библиотеку под задачу, которую он решает лучше всего. Ассистент называет три конкурента покрупнее и ни разу — мой проект. Дело не в качестве кода: я решил проверить гипотезу техническими средствами, а не спором в комментариях.

Гипотез было три. Может, дело в файле robots.txt, который блокирует ботов ИИ. Может, у проекта просто нет llms.txt — модного файла, который сейчас советуют выкладывать. Может, документация физически нечитаема для краулера. Я написал скрипт, прогнал его на 30 сайтах документации популярных Python- и JS-библиотек и получил цифры, которые сходятся не с той гипотезой, что я держал в голове изначально.

Коротко результат: robots.txt не блокирует ботов ИИ ни на одном из 30 доменов — ни по адресу документации, ни в корне домена; llms.txt есть у 11 проектов, и независимые логи показывают, что его почти никто не запрашивает; а пустая для краулера страница нашлась у трёх проектов, но после проверки внутренних страниц из них остался один. Метод, код и таблица — дальше, вместе с сопоставлением с чужими исследованиями и командой, которой это можно проверить у себя.

Читать далее

Ускоряем Python код в два раза с помощью типизации

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели11K

Покажу, как можно ускорить код h11 (HTTP/1.1 библиотечка со 710k пользователями на Github) с помощью компиляции с mypyc примерно в два раза. В процессе расскажу, как я чинил разные интересные ошибки, связанные c адаптацией кодовой базы под mypyc.

Читать далее

Парсер, который не падает, а врёт: шесть случаев из моей практики

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели6.4K

За полтора месяца я собрал браузером около двухсот карточек товаров, счётчики просмотров с одиннадцати площадок и содержимое пары десятков объявлений. Данные нужны были не для продажи, а для собственной аналитики: я веду небольшой сайт и считаю по нему цифры.

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

Читать далее

Ближайшие события

DeepseekExtractor Утилита для излечения чатов из бэкапов DeepSeek

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели6.6K

Привет, земляне! Потребовалось мне тут на днях из истории переписки DeepSeek извлечь текст чата. Клиент позволяет выгрузить бэкап в формате JSON, и чтобы извлечь из него нужные мне данные я разработал простую утилиту, которой делюсь со всеми. В данной статье я описываю исследование структуры данных бэкапа и рассказываю как использовать утилиту.

Читать далее

Ускорение Python-сервиса с CinderX: JIT и статическая типизация

Уровень сложностиСложный
Время на прочтение29 мин
Охват и читатели6.6K

У любого ускорителя Python есть число: во сколько раз он быстрее. Меряют его на ядрах - сортировка, обход дерева, арифметика в цикле. Сервис устроен не так: обработчик ходит в базу, считает в numpy, сериализует ответ, и байткода, к которому это число применимо, в нём может почти не остаться. CinderX ускоряет байткод, и за пределы байткода это число не распространяется. Доля байткода в вашем сервисе - свойство вашего кода, а не расширения, и пока она не посчитана, «ставить или нет» решается угадыванием.

Читать далее

Как мы ускоряли сборку Python в 20 раз

Время на прочтение4 мин
Охват и читатели11K

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

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

В статье я расскажу, как нам удалось ускорить сборку Python до 20 раз.

Читать далее

Нужна ли умная модель для рутины? Дал четырём моделям пять одинаковых задач и сравнил

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели9.3K

На этой неделе на Хабре спорили, нужны ли программисту самые умные модели или для рутины хватит дешёвых. Триста комментариев и ни одного замера на одинаковых задачах. Я сделал: пять рутинных задач, четыре модели одного семейства, по два прогона, скрытые тесты. Сорок прогонов.

Самая дорогая модель оказалась самой быстрой: 341 секунда против 395 у самой дешёвой, потому что ей нужно меньше ходов и вдвое меньше текста. Четыре задачи из пяти решили все, 32 прогона из 32. А на пятой младшая модель написала баг и отчиталась двумя галочками подряд, вторая из которых опровергает первую.

Читать далее

Как попасть в ответы Perplexity AI и почему эта ИИ‑модель берёт не весь текст с цитируемых страниц

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели11K

Я прогнал 20 промптов через Perplexity API по три повтора, собрал 60 ответов и у каждой отсылки [N] в тексте связал предложение ответа со страницей источника, на которую оно указывает. Дальше самое трудоёмкое: для каждой такой пары — предложение ответа и страница источника — я искал в HTML кусок текста, максимально похожий на утверждение из ответа. Из 1355 отсылок 948 привели на страницы, которые ещё открываются, и на 448 из них нашёлся пассаж — абзац, пункт списка или ячейка таблицы, — покрывающий хотя бы треть слов утверждения.

Главный результат для того, кто пишет страницы, а не гоняет замеры: на сработавшей странице задействовано медианно два пассажа из 85, длиной около 49 слов каждый. По числу кусков это 2%, по словам больше — медиана 6,4% текста страницы при среднем 11,6%: сработавший пассаж длиннее типичного. Планировать имеет смысл не прочтение страницы целиком, а то, что из неё вытащат один самодостаточный абзац; что это значит для конкретного текста, я развернул в разделе про работу с Perplexity — он стоит в середине, до разбора моих ошибок в коде. Границы, за которыми эти числа перестают работать, вынесены в отдельный раздел — там же написано, как проверить то же самое на своей нише.

Вопрос, с которого всё началось: в логе замера видно, какие URL Perplexity ставит в источники, и не видно, что именно со страницы поехало в ответ — весь текст, абзац или одна строка списка.

Читать далее

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

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели9.9K

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

Показываю схему, которая решает обе проблемы: API без toggle, ключ идемпотентности в PostgreSQL, очередь в IndexedDB, Service Worker и проверка офлайна в Playwright. Это не полный offline-first — только защита действий в момент обрыва связи.

Разобраться с повторами

Генератор музыкальных видео на Python: зерно раздуло файл в 13 раз, спектр врал на тишине, AV1 выиграл втрое

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели8.3K

Я отрендерил трёхминутный ролик из одной статичной картинки и получил файл на 472 МБ. Виновным оказалось плёночное зерно: шум амплитудой меньше 2 % шкалы, который почти не видно, умножает размер видео на тринадцать, а попиксельный — на тридцать три.

Разбираюсь, почему межкадровое сжатие ломается именно о шум, чиню это тремя способами (зерно блоками, другой кодек, синтез зерна в AV1) и меряю результат по VMAF: при одинаковом качестве x264 просит 15.2 Мбит/с, а AV1 — 4.4. Заодно ловлю собственный визуализатор спектра на вранье — на цифровой тишине он бодро плясал на 0.885 от полной высоты — и разбираю три грабли, включая пустую строку в argparse, которая вписала слово «использование» внутрь prog.

Читать далее